Linux 音频子系统分析1

Linux 音频子系统分析1(基于Linux6.6)---硬件介绍

一、概述

1. Linux 音频子系统概览

Linux 音频子系统分为多个层次和模块,它们各自负责不同的任务。最常见的音频子系统框架包括:

  • ALSA (Advanced Linux Sound Architecture): ALSA 是 Linux 系统中处理音频输入、输出的主要框架,提供了硬件抽象、驱动程序、音频接口、混音等功能。
  • OSS (Open Sound System): 早期的音频接口框架,已被 ALSA 替代,但仍可在某些系统中找到并提供兼容支持。
  • PulseAudio 和 PipeWire: 这两个是音频服务器,提供更高层次的音频管理,负责音频流的路由、混音、音量控制等功能,通常运行在 ALSA 或其他底层音频框架之上。

2. ALSA (Advanced Linux Sound Architecture)

ALSA 是 Linux 音频子系统的核心,提供对音频硬件的支持。它提供了以下几个关键功能:

  • 音频设备驱动:ALSA 为各类音频硬件提供设备驱动,这些驱动负责与硬件进行通信。每个支持的硬件都有一个对应的 ALSA 驱动。
  • 硬件抽象层:ALSA 提供硬件抽象层,使得应用程序和中间件(如 PulseAudio、Jack 等)不必直接与硬件交互。这样可以使不同的音频硬件设备具有一致的接口。
  • 多声道支持和混音:ALSA 支持多声道音频输出,并具有硬件和软件混音的能力,允许不同音频源的混合输出。

ALSA 主要通过 snd(Sound)子系统在 Linux 内核中实现。音频设备通过 /dev/snd/ 目录下的设备节点与用户空间进行交互。

ALSA 关键组件

  1. 音频设备驱动:每个音频设备(如声卡、内建音频芯片等)都有一个 ALSA 驱动,它负责与硬件通信。常见的 ALSA 驱动有:

    • snd_hda_intel:用于支持 Intel 高定义音频 (HD Audio) 硬件。
    • snd_usb_audio:用于支持 USB 音频设备。
    • snd_pcm:提供 PCM(脉冲编码调制)音频流的处理功能。
  2. 控制接口:ALSA 提供了控制接口来调整音量、输入/输出源选择、声道配置等。应用程序可以通过 alsamixer 等工具访问这些控制接口。

  3. PCM(Pulse Code Modulation)接口:ALSA 提供了对 PCM 流的支持,这是一种无损音频编码格式,通常用于音频数据的传输。

3. PulseAudio 和 PipeWire

尽管 ALSA 是 Linux 音频子系统的核心,但许多现代 Linux 系统使用 PulseAudioPipeWire 作为音频服务器来处理音频流和设备管理。

  • PulseAudio:PulseAudio 是 Linux 上广泛使用的音频服务器,负责将不同的音频流路由到正确的设备。它支持多通道音频、网络音频流、应用程序之间的音频共享、混音和音量控制。PulseAudio 居于 ALSA 和用户应用之间,充当音频数据流的中介。

  • PipeWire:PipeWire 是一个相对较新的音频和视频流处理框架,旨在替代 PulseAudio 和 JACK。它不仅支持音频流的路由,还支持视频流的传输,特别适合处理多媒体应用。PipeWire 提供与 ALSA 和 PulseAudio 的兼容性,并且更现代化,具有更高的性能和灵活性。

4. 音频硬件接口

Linux 支持多种音频硬件接口,包括内建音频芯片、外部声卡、USB 音频设备等。常见的音频硬件接口包括:

  • HD-Audio (High Definition Audio):现代的计算机主板通常配备了 HD-Audio 设备,采用 Intel/Realtek 等厂商的音频芯片。这些硬件通常支持高品质的多声道音频。

  • USB 音频设备:USB 音频设备(如 USB 声卡、耳机等)通过 USB 总线连接到计算机,ALSA 提供了 snd_usb_audio 驱动来支持这些设备。

  • PCI/PCIe 声卡:传统的 PCI 或 PCIe 声卡(如 Creative SoundBlaster 等)通过 ALSA 驱动进行管理。

  • 蓝牙音频设备:蓝牙耳机、音响等设备也通过 ALSA 和 PulseAudio 支持。

5. 音频数据流

在 Linux 音频系统中,音频流数据通常以 PCM 数据流的形式传输。这些数据流可以是:

  • 输入音频流:通常来自麦克风或其他音频采集设备。
  • 输出音频流:通常传输到扬声器、耳机或其他音频输出设备。
  • 环回音频流:在一些系统中,音频可以在不同的应用程序之间进行环回传输,用于音频录制或实时处理。

ALSA 提供了对这些音频流的低延迟支持,并且可以通过 pcm 接口进行配置。

6. 硬件接口图

 

二、数字音频信号的传输标准

  • I2S
  • PCM(Pulse Code Modulation)
  • PDM(Pulse Density Modulation)
  • S/PDIF和Ethernet AVB主要用于板间长距离及需要电缆连接的场合

2.1、I2S

I2S全称Inter-IC Sond Bus,是飞利浦在1986年定义(1996年修订)的数字音频传输标准,用于数字音频数据在系统内部器件之间传输,例如编解码器Codec、DSP、数字输入/输出接口、ADC、DAC和数字滤波器等。

1.I2S特点

  • 支持全双工/半双工
  • 支持主/从模式
  • 和PCM相比,I2S更适合立体声系统。当然,I2S的变体也支持多通道的时分复用,因此可以支持多声道。

2.主要有三个信号

  • 串行始终SCLK,也叫位始终(BCLK),对应数字音频的每一位数据,SCLK都有一个脉冲。SCLK的频率=2 * 采样频率 * 采样位深。
  • 帧时钟LRCK(也称WS),用于切换左右声道的数据。LRCK为‘1’表示传输右声道数据,为“0”则是左声道。LRCK的频率 = 采样频率
  • 串行数据(SDATA),就是用二进制补码表示的音频数据,(MSB —> LSB:数据由高位到低位依次传输)
  • 一般还有MCLK,主时钟

  对于I2S的数字接口定义也比较简单,没有从地址或者从设备的概念,在I2S总线上,只能同时存在一个主设备和发送设备。在I2S系统中,提供时钟(SCK)的设备为主设备,其常见的系统框图如下:


在I2S传输协议中,数据信号、时钟信号以及控制信号是分开传输的。I2S协议只定义三根信号线:时钟信号SCK、数据信号SD和左右声道选择信号WS。

信号线说明功能
SCK (Serial Clock)时钟信号提供同步时钟信号,控制数据位的传输速率。每个时钟周期传输一个数据位。
SD (Serial Data)数据信号用于传输音频数据。数据按照一定的位宽和顺序通过该线传输。
WS (Word Select)左右声道选择信号用于指示数据是左声道还是右声道。在一个音频帧中,WS信号通常用于区分左右声道的数据。

信号线的具体功能:

  1. SCK(时钟信号):时钟信号用于同步音频数据的传输。在一个I2S协议中,SCK通常由主设备提供,其频率与音频数据的传输速率相关。每个SCK周期传输一位数据。

  2. SD(数据信号):传输音频数据的线。数据位在每个SCK周期内传输。根据音频格式的不同,数据的位宽和格式可能有所不同(例如,16位、24位、32位等)。

  3. WS(左右声道选择信号):WS信号用于区分左右声道。通常,WS信号的一个周期内传输左声道和右声道的数据。在一个时钟周期内,WS信号会从低电平(代表左声道)切换到高电平(代表右声道)。

I2S数据传输基本操作:

  • 左声道数据:当WS为低电平时,SD线上传输左声道的数据。
  • 右声道数据:当WS为高电平时,SD线上传输右声道的数据。

3.典型I2S信号时序图

 

三、PCM/TDM

PCM(Pulse Code Modulation)是通过等时间间隔(采样速率)将采样模拟信号数字化的方法。
PCM接口常用于板级音频数字信号的传输,与I2S类似,其实I2S也是PCM的一种特例接口,只不过,I2S的速率会更高,比较适用于传音乐。而PCM通常用于AP处理器与通信MODEM之间的语言数据传输(就是双向打电话数据),对于I2S只能传2个声道的数据,而PCM可以传多达16路数据,采用时分复用的方式,也就是TDM。其接口与I2S类似,电路信号为

  • PCM_CLK 数据时钟信号
  • PCM_SYNC 帧同步时钟信号
  • PCM_IN 接收数据信号
  • PCM_OUT 发送数据信号

四、PDM

PDM(Pulse Density Modulation)是一种数字信号表示模拟信号的调制方法,声音通过传感器获得模拟信号,经过AD,得到音频数字信号,然后经过PDM脉冲转换成数字信号。PDM使用远高于PCM采样率的时钟采用调制模拟分量,只有1位输出,要么是0,要么是1。



PDM方式的逻辑相对复杂,但只需要两根线,时钟和数据。对于下图,主设备为两个从设备提供时钟,分别在时钟的上升沿和下降沿触发选择Source 1/2作为数据输入。


PDM在诸如手机和平板等对于空间限制严格的场合有着广泛的应用前景。在数字麦克风领域,应用最广的就是PDM接口,其次为I2S接口。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值