SDB:声音概念

跳转到:导航搜索
openSUSE 的通用声音概念。

Linux 声音系统

openSUSE 的声音驱动程序通常由 ALSA 包提供。在大多数情况下,启动时声音配置应自动完成。

OSS(开放声音系统)

OSS 是一个可移植的 Unix 系统声音接口,此处仅出于历史原因提及。

在 Linux 内核的情况下,开放声音系统 (OSS) 是直到 2.4.x 系列为止唯一支持的声音系统。它由芬兰人 Hannu Savolainen 于 1992 年创建(后来对 OSS 的改进被设为专有)。从 Linux 内核版本 2.5 开始,引入了 ALSA(高级 Linux 声音架构),OSS 接口被 Linux 作者弃用。支持 OSS 的 openSUSE 音频输出库是“libao”。

早在 2007 年 7 月,OSS 的源代码就以 CDDL 形式发布给 OpenSolaris,以 GPL 形式发布给 Linux。

参考

http://en.wikipedia.org/wiki/Open_Sound_System

现在认为它已过时,尽管 ALSA 提供了可选的内核 OSS 模拟模式

https://alsa.opensrc.org/OSS_emulation

ALSA(高级 Linux 声音架构)

ALSA 是推荐给仅打算在 Linux 上工作的软件的接口。它支持许多 PCI 和 ISA“即插即用”声卡,提供用于音频卡的内核硬件驱动程序,以及使 ALSA 应用程序编程接口 (API) 可用于各种软件应用程序的库。为了保持向后兼容性,ALSA 还包含一个可选的 OSS 模拟模式,该模式可以透明地显示给程序,就像它是 OSS 一样。ALSA 声卡驱动程序不是 openSUSE 内核源代码的一部分,而是编译并链接到内核作为模块。ALSA 的一项功能(OSS 中不可用)是 ALSA 允许多个应用程序共享设备。


具有声音的多媒体接口

通常(但不总是),声音播放器将使用 xine 或 gstreamer 作为其声音引擎。Xine 和 gstreamer 提供了一个接口,媒体播放器开发人员可以将他们的应用程序与之接口,而无需强制他们的应用程序深入到系统声音接口的更深层次。

GStreamer

GStreamer 是用 C 编程语言编写的多媒体框架,其类型系统基于 GObject。GNOME 桌面环境是 GStreamer 技术的主要 Linux 用户。在 Gnome 的情况下,PulseAudio 或最近的 PipeWire 处理声音服务器职责,而 GStreamer 处理编码和解码。GStreamer 服务于众多多媒体应用程序,例如视频编辑器、流媒体广播器和媒体播放器。它被设计为跨平台,已知可在 Linux (x86、PowerPC 和 ARM)、Solaris (x86 和 SPARC)、Mac OS X、Microsoft Windows 和 OS/400 上运行。GStreamer 使用插件架构,这使得 GStreamer 的大部分功能都实现为共享库。动态加载插件库以支持广泛的编解码器、容器格式和输入/输出驱动程序。

更多信息:http://en.wikipedia.org/wiki/GStreamer

Phonon

KDE Plasma 5 使用 Phonon 多媒体 API。Phonon 将提供一个通用的接口,位于其他后端之上,包括 GStreamer 和 VLC 后端库。

有关更多信息,请参阅:http://en.wikipedia.org/wiki/Phonon_(KDE)

Phonon 提供了一个一致的 API,用于在多媒体应用程序中处理音频和视频。该 API 被设计为类似 Qt,因此,它为 KDE 开发人员提供了熟悉的功能风格。首先,重要的是要说明 Phonon 不是什么:它不是声音服务器。相反,由于多媒体编程的不断变化,它提供了一个一致的 API,该 API 封装了这些其他多媒体技术。然后,例如,如果 GStreamer 决定更改其 API,则只需要调整 Phonon,而不是每个 KDE 应用程序单独调整。

Phonon 由开发人员称之为“引擎”提供支持,并且每个受支持的后端都有一个引擎。

目前,两个主要的受支持后端是 GStreamer 和 VLC,由以下软件包表示

phonon4qt5-backend-gstreamer
phonon4qt5-backend-vlc

有一个“phononsettings”GUI 允许您根据需要配置这两个后端的优先级。


Linux 声音服务器或守护进程

与 Linux 中的许多其他程序一样,声音系统是使用服务器-客户端解决方案构建的。声音服务器是负责与硬件(声卡)实际通信的部分。不同的客户端可以连接到此声音服务器并请求将声音数据发送到声卡。

这些声音客户端可以是普通的程序,例如 mp3 播放器或视频播放器,但在某些情况下,可以是连接到网络的另一台计算机上运行的客户端。支持的声音服务器

  • ALSA(带有 dmix 插件支持)
  • JACK
  • PulseAudio
  • PipeWire

dmix

dmix 是 ALSA 的一部分,本身不是一个单独的系统。它充当“间接层”,因此包含在此处。dmix 插件扩展了 PCM 设备的功​​能,允许在通道、文件和声卡设备之间进行低级采样转换和复制。dmix 插件提供多个流的直接混合,并默认启用。

更多信息:https://alsa.opensrc.org/Dmix

JACK

JACK 是一个低延迟音频服务器,专为符合 POSIX 标准的操作系统(如 GNU/Linux 和 Apple 的 OS X)编写。它可以将许多不同的应用程序连接到音频设备,并允许它们在彼此之间共享音频。它的客户端可以在自己的进程中运行(即作为正常应用程序),或者它们可以在 JACK 服务器内运行(即作为“插件”)。JACK 依赖于 alsa 来提供内核硬件驱动程序。JACK 从一开始就是为专业音频工作设计的,其设计侧重于两个关键领域:所有客户端的同步执行和低延迟操作。

更多信息:http://jackit.sourceforge.net/

PulseAudio

PulseAudio 是一个网络声音服务器,在理论上与 Enlightened Sound Daemon (EsounD) 类似。它提供

  • 对多个音频流进行软件混合,绕过硬件的任何限制。
  • 网络透明性,允许应用程序在与运行它的机器不同的机器上播放或录制音频。
  • 声音 API 抽象,减轻了应用程序处理现有各种声音系统的需要。
  • 通用的硬件抽象,可以实现例如每个应用程序的单独音量等功能。

PulseAudio 带有许多插件模块。所有来自/到客户端和音频接口的音频都通过模块进行。PulseAudio 客户端可以将音频发送到“sink”(接收器)并从“source”(源)接收音频。客户端可以是 GStreamer、VLC 或任何其他音频应用程序。只有设备驱动程序/音频接口才能是源或 sink(它们通常是硬件输入和输出)。

更多信息

SDB:Pulseaudio


PipeWire

参考

openSUSE:Pipewire

参见


外部链接