通过写入/dev/dsp输出声音

通过写入/dev/dsp输出声音

我知道可以写入任意数据/dev/dsp并且扬声器中会发出噪音。但无论我传递给该文件的数据是什么,噪音都是相同的。我想知道是否可以通过写入来产生一些有意义的声音/dev/dsp

答案1

这一定是可能的,虽然我还没有遇到任何程序生成一个文件以这种类型的原始格式。

如果您只是对它的工作原理以及设备必须编写什么才能有声音输出感兴趣,您可以查看源代码袜队。该程序可用于对给定的输入文件进行转码并通过输出到/dev/dsp. (使用选项运行程序-t oss)。

如果您只是寻找最简单的方式从控制台播放声音,那么使用 ALSA 而不是 OSS 可能会更好。使用aplayalsa-utils 的一部分。您很可能会默认安装它。

答案2

高级 bash 脚本编写指南。例29.2:

#!/bin/b[as][1]h
# music.sh

# Music without external files

# Author: Antonio Macchi
# Used in ABS Guide with permission.


#  /dev/dsp default = 8000 frames per second, 8 bits per frame (1 byte),
#+ 1 channel (mono)

duration=2000       # If 8000 bytes = 1 second, then 2000 = 1/4 second.
volume=$'\xc0'      # Max volume = \xff (or \x00).
mute=$'\x80'        # No volume = \x80 (the middle).

function mknote ()  # $1=Note Hz in bytes (e.g. A = 440Hz ::
{                   #+ 8000 fps / 440 = 16 :: A = 16 bytes per second)
  for t in `seq 0 $duration`
  do
    test $(( $t % $1 )) = 0 && echo -n $volume || echo -n $mute
  done
}

e=`mknote 49`
g=`mknote 41`
a=`mknote 36`
b=`mknote 32`
c=`mknote 30`
cis=`mknote 29`
d=`mknote 27`
e2=`mknote 24`
n=`mknote 32767`
# European notation.

echo -n "$g$e2$d$c$d$c$a$g$n$g$e$n$g$e2$d$c$c$b$c$cis$n$cis$d \
$n$g$e2$d$c$d$c$a$g$n$g$e$n$g$a$d$c$b$a$b$c" > /dev/dsp
# dsp = Digital Signal Processor

exit      # A "bonny" example of an elegant shell script!

计算结果有评论吗...

答案3

至少在 FreeBSD 上,/dev/dsp需要 8 位无符号单声道音频,采样率为 8000 Hz。转换现有文件,例如音乐.m4a,对于这种格式ffmpeg(作为原始音频,没有标题),执行以下操作:

ffmpeg -i music.m4a -ar 8000 -ac 1 -c:a pcm_u8 -f u8 music.raw

music.raw然后可以使用以下命令播放生成的文件:

cat music.raw > /dev/dsp

答案4

如果你使用 ALSA,你可以使用 aplay,例如:

cat foobar.wav | aplay

输出看起来像:

Playing WAVE 'stdin' : Signed 16 bit Little Endian, Rate 44100 Hz, Stereo

相关内容