Linux声音系统
来源:互联网 发布:引用json文件 编辑:程序博客网 时间:2024/05/29 09:59
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声音系统
- Linux声音系统
- 命令行调节linux系统声音
- Linux声音系统 ALSA OSS
- linux 系统播放网页内容没声音
- 何关闭Linux系统的beep声音
- ARM-Linux:设备-mixer-linux系统声音效果调节
- Linux声音
- Linux系统中关闭喇叭的报警声音
- Linux问题解决_arch系统安装完没有声音
- 修复:Linux系统机箱前置面板耳机插孔没声音
- iOS 播放系统声音&系统声音大全
- 修复系统声音小喇叭
- WinCE系统声音定制
- WinCE系统声音定制
- WinCE系统声音定制
- WinCE系统声音定制
- 学习Git分布式版本控制系统总结
- OSG设置纹理和渲染属性
- 杭电oj-2020
- 关于在activity检测当前线程是否是UI线程的时机
- VS下开发经验
- Linux声音系统
- 实战:mysql版本升级
- ArrayList,Vector, LinkedList的存储性能和特性
- centos6.5下载地址
- Hadoop:hadoop的起缘和发展史
- leetcode_376. Wiggle Subsequence(DP 和 Greedy)
- OC_模糊搜索
- 直接拿来用,最火的Android开源项目
- 指针的定义和使用