鄙人现在还不是什么大虾,近几周 是想对音频有个深入的研究学习。下面的浅析有哪些方面不到位的,请多多拍砖.
基于linux-3.14.25内核 版本
内核的sound 架构 ,这里 基于两条主线
1. 数据结构 include/sound/core.h
snd_card
snd_devices
snd_devices_ops
2.函数入口 sound/core/init.c –> pcm.c +pcm_lib.c jack.c …. *.c snd_card_register snd_device_register_all 通过遍历dev->list 链表回调 dev_register完成一系列的音频控件初始化以及注册 下面列出主要的音频”控件”(为了方便理解 这里暂取名音频控件) a. snd_ctl_dev_register //主要实现contrl控件入口函数的注册及初始化 snd_register_device 注册snd_ctl_f_ops 里面提供音频文件的访问/ 设置等api b. snd_pcm_dev_register snd_register_device_for_dev 注册snd_pcm_f_ops 里面提供 音频文件数据流(playback/capture) write open poll等api 其中pcm也是音频中一个关键性的控件, pcm是脉冲编码调制,主要负责音频数据的转换 主要有两大核心 playback: 将app传输过来的音频数据 转化为 人耳可以辨别的 模拟数据 capture: 将mic等设备采集的数据 传输给用户空间的app c. snd_jack_dev_register input_register_device 注册 音频相关的输入设备 像类似的headphone 耳机等