alsa和oss声音系统比较
OSS(Open Sound System)
OSS的含义为,Open Sound System,是unix平台上一个统一的音频接口。以前,每个Unix厂商都会提供一个自己专有的API,用来处理音频。这就意味着为一种Unix平台 编写的音频处理应用程序,在移植到另外一种Unix平台上时,必须要重写。不仅如此,在一种平台上具备的功能,可能在另外一个平台上无法实现。但 是,OSS出现以后情况就大不一样了,只要音频处理应用程序按照OSS的API来编写,那么在移植到另外一个平台时,只需要重新编译即可。因此,OSS提 供了源代码级的可移植性。
同时,很多的Unix工作站中,只能提供录音与放音的功能。有了OSS后,给这些工作站带来了 MIDI功能,加上音频流、语音识别/生成、计算机电话(CT)、JAVA以及其它的多媒体技术,在Unix工作站中,同样可以享受到同Windows、 Macintosh环境一样的音频世界。另外,OSS还提供了与视频和动画播放同步的音频能力,这对在Unix中实现动画、游戏提供了帮助。
本文首先解释在音频编程时经常遇到的名词、设备文件的含义,然后分别在录音、播放、Mixer方面对OSS接口的使用方法进行介绍。
数字音频设备(有时也称codec,PCM,DSP,ADC/DAC设备):播放或录制数字化的声音。它的指标主要有:采样速率(电话为8K,DVD为96K)、channel数目(单声道,立体声)、采样分辨率(8-bit,16-bit)。
mixer(混频器):用来控制多个输入、输出的音量,也控制输入(microphone,line-in,CD)之间的切换。
synthesizer(合成器):通过一些预先定义好的波形来合成声音,有时用在游戏中声音效果的产生。
MIDI 接口:MIDI接口是为了连接舞台上的synthesizer、键盘、道具、灯光控制器的一种串行接口。
在Unix系统中,所有的设备都被统一成文件,通过对文件的访问方式(首先open,然后read/write,同时可以使用ioctl读取/设置参数,最后close)来访问设备。在OSS中,主要有以下的几种设备文件:
* /dev/mixer:访问声卡中内置的mixer,调整音量大小,选择音源。
* /dev/sndstat:测试声卡,执行cat /dev/sndstat会显示声卡驱动的信息。
* /dev/dsp 、/dev/dspW、/dev/audio:读这个设备就相当于录音,写这个设备就相当于放音。/dev/dsp与/dev/audio之间的区别在于 采样的编码不同,/dev/audio使用μ律编码,/dev/dsp使用8-bit(无符号)线性编码,/dev/dspW使用16-bit(有符号) 线形编码。/dev/audio主要是为了与SunOS兼容,所以尽量不要使用。
* l /dev/sequencer:访问声卡内置的,或者连接在MIDI接口的synthesizer。
Linux中OSS的相关文件:
include/linux/sound.h
sound/sound_core.c
OSS的设备节点,字符设备,其主设备号为14
0 = /dev/mixer Mixer control
1 = /dev/sequencer Audio sequencer
2 = /dev/midi00 First MIDI port
3 = /dev/dsp Digital audio
4 = /dev/audio Sun-compatible digital audio
6 = /dev/sndstat Sound card status information {2.6}
7 = /dev/audioctl SPARC audio control device
8 = /dev/sequencer2 Sequencer -- alternate device
16 = /dev/mixer1 Second soundcard mixer control
17 = /dev/patmgr0 Sequencer patch manager
18 = /dev/midi01 Second MIDI port
19 = /dev/dsp1 Second soundcard digital audio
20 = /dev/audio1 Second soundcard Sun digital audio
33 = /dev/patmgr1 Sequencer patch manager
34 = /dev/midi02 Third MIDI port
50 = /dev/midi03 Fourth MIDI port
ALSA
ALSA (Advanced Linux Sound Architecture(高级Linux声音体系)的缩写) 是为声卡提供驱动的Linux内核组件,以替代原先的OSS(开放声音系统)。 一部分的目的是支持声卡的自动配置,以及完美的处理系统中的多个声音设备,这些目的大多都已达到。另一个声音框架JACK使用 ALSA 提供低延迟的专业级音频编辑和混音能力。
Jaroslav Kysela过去是这个项目的领导者,这个项目开始于为1998年Gravis Ultrasound所开发的驱动,它一直作为一个单独的软件包开发,直到2002年他被引进入 linux内核的开发版本 (2.5.4-2.5.5)1。从2.6 版本开始ALSA成为Linux内核中默认的标准音频驱动程序集,OSS则被标记为废弃。
ALSA是一个完全开放源代码的音频驱动程序集,除了像OSS那样提供了一组内核驱动程序模块 之外,ALSA还专门为简化应用程序的编写提供了相应的函数库,与OSS提供的基于ioctl的原始编程接口相比,ALSA函数库使用起来要更加方便一 些。利用该函数库,开发人员可以方便快捷的开发出自己的应用程序,细节则留给函数库内部处理。当然 ALSA也提供了类似于OSS的系统接口,不过ALSA的开发者建议应用程序开发者使用音频函数库而不是驱动程序的API。
Linux中ALSA的主要文件:
include/sound/driver.h
sound/core/*.c
注:OSS(Open Sound System)是Linux中的另外一个音频驱动程序框架。
以下是我的一些理解:
ALSA(高级Linux声音体系)和OSS(开放声音系统).这两个是系统发出声音最低层的软件系统,可以视为(或者就是)驱动.注意以下几点:
1、两个声音系统不能同时驱动声卡
两个分别基于这两个声音系统的应用程序是不能同时驱动声卡的,所以这两个应用程序也就没法同时发出声音了。
realplayer只能由oss声音系统驱动,而Mplayer可以选择alsa,不能同时发出声音;Ausacious是alsa,与YOYOPlayer也不能同时发声(我猜测YOYOPlayer也去通过驱动oss来发声)
2、OSS(开放声音系统)不支持混音
说oss具有声卡独占问题,两个基于oss的应用程序不能同时驱动声卡,也就没法同时发出声音。
我的realplayer是oss声音系统,而Mplayer可以选择oss,不能同时发出声音; realplayer与YOYOPlayer也不能同时发声
3、ALSA(高级Linux声音体系)支持混音,具有声卡共享的特性
两个基于alsa的不同应用程序能同时驱动声卡,就是说能同时发出声音,需要装libalsa。
Audacious与选择alsa的Mplayer能同时发声,
alsa和oss声音系统比较的更多相关文章
- Linux声音系统
TAG: linux, alsa, oss, pulseaudio, esd, aRts DATE: 2013-08-13 Linux声音系统有些混乱,它有三套音频驱动: OSS (Open Soun ...
- 通信行业OSS支撑系统软件研发思考
一般的,对所谓大型.通信行业.OSS支撑软件系统,我们可宏观定义以下几点: 以年计的研发周期 以几十人计的研发团队 以百计的业务菜单功能点 以千计的数据库表 以万计的业务术语指标 以亿计的数据表记录 ...
- ubuntu声音系统
查看声卡:cat /proc/asound/cards 显示所有ALSA的组件:cat /proc/asound/device aplay -l ubuntu使用pulseaudio,是ALSA(先进 ...
- 解决Ubuntu SMPlayer播放视频无声音问题
问题:Ubuntu Kylin 14.04 系统默认装好之后,smplayer播放视频都是正常的,但最近可能由于一些误设置,导致smplayer播放任何格式的视频都无声.解决方法:由于ALSA是Lin ...
- ios开发——实用技术篇Swift篇&系统声音
系统声音 // MARK: - 系统声音 /*----- 系统声音 ------*/ @IBAction func systemSound() { //建立的SystemSoundID对象 var s ...
- 使用 Python 的 sounddevice 包录制系统声音
博客中的文章均为meelo原创,请务必以链接形式注明本文地址 sounddevice是一个与Numpy兼容的录音以及播放声音的包. 安装sounddevice包 直接通过pip就能安装. pip in ...
- Android默认系统声音/大小修改及配置【转】
本文转载自:http://blog.csdn.net/a8316124/article/details/60574859 在做定制需求的时候,需要修改系统通知的声音,将其禁用掉,避免第三方应用发送通知 ...
- iTOP-4412-Ubuntu系统源码-ubuntu没有声音的解决办法
准备工作 1.下载 vim 在命令行上输入 apt-get install vim 下载 vim 2.输入 vim /etc/hosts 在所打开界面的第一行最后写上 iTOP4412-ubuntu- ...
- KDE声音服务器 arts
KDE声音服务器 arts arts介绍arts是KDE的核心声音系统,支持多音频流.全双工.网络声音请求.ALSA与OSS驱动后端.JACK声音服务器后端等扩展,它既是声音服务器,也 提供一套音频软 ...
随机推荐
- P1681 最大正方形II (动态规划)
题目背景 忙完了学校的事,v神终于可以做他的"正事":陪女朋友散步.一天,他和女朋友走着走着,不知不觉就来到了一个千里无烟的地方.v神正要往回走,如发现了一块牌子,牌子上有有一行小 ...
- tarkjan求无向图割点模板
#include<bits/stdc++.h> using namespace std; typedef long long ll; int n,m; ; ; struct node { ...
- 【(最小权点基)tarjan强连通分量缩点+tarjan模板】HDU 5934 Bomb
[AC] #include<bits/stdc++.h> using namespace std; typedef long long ll; int n; ; ; const int i ...
- sublime text3安装angularjs插件
sublime能够支持AngularJS开发那绝对是一件很爽的事情.下面我一步步讲解如何为sublime安装AngularJS插件. 首先提供一个破解版的sublime text 3的下载地址:htt ...
- 联合权值(codevs 3728)
Description 无向连通图 G 有 n 个点,n−1 条边.点从 1 到 n 依次编号,编号为 i 的点的权值为 Wi,每条边的长度均为 1.图上两点 (u,v) 的距离定义为 u 点到 v ...
- POJ1861 Network
Time Limit: 1000MS Memory Limit: 30000KB 64bit IO Format: %lld & %llu Description Andrew is ...
- 如何新建.htaccess文件
如何新建.htaccess文件 (1)新建文本文档,即txt文件: (2)把重写代码写进去: (3)然后选择[另存为],命名为.htaccess即可.
- Mybatis resultMap空值映射问题
参考博客:https://www.oschina.net/question/1032714_224673 http://stackoverflow.com/questions/22852383/how ...
- CKeditor如何实现图片上传功能
http://makaiyuan.blog.51cto.com/5819595/1049521 如何在数据库中导入excel文件内的数据:http://jingyan.baidu.com/album/ ...
- 模拟用户登录-SpringMVC+Spring+Mybatis整合小案例
1. 导入相关jar包 ant-1.9.6.jarant-launcher-1.9.6.jaraopalliance.jarasm-5.1.jarasm-5.2.jaraspectj-weaver.j ...