用于Linux的立体声“音调发生器”?


14

是否有用于Linux的立体声(左右声道分离)音源?您可以在其中设置每个通道的音量和音调/音高,并且最好还设置波形(正弦波,方波,锯齿波,...)并反转一个通道(相对于另一个通道)。

如果没有,有什么好的地方开始构想吗?我想最简单的办法就是改编现有的程序,例如合成器……但是,如果工作不佳,是否有任何库(例如SDL?)可以用作此类程序的基础?


您也许可以用sox完成它。
雷南

Answers:


15

听起来您在寻找Audacity,它是一个跨平台的开源音频编辑器。它的功能之一是允许您生成音调。这是一个多轨音频编辑器,因此您可以轻松创建立体声。

Generate菜单下,您可以创建任意频率,幅度和长度的正弦波,锯齿波和方波音调,而无需录制或需要其他输入文件。


但是它能产生“从无到有”的声音吗?我不打算录制和播放任何东西,只是为“永恒”生成两种略有不同的音调(每个通道一个)。
Baard Kopperud 2013年

1
@BaardKopperud是的,我更新了答案以澄清问题。
j883376

8

您可能会看一下speaker-test,这是我在alsa-utils软件包中找到的(在Arch机器上)。

speaker-test -c2 -t sine从xterm运行,给了我440 Hz正弦波,每次大约6秒,左右扬声器交替出现。在xterm中,它提供了一些有关它认为正在使用的扬声器的信息。

根据手册页,它可以产生任意频率的正弦波和粉红噪声。


1
speaker-test -c2 -t sine -f 440通过提供频率参数,可以补充您的示例。感谢你。
基督教徒

4

siggen程序应该可以解决问题。

siggen的屏幕截图

它具有两个具有独立信号的通道,并且它们之间具有相位。每个通道可以执行以下信号类型:

  • 正弦
  • 余弦
  • 广场
  • 三角形
  • 锯齿
  • 脉冲
  • 噪声

您可以像这样在立体声模式下运行它:

$ siggen -2

由于/dev/dsp在大多数现代Linux发行版中已弃用,因此您可能需要安装兼容性库。在基于Debian的发行版上,安装alsa-oss软件包并按以下方式运行:

$ aoss siggen -2

您也可以尝试使用PulseAudio OSS包装机:

$ padsp siggen -2

我得到:[siggen]输入/输出错误:/ dev / dsp
Ole Tange

嗯 PulseAudio OSS包装器完全有帮助吗?
Nathaniel M. Beaver

是的 有效。
Ole Tange

4

ffmpeg

ffmpeg可以照常做。

创建一个5秒的单声道1000Hz正弦out.wav声音文件:

sudo apt-get install ffmpeg
ffmpeg -f lavfi -i "sine=frequency=1000:duration=5" out.wav

立体声代替:

ffmpeg -f lavfi -i "sine=frequency=1000:duration=5" -ac 2 out.wav

该文件将作为2倍大,而且ffprobe会说,它有2 channels代替1 channel

播放音频5秒钟而不创建文件:

ffplay -f lavfi -i "sine=frequency=1000:duration=5" -autoexit -nodisp

一直玩到生气为止:

ffplay -f lavfi -i "sine=frequency=1000" -nodisp

说明文件:

sunder的其他部分音频源除了还介绍了其他有用的声音生成算法sine,例如:

  • anoisesrc:多种颜色的噪音,例如白色,粉红色,棕色
  • aevalsrc 采用任意数学表达式,因此应该能够产生三角波形(TODO表达式)

参考书目:

已在Ubuntu 18.04,ffmpeg 3.4.6中测试。

没有额外库的最少C音频生成示例

只是为了好玩:https : //stackoverflow.com/questions/732699/how-is-audio-represented-with-numbers-in-computers/36510894#36510894


1

saugns程序也能做到这一点。(目前,它是一种命令行音频生成器,支持8种波形和FM / PM / AM调制技术。)

要生成两个立体声分隔的100 Hz波,一个为正弦波,一个为三角形波,以及一个振幅倒置的波形,可以将以下脚本粘贴到文件中并在程序中运行(如所示./saugns filename):

Osin f100 a0.5 t2 P0
Otri f100 a(-0.5) t2 P1

ts指定时间(秒)。

Ps为每语音平移(0.0 =左,1.0 =右)。P将来的版本可能会更改为其他版本;README文件描述了当前语法。

编辑:我确实是该程序的开发人员。

同样,翻转幅度的另一种方法(对于某些波类型,例如sin但不是saw),是使用小写字母设置相位p。相加p0.5相位设置为波周期的50%(负一半)。此外,由于没有命名的余弦类型,p0.25因此可以将正弦转换为余弦(或p0.75表示负余弦)。


嗨,乔尔。欢迎使用Unix&Linux。我对您的回答表示赞同,因为这是一篇不错的第一篇文章。我想提到的是,如果您是项目的维护者或开发者,则通常会公开此信息。尽管对于GPL软件而言并不是真正的问题,但值得一提的是unix.stackexchange.com/help/promotion对于有用的Free / Libre软件,我想如果您知道用户知道您会愿意在该网站上获得投票您是该项目的开发人员之一。
Anthony Geoghegan


0

您可以使用SoX轻松合成音调。有一些绊脚石,但我最终能够弄清楚。

我在将SoX与PulseAudio接口时遇到麻烦,因此我只能将sox原始数据传输到paplay

管道很繁琐,所以我创建了一个脚本:

$ cat sox-paplay
#!/bin/bash
: ${HZ:=44100}
: ${NCHAN:=6}
: ${SINK:=mysink}
sox -c $NCHAN -n -t raw -r $HZ -L -b 16 - "$@" | paplay --no-remix --no-remap --raw -v -p --rate $HZ -d $SINK --channels $NCHAN

例如

sox-paplay synth sine 1000 gain -5 remix -m 0 0 1 0 0 0

remix效果仅用于将结果发送到特定通道。它功能更强大,但我们仅在此处使用基本功能。在此示例中,我们有一个六声道设备,并且正在向第三声道发送声音。

我最初创建了一个包装PulseAudio设备的ALSA设备,但后来发现无法使用ALSA控制通道映射,因此根据我的自定义通道映射与ALSA默认设置的不同,随机通道被混合在一起。这就是为什么我--no-remix --no-remappaplay上面;我只希望sox命令的原始通道排序。

我希望Linux上的音频内容能提供更好的文档和错误报告。

您可能对我最近发布的答案感兴趣,该答案显示了如何从命令行设置PulseAudio均衡器

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.