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声音系统比较的更多相关文章

  1. Linux声音系统

    TAG: linux, alsa, oss, pulseaudio, esd, aRts DATE: 2013-08-13 Linux声音系统有些混乱,它有三套音频驱动: OSS (Open Soun ...

  2. 通信行业OSS支撑系统软件研发思考

    一般的,对所谓大型.通信行业.OSS支撑软件系统,我们可宏观定义以下几点: 以年计的研发周期 以几十人计的研发团队 以百计的业务菜单功能点 以千计的数据库表 以万计的业务术语指标 以亿计的数据表记录 ...

  3. ubuntu声音系统

    查看声卡:cat /proc/asound/cards 显示所有ALSA的组件:cat /proc/asound/device aplay -l ubuntu使用pulseaudio,是ALSA(先进 ...

  4. 解决Ubuntu SMPlayer播放视频无声音问题

    问题:Ubuntu Kylin 14.04 系统默认装好之后,smplayer播放视频都是正常的,但最近可能由于一些误设置,导致smplayer播放任何格式的视频都无声.解决方法:由于ALSA是Lin ...

  5. ios开发——实用技术篇Swift篇&系统声音

    系统声音 // MARK: - 系统声音 /*----- 系统声音 ------*/ @IBAction func systemSound() { //建立的SystemSoundID对象 var s ...

  6. 使用 Python 的 sounddevice 包录制系统声音

    博客中的文章均为meelo原创,请务必以链接形式注明本文地址 sounddevice是一个与Numpy兼容的录音以及播放声音的包. 安装sounddevice包 直接通过pip就能安装. pip in ...

  7. Android默认系统声音/大小修改及配置【转】

    本文转载自:http://blog.csdn.net/a8316124/article/details/60574859 在做定制需求的时候,需要修改系统通知的声音,将其禁用掉,避免第三方应用发送通知 ...

  8. iTOP-4412-Ubuntu系统源码-ubuntu没有声音的解决办法

    准备工作 1.下载 vim 在命令行上输入 apt-get install vim 下载 vim 2.输入 vim /etc/hosts 在所打开界面的第一行最后写上 iTOP4412-ubuntu- ...

  9. KDE声音服务器 arts

    KDE声音服务器 arts arts介绍arts是KDE的核心声音系统,支持多音频流.全双工.网络声音请求.ALSA与OSS驱动后端.JACK声音服务器后端等扩展,它既是声音服务器,也 提供一套音频软 ...

随机推荐

  1. *AtCoder Regular Contest 094 F - Normalization

    $n \leq 200000$的abc字符串,现能进行如下变换零次或若干次:选一个$i<n$且$s_i \neq s_{i+1}$,把$s_i$和$s_{i+1}$替换成abc三个字母中除了这两 ...

  2. MongoDB GridFS(命令行+php操作)

    一.GridFS是什么 & 为什么需要它 我们知道目前MongoDB的BSON文件最大只能是16M,也就是说单个文档最多只能存储16M的数据,那么如果需要MongoDB存储超过16M的大文件该 ...

  3. linux fork()

    一. linux下C语言可以用fork()建立子进程.fork函数返回两个值,对于子进程,返回0; 父进程,返回子进程ID. 所以用if(fork()==0)      {子进程执行的代码段:}els ...

  4. hg下拉和上传代码

    1.从代码仓库克隆源代码:$ mkdir bzrobot_ws$ cd bzrobot_ws$ hg clone http://192.168.15.88/hg/bzrobot_src src$ ca ...

  5. Android-屏幕适配经验总结

    本文记录一些适配问题的研究,基础概念不做过多介绍. Android在做屏幕适配的时候一般考虑两个因素:分辨率和dpi.分辨率是屏幕在横向.纵向上的像素点数总和,一般用"宽x高"的形 ...

  6. 【Java TCP/IP Socket】应用程序协议中消息的成帧与解析(含代码)

    程序间达成的某种包含了信息交换的形式和意义的共识称为协议,用来实现特定应用程序的协议叫做应用程序协议.大部分应用程序协议是根据由字段序列组成的离散信息定义的,其中每个字段中都包含了一段以位序列编码(即 ...

  7. sql中Cast()函数的用法

    一.MYSQL 只需要一个Cast()函数就能搞定.其语法为:Cast(字段名 as 转换的类型 ),其中类型可以为: BINARY[(N)]CHAR[(N)] 字符型DATE  日期型DATETIM ...

  8. kafka的安装和使用;kafka常用操作命令

    kafka:基于发布/订阅的分布式消息系统.数据管道:最初用来记录活动数据--包括页面访问量(Page View).被查看内容方面的信息以及搜索情况等内容和运营数据--服务器的性能数据(CPU.IO使 ...

  9. BUPT复试专题—网络传输(2014网研)

    题目描述 网络的高效互联与智能传输是提升海量用户服务请求映射效率的重要措施.在这个任务中,你需耍在最小的传输时间内,将数据源传输到指定的网络节点中.我们给定的网络一共包含N个节点,其中节点1为数据源. ...

  10. 创建es索引-格式化和非格式化

    创建es索引-格式化和非格式化 学习了:https://www.imooc.com/video/15768 索引有结构化和非结构化的区分: 1, 先创建索引,然后POST修改mapping 首先创建索 ...