http://www.3gsdn.com/thread-34-1-1.html
![]() 最简单的指引莫过于问自己:“我想(用 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 ![]() ![]() ![]() Full ALSA ![]() [API Reference] Safe ALSA ![]() Phonon 和 KNotify ![]() ![]() [API Reference] PulseAudio ![]() [API Reference] 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的软件开发者。如果你的软件不遵循这个列表,除非你有很好的理由,否则,可以认为你的软件是失败的。 “否”:
|