Alsa音频基础知识小结

来源:互联网 发布:c语言界面的汉化 编辑:程序博客网 时间:2024/05/01 11:30
声音是连续模拟量,计算机将它离散化之后用数字表示,主要有以下的一些术语。


1 样本长度(sample):样本是记录音频数据最基本的单位,计算机对每个通道采样量化时数字比特位数,常见的有8位和16位。样本长度是影响声音被转换成数字信号的精确程度的因素之一。


2 通道数(channel):该参数为1表示单声道,2则是立体声。


3 帧(frame):帧记录了一个声音单元,其长度为样本长度与通道数的乘积,一段音频数据就是由若干帧组成的。为啥搞个frame出来?因为对于多声道的话,用1个采样点的字节数表示不全,因为播放的时候肯定是多个声道的数据都要播出来才行。所以为了方便,就说1秒钟有多少个frame,这样就能抛开声道数,把意思表示全了。


4 交错模式(interleaved):是一种音频数据的记录方式。在交错模式下,数据以连续桢的形式存放,即首先记录完第一个帧的左声道样本和右声道样本(假设为立体声格式),再开始第二个帧的记录。而在非交错模式下,首先记录的是一个周期内所有帧的左声道样本,再记录右声道样本,数据是以连续通道的方式存储。不过多数情况下,只需要使用交错模式就可以了。


5 采样率(rate):每秒钟采样次数,该次数是针对帧而言,常用的采样率如8KHz的人声, 44.1KHz的mp3音乐, 96Khz的蓝光音频。


6 比特率(Bits Per Second):比特率表示每秒的比特数,比特率=采样率×通道数×样本长度。


7 ALSA开发接口:由许多声卡的声卡驱动程序组成,同时它也提供一个称为libasound的API库。应用程序开发者应该使用libasound而不是内核中的 ALSA接口。因为libasound提供最高级并且编程方便的编程接口。并且提供一个设备逻辑命名功能,这样开发者甚至不需要知道类似设备文件这样的低层接口。


8 缓存区:每个声卡都有一个硬件缓存区来保存记录下来的样本。当缓存区足够满时,声卡将产生一个中断。内核声卡驱动然后使用直接内存(DMA)访问通道将样本传送到内存中的应用程序缓存区。类似地,对于回放,任何应用程序使用DMA将自己的缓存区数据传送到声卡的硬件缓存区中。这样硬件缓存区是通常为环缓存。也就是说当数据到达缓存区末尾时将重新回到缓存区的起始位置。ALSA维护一个指针来指向硬件缓存以及应用程序缓存区中数据操作的当前位置。


9 XRUN:当一个声卡工作时,数据总是连续地在硬件缓存区和应用程序缓存区间传输。但是也有例外。1)在录音过程中,如果应用程序读取数据不够快,循环缓存区将会被新的数据覆盖。这种数据的丢失被称为"over   run".2)在回放过程中,如果应用程序写入数据到缓存区中的速度不够快,缓存区将会"饿死"。这样的错误被称为"under   run"。在ALSA中将这两种情形统称为"XRUN"。适当地设计应用程序可以最小化XRUN并且可以从中恢复过来。因此,简单的说,XRUN状态分有两种,在播放时,用户空间没及时写数据导致缓冲区空了,硬件没有可用数据播放导致"under   run"; 录制时,用户空间没有及时读取数据导致缓冲区满后溢出, 硬件录制的数据没有空闲缓冲可写导致"over   run". 
0 0
原创粉丝点击