音频api是特殊的应用程序编程接口。在计算机系统中,如果需要输出音频,就要用特定的方法去驱动Codec、DAC等音频芯片。在调动音频芯片的过程中,需要用到一些特殊的应用程序编程接口,也就是音频API。
使用音频API,音频软件如播放器等就可以直接针对API设计输出程序,而不必针对不同的芯片使用不同的指令。常见的音频API有MME、DS、WDM、KS、WASAPI、ASIO等。
以MME为例,MME是最常见的Windows音频API,全称为MutiMedia Extensions,即多媒体扩展技术。它历史悠久,兼容性好,市面上基本所有设备都能良好支持。它属于高级的API,并不直接和硬件交流,需要通过层层接口才能访问音频硬件,这也为它带来了高延迟。虽说这种延迟在回放音频的时候并不会造成音质的劣化,但对音频的处理和录制却有着较大的负面影响。
MME使用waveIn/waveOut系列API来完成对音频的处理。程序启动后用waveIn系列函数打开声卡输入功能,同时将缓冲区设定到足够小的值,然后开始将音频数据录制到设定的缓冲区,当缓冲区满后再将缓冲区(WAVHDR)直接加入到waveOu系列函数的输出队列中即可。此方法实现较简单,缺点是MME为高级API,因此在整个过程中需要走过很多系统处理阶段,导致延迟较大。若缓冲区太小会导致声音断断续续。一般最小延迟可到120毫秒左右。