Linux 声音系统

article/2025/4/7 22:40:26

驱动级

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


http://chatgpt.dhexx.cn/article/D7aCW5oE.shtml

相关文章

python人像录制加声音_Python实现电脑录音(含音频基础知识讲解)

Python实现电脑录音(含音频基础知识讲解) 前言 今天开始进入近期系列文章的第一篇,如何用 Python 来实现录音功能。 在开始"造轮子"之前,个人一直强调一个观点,如果有些东西已经有了,不妨直接去 …

linux 下 FFmpeg 录制命令

linux 下 FFmpeg 录制命令 转载自:http://blog.topspeedsnail.com/archives/1325 录制屏幕(mkv格式): ffmpeg -f x11grab -r 30 -i :0.0 -f alsa -i hw:0,0 -acodec flac -vcodec ffvhuff out.mkv 1 ffmpeg -f x11grab -r 30 -…

linux下录制视频流,Ubuntu Linux 下的PSP视频输出以及录制

前阵子,由于想录个PSP游戏的视频而又不想切到Windows,所以折腾了一下Ubuntu Linux下的办法。 最终算是实现了,以下为方法。 1、工具 需要PSP端视频输出软件,如irshell 5和FreeCheat(FC),本人用的是FC,irshe…

如何录制电脑系统声音(Audacity)

文章目录 如何录制电脑系统声音什么是AudacityAudacity 如何使用 如何录制电脑系统声音 思路:利用音频录制工具(电脑录音软件) 电脑自带录音机 现在电脑系统都自带有录音机功能,无需安装,我们直接在开始菜单里面就可…

05_Git命令详解 - CRUD

教程目录 01_版本控制概述 02_Git概述 03_Git下载和安装 04_Git底层原理解析 05_Git命令详解 - CRUD 06_Git命令详解 - 分支 07_Git命令详解 - 后悔药 08_Git远程仓库 Git高层命令 - CRUD 初始化仓库 # 命令 git init 解析:要对现有的某个项目开始用 Git…

java开发中常用的Git命令详解

java开发中常用的Git命令详解(IDEA内如何操作) 一:写这篇文章的目的是什么?二:使用场景在哪里?1:当我们要使用idea去git仓库拉代码时,首先我们的idea得配置git工具2:项目…

Git 常用命令详解

Git 常用命令详解 1. Git 常用命令1.1 常用git 命令图表汇总1.2 配置个人信息1.3 创建版本库1.4 常用Git命令汇总 2. Git 解决代码冲突3. Git 分支管理4. Git 提交代码4.1 Git本地多次提交合并成一次提交4.1.1 多次提交合并需求4.1.2 多次提交合并Git操作步骤 1. Git 常用命令 …

git命令详解( 五 )

此篇只会来介绍rebase和merge的区别 rebase merge 区别 rebase 下面我们进行一个小练习来练习一下rebase 看一下题目要求: 共有三个特性分支 —— side1 side2 和 side3将这三分支按顺序推送到远程仓库因为远程仓库已经被更新过了,所以我们还要把那些工作…

git add 命令详解

1. 前言 2. git add 基本操作 3. git add 命令参数 4. git add 背后做了什么 1. 前言 众所周知,git 中有工作区、暂存区、版本库三大组成部分 工作区: 电脑中能看到的目录,也就是写代码的地方 暂存区: 英文叫 stage 或 index。一般存放在 .git 目录下…

git命令详解( 四 )

此篇为git命令详解的第四篇,话不多说,我们直接上知识点好吧 git Push 偏离的工作 gitPush: 此命令负责将你的变更上传到指定的远程仓库,并在远程仓库上合并你的新提交记录。一旦 git push 完成, 你的朋友们就可以从这个远程仓库下载你分享的成…

常用git命令详解

常用git命令 前言: 原链接:生哥哥牛逼(破音) 不争气的生哥哥链接404了,害得我要重新整理 一、概念: 1.基本概念 工作区:就是你在电脑里能看到的目录。 暂存区:英文叫 stage 或 index。一般存放在 .gi…

【Git】常用命令详解(循序渐进,逐步分析)

目录 一、Git常用命令 1.1、设置用户签名 1.2、初始化本地库 1.3查看本地库状态 1.3、添加文件到暂存区 1.4、将暂存区文件添加文件到本地库 1.5、查看历史版本(提交历史记录) 1.6、修改文件 1.7、版本穿梭 一、Git常用命令 1.1、设置用户签名…

windows大多数的弹窗提示内容是可以复制的(我们主要用于报错内容复制粘贴去百度)

现在以记事本保存时候的弹窗为例,用鼠标点击弹窗的任意位置,然后CtrlC,然后在新的记事本中可以粘贴这个提示内容了。如下图粘贴效果 1.大多数弹窗适用 2.主要用于把“报错内容”复制粘贴去百度 找解决方案

vscode 编辑特效 文字爆炸效果插件

1、在vscode应用扩展商店下载Power Mode插件 2、在vscode最左下角打开设置 在搜索框输入settings.json {"files.autoSave": "off","workbench.colorTheme": "Visual Studio Light","[json]": {"editor.quickSuggestio…

初始C语言——完数问题

问题描述: 描述:一个数如果恰好等于它的因子之和(除本身以外),这个数就成为“完数”。例:6的因子为1,2,3,而6123,因此6是完数。找出1000以内的所有完数。 代…

C语言_求完数

2020年9月5日 11:11:31 /*一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如 61+2+3, 编程找出 1000 以内的所有完数。 */ 两种方法: 方法一的年代比较久远,而且算法思维比较复杂和抽象&#x…

1000以内完数c语言程序_C语言完数编程题目详解

首先看一下完数的概念:完数,即完美数,一个数如果恰好等于除它本身外的因子之和,这个数就称为完数。例如61+2+3.(6的因子是1,2,3) 题目概要:请写一个C语言程序,要求输入一个数字n输出…

C语言完数计算

完数定义&#xff1a;如果一个数等于它的因子之和 例如:6123 编程工具&#xff1a;codeblocks #include<stdio.h> #include<stdlib.h> #include<math.h> void main() {int sum;//所有因子的的和int arr[20] { 0 };//声明一个数组用来存储所有的因子int n;…

C语言入门——1000以内的完数

完数定义 如果一个数恰好等于它的真因子之和&#xff0c;则称该数为“完全数” [2] 。各个小于它的约数&#xff08;真约数,列出某数的约数&#xff0c;去掉该数本身&#xff0c;剩下的就是它的真约数&#xff09;的和等于它本身的自然数叫做完全数&#xff08;Perfect numbe…

C语言———求”完数“

一个数如果恰好等于它的因子之和&#xff0c;这个数就称为 "完数 "。例如61&#xff0b;2&#xff0b;3&#xff0c;编程找出1000以内的所有完数。 分析过程 所谓完数&#xff0c;就是其因子之和&#xff08;不包括自己本身&#xff09;等于其本身&#xff0c;称其…