跨平台声音系统之PulseAudio
2015-02-13 17:43:04 阿炯

PulseAudio(以前叫Polypaudio)是一个跨平台的,可通过网络工作的声音服务,其一般使用于Linux和FreeBSD操作系统,它可以用来作为一种简易改进的开放声音后台(ESD)替换。它也可运行于Microsoft Windows和POSIX兼容系统,像Linux和FreeBSD。PulseAudio采用C/C++开发并在GNU宽通用公共许可证 2.1.协议下授权使用。


PulseAudio is a sound system for POSIX OSes, meaning that it is a proxy for your sound applications. It allows you to do advanced operations on your sound data as it passes between your application and your hardware. Things like transferring the audio to a different machine, changing the sample format or channel count and mixing several sounds into one are easily achieved using a sound server.

PulseAudio is designed for Linux systems. It has also been ported to and tested on Solaris, FreeBSD, NetBSD, MacOS X, Windows 2000 and Windows XP.PulseAudio is an integral part of all relevant modern Linux distributions and used in various mobile devices by multiple vendors.

PulseAudio是一个声音服务器,一个后台进程从一个或多个音源(进程或输入设备)接受声音输入 然后重定向声音到一个或多个槽(声卡,远程网络PulseAudio服务,或其他进程)。其目的通过它是重定向所有声音流,包括那些试图访问硬件的进程(像那些遗留的基于OSS的软件)。PulseAudio通过提供适配器给那些使用不同的声音系统,像aRts和ESounD。

在Linux下的典型方案,用户提供配置ALSA来使用PulseAudio提供的虚拟设备。尽管应用使用ALSA会将输出的声音输出到PulseAudio,然后PulseAudio会使用ALSA它自己来访问真正的声卡. PulseAudio同样提供它自己的接口给应用程序,用来直接支持PulseAudio,就像那些遗留的基于ESD的软件,这样使得PulseAudio适合作为ESD的替代品。对于OSS的软件, PulseAudio提供padsp工具,用来代替硬件文件夹像/dev/dsp,欺骗应用程序,使程序以为它们有声卡的完全控制权。在事实上,它们的输出被PulseAudio重定向。


特点

可对每一个应用程序进行音量控制Per-application volume controls
可扩展的插件与支持可装载模块架构
兼容性许多流行的音频应用程序
支持多重音源和多重输出
低延时操作[来源请求]和支持延迟测量
一个对处理器资源效率零拷贝内存架构
能够发现本地网络上使用PulseAudio的其他计算机并通过其扬声器直接播放声音
能够改变一个应用程序的声音输出设备,就算这个应用程序在播放声音(程序不需要支持这特性,而事实上,程序甚至没有意识到改变)
带有脚本功能的命令行界面
一个功能完善且带有命令行重新配置功能的守护进程
内置采样转换和重采样功能
能够合并多块声卡成一个声卡
能够同步播放多个音频流
动态检测蓝牙音频设备
使全系统均衡的能力

PulseAudio被用于几个主要Linux发行版使用像Fedora、Ubuntu、Mandriva、Linux Mint、openSUSE,和OpenWRT,GNOME项目中还有越来越多的对它的支持。它也已经被多款基于Linux的移动电话设备当作声音系统,包括Nokia N900和Palm Pre。

PulseEffects

PulseEffects是GNU/Linux平台最重要的音效控制软件,拥有图形均衡器、压缩器、混响、降噪等效果模块,可以在用户空间调节输入输出的音频效果。


竞争对手

ALSA提供一个软件调音台叫dmix,它是在PulseAudio前开发的。这是几乎可以在所有的Linux发行版使用的一个简单的PCM音频混合的解决方案。但它不提供PulseAudio的高级功能(如高品质的重采样,聚合装置,定时的调度和网络音频)。

JACK是一个提供相比PulseAudio更专业的服务的体系,提供实时和低延时的表现。 和自从JACK2开始支持对称多处理,使得所有的音频客户端能有效平衡负载于多个处理器。音频客户端可以彼此之间任意连接,在JACK的所有客户之间的任意连接,可以被多种应用程序可视化和编辑,例如Qjackctl。这使得它非常直观地概述了整体音频控制流,可以在任何时候修改所有的音频应用程序和硬件路由。JACK对专业音频软件来说是首选的专业音频应用服务。

在OSS V4的声音系统,如4Front,可提供软件混音,重采样和改变对每个应用程序的基础量,与PulseAudio对比,这些功能是在内核中实现。PulseAudio的还可以与现有的音响系统互操作,包括那些设计成独占声卡的程序(OSSv3)

PipeWire是GNU/Linux平台上的用来处理媒体系统的服务和用户空间的应用程序接口。其开发出来的目的是为了替代PulseAudio来处理多媒体,包括支持容器化应用的音频输出,和专业音频用例。


最新版本:8.0
Automatic routing more likely to change profile
OS X and NetBSD support improvements
Systemd journal logging for clients
New LFE balance programming interface
Module-dbus-protocol improvements
More flexible configuration file handling
pulsecore-8.0.so moved to a private directory
New script for measuring memory consumption
Various bug fixes and small improvements

详情请看发行说明

最新版本:9.0
PulseAudio 9.0 发布,此版本内容更新如下:
Automatic routing improvements
Beamforming and various other new features in the WebRTC echo canceller
Various improvements in module-role-cork and module-role-ducking
LFE remixing disabled by default
memfd-backed shared memory transport
Support for sample rates up to 384 kHz
webrtc-audio-processing dependency minimum version bumped to 0.2
Changed the C standard from C99 to C11.

详情请看发行说明

最新版本:13.0
PulseAudio 13 已经发布,该版本内容如下:
支持 Dolby TrueHD 和 DTS-HD 主音频
增加对 SteelSeries Arctis 5 USB 耳机的支持
改进了 ALSA 卡的初始卡配置文件选择
Cmedia USB 2.0 High-Speed TrueHD Audio 的 S/PDIF 改进
删除 BlueZ 4 支持
放弃了对 intlTool 转换工具的支持
有一个新的函数,它有助于实现客户端线程的实时调度
从 pa_Format_info 获取各种参数的新函数
默认情况下在 module-loopback 中使用通道映射和源示例规范的能力

PulseAudio 13 系列还添加了几个新的模块参数,包括  module-loopback 的 max_latency_msec, module-rtp-send 的 stream_name,module-udev-detect 和 module-alsa-card 的 avoid_resampling,默认情况下不再使用持久蓝牙卡配置文件选择,建议用户默认使用 A2DP。同时此版本也是第一个采用新的 Meson 构建系统的开源版本。详情请见发行说明

最新版本:16.0
PulseAudio 16 已经于2022年5月下旬发布,带来了更多改进、各种音频功能和错误修复,具体更新内容如下:
发送到 RTP 模块的音频可以使用 Opus 编解码器进行压缩。
支持 EPOS/Sennheiser GSP 660 USB / 无线耳机和 SteelSeries GameDAC 的立体声输出。
修复了 TI PCM2902 供电声卡的输入问题。
隧道延迟现在可配置,而不是固定为 250 毫秒延迟。隧道模块现在也可以重新连接到远程服务器。
现在支持蓝牙设备电池电量报告。
PulseAudio 的 pactl 命令现在可以转储 JSON 格式的信息。
问题修复和其他改进。
更多内容请查看官方更新公告


项目主页:http://www.freedesktop.org/wiki/Software/PulseAudio/
该文章最后由 阿炯 于 2022-05-29 10:19:57 更新,目前是第 2 版。