首页 理论教育 Linux驱动实例:PCM音频流管理

Linux驱动实例:PCM音频流管理

时间:2023-10-19 理论教育 版权反馈
【摘要】:PCM全称为脉冲编码调制,在音频处理里面就是对模拟音频进行脉冲采样。PCM数据实际就是原始的音频流数据。ALSA架构中,PCM用来管理音频流,它用snd_pcm结构描述。一个声卡可以包含多个PCM,每个PCM又包含多个播放或采集子流。图15-2为ALSA PCM流的架构。音频流的方向定义如下:PCM音频子流结构如下:snd_pcm_new函数创建一个新的PCM实例:int snd_pcm_new;snd_pcm_new_stream函数创建一个新的PCM子流:int snd_pcm_new_streamstream即子流的方向。

Linux驱动实例:PCM音频流管理

PCM全称为脉冲编码调制(pulse-code modulation),在音频处理里面就是对模拟音频进行脉冲采样。声卡对模拟音频信号按照一定的采样率(sample rate)以及精度(bits per sample)进行采样,每个采样点的音频数据为一帧(frame)。一帧音频数据的bit数为精度×声道,一秒音频数据的bit数为精度×声道×采样率。一帧一帧的音频数据按照时间顺序串在一起组成了音频流。PCM数据实际就是原始的音频流数据。

ALSA架构中,PCM用来管理音频流,它用snd_pcm结构描述。一个声卡可以包含多个PCM,每个PCM又包含多个播放或采集子流。图15-2为ALSA PCM流的架构。

978-7-111-56706-6-Chapter15-7.jpg

图15-2 音频流组织结构

978-7-111-56706-6-Chapter15-8.jpg

音频流包括播放流与采集流,播放流与采集流均有多个子流,分别存放在snd_pcm结构的streams[2]成员中。音频流的方向定义如下:

978-7-111-56706-6-Chapter15-9.jpg

PCM音频子流结构如下:(www.xing528.com)

978-7-111-56706-6-Chapter15-10.jpg

snd_pcm_new函数创建一个新的PCM实例:

int snd_pcm_new(struct snd_card*card,char*id,int device,

int playback_count,int capture_count,struct snd_pcm**rpcm);

snd_pcm_new_stream函数创建一个新的PCM子流:

int snd_pcm_new_stream(struct snd_pcm*pcm,int stream,int substream_count)

stream即子流的方向。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈