如何将特定的音调发送到 /dev/audio?

如何将特定的音调发送到 /dev/audio?
  • cat /dev/urandom生成所有可能“值”的随机序列。
  • cat /dev/urandom | padsp tee /dev/audio > /dev/null将这些“值”定向到您的音频设备,将它们转变为“随机噪声”或“随机音调”(请参阅​​:在 /dev/snd/ 中生成随机噪音以供娱乐

但我怎样才能做同样的事情,而不是随机噪音/音调,我选择一个单身的所有可能值中的值以及cat 无限期地发送到音频设备(创建相同值而不是随机值的序列)?

这应该产生单一一致的音调。

界面

您可以手动尝试不同的值,但一个虚构的“界面”可以使您更轻松地选择/点击您想要的值:

  • 频率(赫兹)例如 440
  • 振幅(0 - 1) 例如 0.8

我宁愿不是使用音频文件,例如 file.wav、file.mp3、file.ogg 等。只是一个 bash 脚本和默认的 cli 应用程序(例如cat, file.mp3 padsp、file.ogg 等)。

答案1

您可以尝试任何可以做数学(sin尤其是)的东西,并将数字作为字符写入标准输出。例如:

awk --characters-as-bytes 'BEGIN { freq=2200; amp=0.3; for (i=0; i>=0; i++) { printf "%c", 127+ amp*(127.0*sin(2*3.14159265/44100*i*freq)); } }' | padsp tee /dev/audio > /dev/null

根据您的设置方式,freq它听起来更像是警报器......也许这是可以玩的东西,具体取决于您的用例。

幅度用 调整amp,最大 1.0。

请注意,我使用的是 GNU awk,因此--characters-as-bytes可以工作。您不希望字符在写入 stdout 时采用 UTF-8 编码!

此外,根据您的系统,如果默认采样率不同,您可能需要将 44100 替换为 48000 或其他数字。

相关内容