Linux 音频 API 指南
linux-dash
A beautiful web dashboard for Linux
项目地址:https://gitcode.com/gh_mirrors/li/linux-dash
·
http://www.3gsdn.com/thread-34-1-1.html
由于历史的原因,在 Linux 环境下有多种API系统可用于声音编程。但没有合适的指引就难以找到合乎自己需要的体系。这里是一个指引,是由Lennart Poettering <mzoybt (at) 0pointer (dot) net>所写(参见:Homepage of Lennart),目的就是带你走出这个密林。最简单的指引莫过于问自己:“我想(用 Linux Sound API)做些什么?”。下面就是答案: 我想写一个类似于媒体播放器的软件! 那就用 GStreamer。除非你只想基于KDE来编程,那么,你可以选择使用Phonon。 我想在自己的应用程序中加入事件声音! 使用 libcanberra,并根据XDG Sound Theming/Naming 规范安装声音文件。如果你只基于KDE,则可以使用KNotify,但它的着重点有所不同。 我想做专业的音频编程,包括硬盘录音、音乐合成、MIDI界面等! 使用 JACK 或者完整的ALSA 界面。 我想基础的PCM音频播放和捕捉! 使用 safeALSA 子集。 我想在游戏中加入声音! 如果是全屏幕的大型游戏,使用SDL的声音API。如果是简单的游戏,只用到基础的用户界面例如Gtk+的,使用 libcanberra 我想写一个混音器/音量控制软件! 这要根据你想在哪一个层次提供直接的支持:如果你想支持增强的桌面软件混音器,使用 PulseAudio 音量控制 API。如果你想支持硬件混音器,使用ALSA混音器API。 我想写一个支持plumbing layer的软件!使用 完整的 ALSA体系。 我想写一个嵌入式的音频软件! 从技术使用性角度而言safe ALSA子集是一个好的选择,但基于你实际的情况也可以使用其它API。 你想了解更多关于这些API的不同之处吗? GStreamer GStreamer 是一个Linux桌面媒体流系统的事实标准。它支持音视频流的编解码。可以基于该API实现从简单的音频文件播放到网络流媒体配置等大范围的应用。 GStreamer支持多种编解码器和音频后端。GStreamer显然不适用于基本的PCM音频播放或者低延时/实时应用场合。GStreamer是可移植的,并不限于仅能在Linux上使用。它支持的音频后端包括ALSA、OSS、PulseAudio等。 [API Reference] libcanberra JACK 是一个用于连接专业音频应用程序和硬件输入输出的声音系统。该系统专注于低延时和应用程序之间的互联接,因此,该系统对于普通的桌面应用或者嵌入式应用都不适合。如果你想做的只是简单的PCM音频播放,这个系统也不是很有用。JACK支持多种后端,其中支持得最好的是ALSA。JACK也是可移植的。 [API Reference]Full ALSA ALSA 是专门面向PCM音频播放和录音的Linux API。ALSA专注于硬件设备,但也支持其他一些后端。ALSA这个名字既表示了Linux内核的音频驱动程序,也表示了围绕着驱动程序而建立的用户空间函数库。ALSA 函数库是全面且可移植的。完整的ALSA API可以是非常复杂和巨大的,但它能几乎能支持所有的音频设备。不过ALSA API的某些功能实际取决于Linux核心和对应的Linux驱动程序对硬件的支持。比如基于软件的声音服务器或者在用户空间实现的音频驱动程序(蓝牙和火线音频支持)。[API Reference] Safe ALSA 在全部的ALSA API中,只有一个子集是可以在所有ALSA支持的后端上工作的。因此,如果编写使用了ALSA的软件,并且需要软件是可移植、向后兼容和与各种音频服务器、蓝牙音频和火线音频都兼容的话,你应该只使用这个被称为Safe ALSA的安全API子集。该子集是基础的、可移植的PCM音频播放和录音功能的实现,而且除了支持ALSA核心本身所支持的设备之外,还支持OSS、PulseAudio、JACK等。Phonon 和 KNotify Phonon 是高层次的媒体流系统的抽象实现,比如GStreamer便是一种。但Phonon比GStreamer更深入。KNotify是一个用于“提示”的系统,支持的不仅仅是事件声音。但目前还不支持 XDG Sound Theming/Naming Specifications。而且并不支持缓冲或传递事件元数据到更下层的音频系统。KNotify支持多种音频后端来通过Phonon进行播放。这两者的API都是仅面向KDE/Qt体系的,所以不能在该体系之外的应用程序中使用。 [Phonon API Reference] [KNotify API Reference] SDL SDL 是一种跨平台、可移植的API,主要用于全屏幕的游戏开发。SDL包括很多东西,其中的一部分是一个可移植的音频界面。SDL也支持OSS、PulseAudio和ALSA作为后端。[API Reference] PulseAudio PulseAudio 是一种适用于Linux桌面和嵌入式环境的音频系统。PulseAudio可以在用户空间运行,并且通常在ALSA之上运行。PulseAudio支持网络透明化、每应用程序的音量调节、空间事件声音、可以即时在设备之间切换音频流、策略判断以及其他许多高层次的操作。PulseAudio在Linux音频栈上加入了无缝播放glitch-free模式。在专业音频制作环境下PulseAudio并不是很有用。PulseAudio在Linux之间是可移植的。PulseAudio具有原生的API可供调用,并支持ALSA的安全子集Safe ALSA。PulseAudio支持基于LD_PRELOAD的OSS兼容。PulseAudio支持与 JACK连接。[API Reference] OSS Open Sound System 是一种低层的PCM音频API,支持多种Unix,包括Linux。一开始的时候它是被作为标准的Linux音频系统并在目前的Linux核心中实现对API版本3支持,并称为OSS3。但是,OSS3 已经被认为是过时的,并已经被ALSA完整地替代。OSS3的后继即OSS4已经可用,但在Linux上没有获得支持,包括标准核心以及众多的发行版。 OSS API是非常低层的,是基于使用ioctl()函数的直接核心界面通信而实现的。因此,OSS3 并不易用,而且并不能在非核心级别的音频系统比如象PulseAudio一类的声音服务器上实现,也不能在用户空间级别的音频驱动(比如蓝牙或火线音频)上实现。OSS3的时序模型完全无法正确地投射到软件音频服务器上,并在非PCI硬件诸如USB音频上也是存在问题的。还有就是,OSS不支持采样类型转换、remapping或重采样。这意味着对于支持OSS3的软件来说,它必须包括完整的转换器/remapper/resampler,以应对硬件本身不支持用户需要的音频参数时需要用软件搭救的情况。而现在常见的音频设备很多就是只支持采样率48KHz的S32LE(有符号32位低位在前)音频。如果OSS应用软件假设它总是能播放S16LE(有符号16位低位在前)采样率为44.1KHz的音频就会因此而失败。OSS3可移植到其他Unix类的操作系统,但不同的系统之间存在差异。还有就是,OSS不支持环绕声和其他现在的声音系统所提供的功能。因此,综上所述,不应该再使用OSS。[Programming Guide] 上面列出的所有音频系统和API一般在当前的各种发行版中均获得支持,除了libcanberra可能需要到开发中的发行版里面才有支持。 你想了解在什么情况下你必须使用某种特定的音频API吗?GStreamer GStreamer 适用于于非常高层的应用。比如你想播放音频或视频流,但不想理会任何的技术细节,诸如PCM播放控制或解码器调用等。 libcanberra libcanberra 对于那些需要在用户界面中加入声音反馈的应用是最适合的。另外,它也可用作播放简单的声音以达到向用户给出提示一类的用途。 JACK JACK 最适合于专业音频制作,以及应用程序之间的互联。 Full ALSA 完整的 ALSA 界面最适合于那些在“plumbing layer”的软件,或你基于某些专业音频制作的目的而想使用某种特定硬件的特殊功能时。 Safe ALSA safe ALSA 界面最适合于通过硬件或其他软件声音系统播放或录制PCM音频数据的软件。 Phonon and KNotify Phonon 和 KNotify 只能在 KDE/Qt 应用程序中使用,并只适用于高层的媒体播放用途,比如简单的声音提示等。 SDL SDL 最适合于在全屏幕游戏中使用。 PulseAudio 目前,PulseAudio API 只应在那些想控制声音系统特定的功能(比如混音器)的应用程序,又或者,应用程序本身已具备PCM输出抽象层,想为PulseAudio增加额外的后端来保持一个最小化的音频栈。 OSS OSS 不适合于在任何新的应用程序中使用。 你想了解多些有关safe ALSA 子集吗? 这里是一个“应”和“否”的列表,对应着ALSA API。如果你想你的软件能向后兼容,并且能在各种非硬件的后端或运行在用户空间的后端(比如蓝牙或火线音频)上运行,你应仔细阅读这个列表。其中一些建议也适用于使用完整ALSA API的软件开发者。如果你的软件不遵循这个列表,除非你有很好的理由,否则,可以认为你的软件是失败的。 “否”:
|
A beautiful web dashboard for Linux
最近提交(Master分支:2 个月前 )
186a802e
added ecosystem file for PM2 5 年前
5def40a3
Add host customization support for the NodeJS version 5 年前
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐
由于历史的原因,在 Linux 环境下有多种API系统可用于声音编程。但没有合适的指引就难以找到合乎自己需要的体系。这里是一个指引,是由Lennart Poettering <mzoybt (at) 0pointer (dot) net>所写(参见:









所有评论(0)