Linux声音系统
TAG: linux, alsa, oss, pulseaudio, esd, aRts
DATE: 2013-08-13
Linux声音系统有些混乱,它有三套音频驱动: OSS (Open Sound System), 商业版的OSS,和ALSA (Advanced Linux Sound Architechture)。 所以底层驱动有OSS和ALSA两套API。
一、声卡的工作原理
音频驱动的主要作用是驱动声卡工作,所以也叫声卡驱动。 声卡的主要作用是完成数模转换。 当电脑播放声音时,将数字数据送到声卡,由声卡转换成模拟数据给扬声器等外放设备。 当录音时,声卡将从麦克风送来的模拟数据采样成数字数据,送给计算机处理。
二、Linux音频驱动
早期的Linux音频驱动是OSS (Open Sound System), 但ALSA (Advanced Linux Sound Architechture)后来居上, 大有完全取代OSS的趋势。
Linux都是通过设备文件访问外部设备, ALSA和OSS有不同的设备文件。
+----------+--------------+--------------------+---------+
|设备类型 | OSS | ALSA | 备注 |
+----------+--------------+--------------------+---------+
|声音采样 | /dev/dsp0 | /dev/snd/pcmC0D0 | |
+----------+--------------+--------------------+---------+
| 混音器 | /dev/mixer0 | /dev/snd/mixerC0D0 | 控制音量|
+----------+--------------+--------------------+---------+
|高层音序器| /dev/music0 | N/A | MIDI支持|
+----------+--------------+--------------------+---------+
|低层音序器| /dev/midi0 | N/A | MIDI支持|
+----------+--------------+--------------------+---------+
|声音状态 | /dev/sndstat| N/A | |
+----------+--------------+--------------------+---------+
|控制文件 | N/A | /dev/snd/controlC0 | |
+----------+--------------+--------------------+---------+
ALSA提供了和OSS不同的API,因此如果你使用ALSA做音频驱动, 一些通过OSS操作声音的程序将不能正常发声。
为了解决这一问题,ALSA提供了兼容OSS的库, 因此,如果你使用 ALSA 驱动声卡,也安装了兼容OSS的库, 那些使用OSS API的程序也能正常工作。
三、应用程序和声卡驱动的交互方式
直接和底层声音驱动打交道
有一些应用程序直接和最底层的声音驱动(OSS或ALSA)打交道, 程序内部直接调用 OSS 或 ALSA 的API。
通过声音服务器
声音服务器介于应用程序和声卡驱动之间。 当不同的应用调用声音服务器的API来播放声音时,它们把音频数据送到服务器, 服务器将一个以上的播放请求混音后,再发送给底层的声卡驱动(ALSA或OSS)。 由ALSA或OSS来驱动声卡播放混音后的数据。 基于ESD开发音频程序的好处有:(1)简化开发。(2)即使底层驱动不支持多线程, 通过声音服务器也能实现多个应用程序同时发声。(3)有更好的音效。
- ESD
ESD 一直是 Gnome 桌面环境的声音服务器, Gnome 应用多是通过 ESD 处理声音的。 - aRts
和 ESD 对应,aRts 是 KDE 桌面环境的声音服务器, 底层通过 ALSA 驱动声卡。KDE 应用多通过 aRts 处理声音。 - PulseAudio
PulseAudio是新一代声音服务器,能提供更好的音效, 已经有越来越多的应用通过PulseAudio处理声音。 为了让使用ESD的程序能继续在PulseAudio 上工作, PulseAudio 提供了 ESD 的兼容层。 Gnome 未来将采用PulseAudio取代ESD。
通过其它库
除了声音服务器,为了简化开发,还出现了其它的一些声音库。 这些声音库有的和声音服务器打交道,有的直接和最底层的声音驱动(OSS或ALSA)打交道。 比如游戏程序使用的SDL库,就是直接和声音驱动打交道。
四、总结
Linux从应用程序到声音驱动的结构如下图所示。
+-------+ +------+ +-----+ +-----+ +----+
| Apps | | Apps | |Apps | |Apps | |Apps|
+---+---+ +---+--+ +--+--+ +--+--+ +-+--+
| | | | |
+---+---+ +---+------+ +-+--+ +--+--+ |
| ESD | |PulseAudio| |aRts| |Other| |
| Gnome | |ESD compat| |KDE | | SDL | |
+---+---+ +----+-----+ +-+--+ +--+--+ |
| | | | |
+---+-----------+----------+--------+------+---+
| ALSA (Advanced Linux Sound Architechture) |
| OSS (Open Sound System) |
+----------------------------------------------+
Linux声音系统的更多相关文章
- linux 声音大小调整的命令
alsamixer 输入上面的命令 回车即可看到图形界面,界面如下 ┌──────────────────────────── AlsaMixer v1.0.27.1 ──────────────── ...
- ALSA概述--高级linux声音驱动基本介绍和应用
基本介绍: ALSA是Advanced Linux Sound Architecture,高级Linux声音架构的简称,它在Linux操作系统上提供了音频和MIDI(Musical Instrumen ...
- Linux图像系统框架-理解X11与Qt的层次结构
转:http://blog.csdn.net/kjfureone/article/details/52848550 1. 前言 图形子系统是linux系统中比较复杂的子系统之一:对下,它要管理形态各异 ...
- alsa和oss声音系统比较
OSS(Open Sound System) OSS的含义为,Open Sound System,是unix平台上一个统一的音频接口.以前,每个Unix厂商都会提供一个自己专有的API,用来处理音频. ...
- ubuntu声音系统
查看声卡:cat /proc/asound/cards 显示所有ALSA的组件:cat /proc/asound/device aplay -l ubuntu使用pulseaudio,是ALSA(先进 ...
- Linux查看系统状态命令
Linux查看系统状态命令 iostat iostat 命令详细地显示了存储子系统方面的情况.你通常用iostat来监控存储子系统总体上运行状况如何,并且在用户注意到服务器运行缓慢之前提早 ...
- 82 fsck-检查与修复 Linux 档案系统
Linux fsck命令用于 检查与修复 Linux 档案系统,可以同时检查一个或多个 Linux 档案系统. 语法 fsck [-sACVRP] [-t fstype] [--] [fsck-opt ...
- 解决:WPS for Linux提示“系统缺失字体symbol、wingdings、wingdings 2、wingdings 3、webding”
WPS for Linux提示“系统缺失字体symbol.wingdings.wingdings 2.wingdings 3.webding” 出现提示的原因是因为WPS for Linux没有自带以 ...
- 如何查看、修改Linux的系统时间
如题: 如何修改Linux的系统时间? date -s 05/27/2011 date -s 10:24:00 clock -w 就这三条命令就OK了! 查看/修改Linux时区和时间 一.时区 1. ...
随机推荐
- 项目复审-Bata阶段
项目复审-Bata阶段 小组的名字和链接 优点 缺点 名次 别看了你没救了 https://www.cnblogs.com/liaoyujun233/p/9148781.html 基本功能都已经实现, ...
- 利用ceye中的dns来获取数据
安恒杯的一道命令执行题目 查看,存在robots.txt文件 查看index.txt文件,存在where_is_flag.php文件 使用cat没有任何回显 可以使用ceye平台利用dns记录内容,网 ...
- webservice(一) 概念
Web service:是一个平台独立的,低耦合的,自包含的.基于可编程的web的应用程序,可使用开放的XML(标准通用标记语言下的一个子集)标准来描述.发布.发现.协调和配置这些应用程序,用于开发分 ...
- 把打印的内容保存成文件(PDF)
有时候网页的内容和打印的内容会有一些差异,需要把打印的内容倒出来.是有办法的. 1.以谷歌为内核的浏览器示例,按Ctrl+p快捷键打开打印对话框,如图: 2.点击更改按钮,更改打印机,会出现选择目标打 ...
- Redis 基础:Redis 事件处理
Redis 事件处理 Redis服务器是一个事件驱动程序,服务器需要处理以下两类事件: 文件事件(file event):Redis服务器通过套接字与客户端(或其他Redis服务器)进行连接,而文件事 ...
- [POJ1704]Georgia and Bob 博弈论
从这开始我们来进入做题环节!作为一个较为抽象的知识点,博弈论一定要结合题目才更显魅力.今天,我主要介绍一些经典的题目,重点是去理解模型的转化,sg函数的推理和证明.话不多说,现在开始! Georgia ...
- MT【159】单调有界有极限
已知数列$\{a_n\}$满足:$a_n>0,a_{n+1}+\dfrac{1}{a_n}<2,n\in N^*$.求证:(1)$a_{n+2}<a_{n+1}<2 (n\in ...
- 【bzoj4520】 Cqoi2016—K远点对
http://www.lydsy.com/JudgeOnline/problem.php?id=4520 (题目链接) 题意 求平面内第K远点对的距离. Solution 左转题解:jump 细节 刚 ...
- Apache Commons IO之FileUtils的常用方法
Apache Commons IO 在学习io流的时候研究(翻译)了一下这个,只有FileUtils的某些方法,并不全面,还请谅解 org.apache.commons.io 这个包下定义了基于 st ...
- 【agc003D】Anticube
Portal --> agc003D Description 给你\(n\)个数,要从里面选出最多的数满足这些选出来的数中任意两个数的乘积都不是立方数 Solution (为什么感觉最近这种解法 ...