在Ubuntu Linux上操作音频输入缓冲区

时间:2013-01-09 19:59:27

标签: linux audio ubuntu buffer audio-recording

假设我想用C ++编写音频过滤器,该音频过滤器应用于每个音频或特定的麦克风/源,我应该从哪里开始使用ubuntu?

编辑,要明确我不知道如何做到这一点以及Pulseaudio,ALSA和Gstreamer的作用是什么。

1 个答案:

答案 0 :(得分:1)

Alsa提供了一个用于访问和控制音频和MIDI硬件的API。 ALSA的一部分是一系列内核模式设备驱动程序,而另一部分是应用程序链接的用户空间库。 Alsa是单客户。

PulseAudio是一个框架,可以帮助多个客户端应用程序访问单个音频接口(alsa是单客户端)。它提供了一个守护进程,它“拥有”音频接口,并为守护进程和使用它的应用程序之间的音频提供IPC传输。这在开源桌面环境中大量使用。 Pulse的使用在很大程度上对应用程序是透明的 - 它们使用带有音频传输和混合的alsa API继续访问音频输入和输出。还有Jack更多地针对“专业”音频应用 - 可能有点用词不当,尽管这里的意思是低延迟音乐制作工具。

gStreamer是基于信号图模式的通用多媒体框架,其中组件具有多个输入和输出引脚并提供转换功能。构建这些组件的图形以实现诸如媒体解码之类的操作,具有用于音频和视频输入或输出的特殊节点。它在概念上与CoreAudio和DirectShow类似。 VLClibAV都是开源替代方案,它们沿着类似的路线运行。您在这些之间的选择是API风格和实现语言的问题。特别是gStreamer是用C实现的OO API .VLC是C ++。

实现您描述的问题的显而易见的方法是实现gStreamer / libAV / VLC组件。如果您想处理音频然后将其路由到另一个应用程序,可以通过将其循环回Pulse或Jack来实现。

Alsa提供plug-in mechanism,但我怀疑从ALSA文档中实现这一点将是艰难的。

您描述的类型的构建效果插件的事实上的体系结构是Steinberg的VST。有很多开源主机和可以在Linux上使用的插件示例,而且至关重要的是,有很好的文档。与gStreamer / libAV / VLC一样,您可以将音频路由到此外。

其中,VST可能是最容易上手的。