硬件概览 †
计算机中声卡的设计几乎从来没有过统一标准,所以,声卡的自身的设计本身是变化多端的。但是,通常常见的声卡都可以抽象出几个部分:
- 输入设备:比如麦克风(模拟/电子),从其他音响设备结果来的LINE IN;
- ADC:模拟信号到数字信号转换器;声卡可以处理的信号是数字信号,当有输入进入声卡时,输入通常是模拟信号,比如传统的麦克风给出的信号就是模拟信号,这是就需要ADC将模拟信号转换成声音信号;
- 信号处理和控制核心:这部分是声卡的核心,一般由一个或者多个codec实现;
- DAC:数字信号到模拟信号的转换器;它的功能就是将处理好的数字信号转化成模拟信号;
- MIXER:俗称混音器;这个设备主要的功能是将不同输入来源的声音信号混合起来并且转发到不同的输出设备上去;比如,想象一下一边听音乐一边音频聊天的情景,混音器需要将从麦克风过来的语音内容和播放器传说过来的音乐混合起来转发到耳机上;而当耳机拔出脱离声卡时,混音器需要将声音信号转发的计算机的喇叭上去;等等;
- 输出设备:喇叭,LINE OUT和麦克风都是输出设备;放大器也可以被看作输出设备,通常放大器不需要软件控制,也就是不需要有驱动程序就可以动作;放大器的主要功能就是将声音信号放大,增加响度等等。
Audio Interface †
Audio Interface主要是指可以将声音数据从计算机中传入传出的接口。常见的Audio Interface有I2S和AC97两种。其中,I2S多用与嵌入式设备上的声音数据传输,而AC97接口则多见于传统PC。这两种接口有什么不同呢?这里暂且搁置不谈。对声音程序的开发者来说,跟重要的是理解Audio Inferface的概念而非细节。细节就留给硬件工程师和驱动开发者吧。
在计算机内部,声音被表示成为字节流(stream bit),与其他类型的数据并没有差异。而在计算机的外部世界,通常,声音可以被表示成为数字形式(一个或这多个字节流)或者模拟形式(按照时间表示的电压变化)。Audio Interface的主要任务就是将计算机内部外部世界的不同数据类型进行转化。Audio Inferface的构成当然和它的功能有着必然的联系。当声音通过Audio Inferface传入计算机内部时,经过转化的数据(字节)将被暂时存储在一个硬件上的缓冲区中,当缓冲区已满,Audio Interface就会触发一个中断,要求CPU协调将数据从缓冲区移动到适当的地方去,通常,这种数据移动都是以DMA的方式进行,而且,通常数据移动的目的地就是主存。
+---------------------------------+ |Audio +----------------+ | Audio Signal ----|Interface-----+ HW BUFFER | | | +----------------+ | +---------------------------------+
将数据从计算机传出的过程于此类似ÿ