OSS 和ALSA
OSS(Open Sound System,开放声音系统),老系统中的音频框架
ALSA(Advanced Linux Sound Architecture,高级Linux声音体系),新系统中的音频框架,用于替代老的OSS。
两者结构都差不多,但ALSA有更多的优点,具体比较参考https://www.cdsy.xyz/computer/system/linux/230719/cd44767.html
只需要理解底层驱动层是ALSA框架就行。下图是转载的网络上的ALSA结构示意图
ALSA工具集也带一些命令行工具用于对声卡的操作,例如aplay arecord amixer alsamixer 等等,用于测试声卡以及实现简单的播放录制。这些工具工作于alsa,可用于诊断驱动配置问题。
pulseaudio,在alsa lib上又封装了一层,增加了很多pulseaudio自己定义的插件,这样大大扩展alsa lib的功能,同时混音方面也加强了
简单的来说就是增强了alsa lib的功能,下面的流程摘抄百度贴吧大神
https://tieba.baidu.com/p/3790145023?red_tag=3544148596
应用之前是app(aplay之类)-->alsa lib --->alsa driver--->发声音。
现在是app--->pulseaudio--->alsa lib--->alsa driver--->发声音。
或者为了兼容之前的老的软件,Pulseaudio还支持以alsalib做为自己的输入,输出的还可以用来做为输入,挺绕,但是挺好理解,兼容之前只支持alsa lib输出的程序。
为了兼容之前的app(只支持alsa lib的程序)
app--->alsa lib---> alsa lib的pulseaudio插件--->pulseaudio--->alsa lib--->alsa driver--->发声音。
上面这个图应用程序是alsa lib接口,不用改,但是声音又从pulseaudio过一次,享受了pulseaudio的功能。
更复杂一点是
pulseaudio分client和server, 所以把这个区分出来后,完整的图应该是:
app--->alsa lib---> alsa lib的pulseaudio插件--->pulseaudio client--->pulseaudio server--->alsa lib--->alsa driver--->发声音。
这些属于更上层,具体的可以参考这个连接https://www.cdsy.xyz/computer/system/linux/230719/cd44768.html
gstreamer介于软件层和音频输入层之间,优先于pulseaudio。gstreamer与众不同之处在于他不只是个音频处理框架,通过安 装解码器,你还可以通过他来播放音频视频文件。
程序音频最长的调用方式可以列出如下:
APP-->Phonon----->gstreamer -->pulseaudio--->alsa lib--->alsa driver--->发声音。
由于搞开发的这帮人极度迷信代码复用以及软件分层思想,所以linux的音频系统就搞的有点复杂,然后软件开发的音频系统出了问题,先要搞清楚软件到底工作在哪一层。好在现在的linux发行版不管是对图形还是多媒体,支持都非常完美了。绝大多数情况下,音频系统自然就是可以正常使用的。
PC上的音频标准,现在基本都是HDA了,不过不管是AC97还是HDA标准,带头大哥都是intel真是厉害啊。搜了一下这两者区别,感觉结构上没啥大区别,HDA是新标准,功能更强大了。下面是网上嫖的一张图
可以看到,主板上集成的是HDA的控制器,下面挂的HDA link上可以挂不通的codec(D/A和A/D).
所以其实在linux终端查看声卡,lspci 能看到的
就是上面这个图里面控制器,至于codec,并没列出来,codec可以用aplay -l 或者arecord -l 来查看
电脑声音有问题,可以用alsamixer进行查看或者调整看是否有声音,或者aplay arecord进行播放或者录音验证声卡驱动功能。
默认alsamixer 调整的声卡和chip都是Pulseaudio,可以按F6进行声卡选取
默认是Pulseaudio,选HDA intel PCH,将可以对物理声卡进行调整。
实际的问题,需要实际分析,alsa提供的工具日常用的最多就是alsamixer aplay arecord
Pulseaudio同样提供工具,在debian系的系统可以用dpkg -L pulseaudio-utils 命令来查看所带的工具,有录音parecord,播放 paplay ,或者通用的pacat 以及pactl 等等。