OSS(Open Sound System)是 unix 平台上一个统一的音频接口, 即只要音频处理应用程式按照OSS的API来编写,那么在移植到另外一个平台时,只需要重新编译即可。
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接口的使用方法进行介绍。由于OSS API十分丰富,因此在本文中只介绍那些最为常用的接口。对于OSS API的一个完整描述,能够参考[1]。
一、基础知识
数字音频设备(有时也称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。
这些设备文档的设备编号见[1]。
二、音频编程
OSS为音频编程提供三种设备,分别是/dev/dsp,/dev/dspW和/dev/audio,前面已提到了他们之间的区别。
用户能够直接使用Unix的命令来放音和录音,命令cat /dev/dsp >xyz可用来录音,录音的结果放在xyz文档中;命令cat xyz >/dev/dsp播放声音文档xyz。
假如通过编程的方式来使用这些设备,那么Unix平台通过文档系统提供了统一的访问接口。程式员能够通过文档的操作函数直接控制这些设备,这些操作函数包括:open、close、read、write、ioctl等。下面我们就分别讨论打开音频设备、放音、录音和参数调整。
1. 打开音频设备
1) 头文档定义
|
2) 打开设备
|
open_mode有三种选择:O_RDONLY,O_WRONLY和O_RDWR,分别表示只读、只写和读写。OSS建议尽量使用只读或只写,只有在全双工的情况下(即录音和放音同时)才使用读写模式。
2. 录音
|
count为录音数据的字节个数(建议为2的指数),但不能超过audio_buffer的大小。从读字节的个数能够精确的测量时间,例如8kHZ 16-bit stereo的速率为8000*2*2=32000bytes/second,这是知道何时停止录音的唯一方法。
文章整理:西部数码--专业提供域名注册、虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!




