inux 音频架构 alsa hda

来源:互联网 发布:复制软件 编辑:程序博客网 时间:2024/06/07 01:10

弄得太杂了,脑袋都成了一团浆糊,可时间紧迫,不能停下了,感觉自己总是缺乏自信,当遇到挫折的时候很容易失去对自己的信任,容易怀疑自己。需要停下来总结一下了。做得太杂总是不能做到专业的,我很害怕,害怕自己落后,虽然感觉自己越来越落后。


这次的目的是为了了解linux 音频处理架构,重在理解,并结合INTEL HDA进行分析。


我们可调用函数 --> alsa-lib ---> alsa-soc ---> alsa-driver ---> also-soc ---> audio hardware


设备文件:

/dev/snd

controlC0:声卡的控制,如同到选择,混音、麦克风的控制等

midiCODO: 用于播放 MIDI音频

pcmC0D0c:用于录音的pcm设备(最后的C代表 capture)

pcmC0DOp: 用于播放的pcm设备(最后的p代表 playback)

seq:音序器

timer:定时器

注意: include/sound/core.h中列出来的设备类型;

PCM:pulse-code modulation缩写,脉冲编码调制。即把声音从模拟转换成数字信号的一种技术。他利用一个固定的频率对模拟信号进行采样。采样后的信号在波形上就像一串连续的幅值不一的脉冲。把这些脉冲的幅值按一定的精度进行量化。量化后的数值被连续地输出、传输、处理或记录到存储介质中,这就是数字视频的产生过程。


PCM信号的两个重要指标是采样频率和量化精度,目前,CD音频的采样频率通常为44100HZ,量化精度是16bit.通常,播放音乐时,应用程序从存储介质中读取音频数据,经过解码后,最终送到音频驱动程序中的就是PCM数据,反过来,在录音时,音频驱动不停地把采样所得的PCM数据送回给应用程序,由应用程序完成压缩、存储等任务。音频驱动的两大核心人物就是:

playback:如何把用户空间的应用程序发过来的PCM数据,转化为人耳可以辨别的模拟音频

capture:把MIC拾取到的模拟信号,经过采样、量化、转换为PCM信号送回给用户空间的应用程序。


ALSA-DRIVER中的PCM中间层:

ALSA已经为我们实现了功能强劲的PCM中间层,自己的驱动中只要实现一些底层的需要访问硬件的函数即可。


注册为字符设备。


注意这个文件:

sound/pci/hda


Control 接口:

主要让用户空间的应用程序(alsa-lib)可以访问和控制音频codec芯片中的多路开关,滑动控件等。

hda_intel.c hda_codec.c


CODEC:

CODEC的作用可以归结为以下几种:

1、对PCM等信号进行A/D转换,把数字的音频信号转换为模拟信号;

2、对MIC、Linein或者其他输入源的模拟信号进行A/D转换,把模拟的声音信号转变CPU能处理的数字信号;

3、对音频通路进行控制,如播放音乐、收听调频收音机,或者接听电话时,音频信号在codec内的流通路线是不一样的。

4、对音频信号作出相应的处理,如音量控制,功率放大,EQ控制等等。


注意 patch_realtek.c

代码框架出来了,下一步看具体实施



原创粉丝点击