Linux 声音系统

驱动级

OSS 和ALSA

OSS(Open Sound System,开放声音系统),老系统中的音频框架

ALSA(Advanced Linux Sound Architecture,高级Linux声音体系),新系统中的音频框架,用于替代老的OSS。

两者结构都差不多,但ALSA有更多的优点,具体比较参考 https://blog.csdn.net/longwang155069/article/details/53256751

只需要理解底层驱动层是ALSA框架就行。下图是转载的网络上的ALSA结构示意图

ALSA工具集也带一些命令行工具用于对声卡的操作,例如aplay arecord amixer alsamixer 等等,用于测试声卡以及实现简单的播放录制。这些工具工作于alsa,可用于诊断驱动配置问题。

PulseAudio

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--->发声音。

Phonon----->gstreamer

这些属于更上层,具体的可以参考这个连接https://blog.csdn.net/meizum10/article/details/17437959

gstreamer介于软件层和音频输入层之间,优先于pulseaudio。gstreamer与众不同之处在于他不只是个音频处理框架,通过安 装解码器,你还可以通过他来播放音频视频文件。

程序音频最长的调用方式可以列出如下:

APP-->Phonon----->gstreamer -->pulseaudio--->alsa lib--->alsa driver--->发声音。

由于搞开发的这帮人极度迷信代码复用以及软件分层思想,所以linux的音频系统就搞的有点复杂,然后软件开发的音频系统出了问题,先要搞清楚软件到底工作在哪一层。好在现在的linux发行版不管是对图形还是多媒体,支持都非常完美了。绝大多数情况下,音频系统自然就是可以正常使用的。

HDA AC97

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 等等。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
Linux系统中,录制系统声音可以通过命令行进行操作。首先,需要在系统设置的声音输入设备中选中MIC或LINE-IN设备,然后执行相应的录音命令。例如,使用arecord命令可以录制声音,具体命令如下: 录制声音(一般是MIC): arecord -d 60 -f cd -r 8000 -c 1 -t wav voice.wav 转录音乐(一般是LINE-IN): arecord -d 60 -f cd -r 44100 -c 2 -t wav music.wav 其中,-d参数表示录制的时长,-f参数表示采样格式,-r参数表示采样率,-c参数表示声道数,-t参数表示文件格式。执行以上命令后,系统会立即开始录制声音,并将录音保存为指定的文件。\[1\]\[3\] 如果录制的声音中存在杂音,可以尝试调整系统设置中声音输入设备的音量,将其调整到一个合适的值,以避免音量过大导致杂音。另外,你还可以使用Audacity软件进行降噪处理,具体操作可以参考这篇文章:https://teliute.org/linux/Teauda/lesson10/lesson10.html。此外,这篇文章也提供了系统降噪的方法,你可以参考:https://blog.csdn.net/weixin_37272286/article/details/81200494。\[2\] #### 引用[.reference_title] - *1* *2* *3* [Linux系统下录音方法](https://blog.csdn.net/liteblue/article/details/114325719)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值