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

标签 linux audio ubuntu buffer audio-recording

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

编辑,要清楚,我不知道如何执行此操作以及 Pulseaudio、ALSA 和 Gstreamer 的作用是什么。

最佳答案

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

PulseAudio是促进多个客户端应用程序访问单个音频接口(interface)的框架(alsa 是单客户端)。它提供了一个“拥有”音频接口(interface)的守护进程,并为守护进程和使用它的应用程序之间的音频提供 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 可能是最容易上手的。

关于linux - 在 Ubuntu Linux 上操作音频输入缓冲区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14245424/

相关文章:

linux - 我怎样才能ALIAS --> "less"一个目录下的最新文件?

ios - 使用 Honeywell Captuvo SL22 设备播放声音

phpbrew 安装特定的 php 版本(ubuntu 13.04)

c# - 在 Ubuntu 15.04 上使用 Mono 导入库错误

ubuntu - 如何通过 ubuntu 终端在 chrome 网络浏览器中打开 html 文件?

regex - 为什么 sed 不像 awk 那样追加换行符?

linux - 轻松自动 Magento 存储 DB + 文件 Linux 服务器备份?

linux - Linux 中的系统范围 TCP 参数可终止用户应用程序之间断开的连接

安卓在后台播放音乐

c++ - 在从麦克风捕获期间耳机中的音量降低到 30%