
Linux 上有类似立体声(独立的左声道和右声道)音频发生器之类的东西吗?您可以在其中设置每个通道的音量和音调/音调,最好还设置波形(正弦波、方波、锯齿波……)并反转一个通道(与另一个通道相对)。
如果没有,有什么好的地方可以开始制作吗?我想最简单的是适应现有的程序,如合成器...但如果效果不佳,是否有任何库(如 SDL?)可以用作此类程序的基础?
答案1
听起来您正在寻找大胆这是一个跨平台的开源音频编辑器。它的功能之一是允许您生成音调。它是一个多轨音频编辑器,因此您可以轻松创建立体声音调。
在Generate
菜单下,您可以创建任意频率、幅度和长度的正弦波、锯齿波和方波音调,而无需录制或需要额外的输入文件。
答案2
ffmpeg
像往常一样,ffmpeg 可以做到。
创建 2 秒单声道 1000 Hz 正弦out.wav
声音文件:
sudo apt-get install ffmpeg
ffmpeg -f lavfi -i "sine=f=1000:d=2" out.wav
立体声改为-ac 2
:
ffmpeg -f lavfi -i "sine=f=1000:d=2" -ac 2 out.wav
该文件将是原来的 2 倍大,并且ffprobe
会显示它已2 channels
替换为1 channel
.
左侧生成 2 秒 500 Hz,右侧生成 1000 Hz,相关问题:https://stackoverflow.com/questions/59551013/how-to-generate-stereo-sine-wave-using-ffmpeg
ffmpeg -filter_complex '
sine=f=500[0];
sine=f=1000[1];
[0][1]amerge,atrim=end=2
' out.wav
播放 1000 Hz 2 秒而不创建文件:
ffplay -autoexit -nodisp -f lavfi -i 'sine=f=1000:d=2'
永远播放 1000 Hz 直到你发疯:
ffplay -nodisp -f lavfi -i "sine=f=1000"
在两个通道上产生 500 Hz 和 1000 Hz 的 2 秒混合/叠加,相关问题:https://stackoverflow.com/questions/14498539/how-to-overlay-downmix-two-audio-files-using-ffmpeg
ffplay -nodisp -autoexit -f lavfi -i '
sine=f=500[0];
sine=f=1000[1];
[0][1]amix=inputs=2, atrim=end=2
'
产生 2 秒 500 Hz 的频率,然后产生 2 秒 1000 Hz 的频率:
ffplay -nodisp -autoexit -f lavfi -i '
sine=f=500:d=2[0];
sine=f=1000:d=2[1];
[0][1]concat=n=2:v=0:a=1
'
2 秒 250 Hz + 500 Hz,然后是 2 秒 1000 Hz + 2000 Hz:
ffplay -nodisp -autoexit -f lavfi -i '
sine=f=250[0];
sine=f=500[1];
sine=f=1000[2];
sine=f=2000[3];
[0][1]amix=inputs=2, atrim=end=2[01];
[2][3]amix=inputs=2, atrim=end=2[23];
[01][23]concat=n=2:v=0:a=1[out];
'
10 秒内从 0 到 20 kHz 的频率扫描,主要问题:https://superuser.com/questions/1156429/how-to-generate-a-time-dependent-Frequency-wave/1156468#1156468
ffplay -autoexit -f lavfi -i "aevalsrc='sin(2000*t*2*PI*t)':d=10"
文档:
另一部分则被撕碎音频源除了 之外,还记录其他有用的声音生成算法sine
,例如:
参考书目:
- https://superuser.com/questions/724391/how-to-generate-a-sine-wave-with-ffmpeg
- https://stackoverflow.com/questions/11831214/how-to-run-ffplay-as-a-window-less-process/53295994#53295994
在 ffmpeg 6.0、Ubuntu 23.10 上测试。
无需额外库的最小 C 音频生成示例
答案3
你可以看看speaker-test
我在 alsa-utils 包中找到的(在 Arch 机器上)。
speaker-test -c2 -t sine
从 xterm 运行,给我一个 440 Hz 正弦波,每个约 6 秒,左右扬声器交替。在 xterm 中,它提供了一些有关它认为正在使用的扬声器的信息。
根据手册页,它可以产生任意频率的正弦波和粉红噪声。
答案4
这索恩斯程序也可以做到。 (它是一个命令行音频生成器,支持一种语言包括更多类型的音频生成,包括集中式 FM/PM 和 AM/RM 调制技术。)
要生成两个立体声分离的 100 Hz 波(一个是正弦波,一个是三角波,一个是反振幅波),可以将以下脚本粘贴到文件中并运行程序(如./saugns filename
):
Wsin f100 a0.5 t2 cL
Wtri f100 a(-0.5) t2 cR
这也足够短,可以直接作为单行代码运行:
./saugns -e "Wsin f100 a0.5 t2 cL Wtri f100 a(-0.5) t2 cR"
st
指定时间,以秒为单位。
sc
用于更改默认通道混合(C = 中心)(L = 左硬,R = 右硬)。从“(-1.0)”到“1.0”的任何数字也可以用于这样的价值观。
旧编辑:我确实是该程序的开发者。
此外,翻转幅度的另一种方法(对于某些波类型,例如sin
但不是saw
)是使用小写字母 来设置相位p
。添加p0.5
将相位设置为波周期的 50%(负一半)。此外,由于没有命名的余弦类型,因此是将正弦转换为余弦(或负余弦)的p0.25
方法。p0.75