qt-播放音频
相关概念
未压缩音频
数字音频处理大多使用采样率和位深这两种技术直接存储音频数据。脉冲编码调制(即 PCM)是最流行的数字音频技术(在使用光盘时较为普及)之一。音频按设定的时间间隔进行采样,采样波在采样点的振幅使用样本的位深存储为数字值。
线性 PCM(表明振幅响应在采样中线性一致)是 CD 内以及 Speech-to-Text API 的 LINEAR16 编码内使用的标准。两种编码均会生成一个与音频数据直接对应的未压缩字节流,两个标准均包含 16 位的位深。线性 PCM 在 CD 中使用 44100 Hz 的采样率,适合改编音乐;然而 16000 Hz 的采样率更适合改编语音。
线性 PCM (LINEAR16) 就是一个未压缩的音频例子,因为数字数据完全按照上述标准的规定进行存储。读取使用线性 PCM 编码的单通道字节流时,您可以每隔 16 位(2 字节)计数一次以实现某种目的,例如获得波形的另一个振幅值。几乎所有设备都可以在本地处理此类数字数据,您甚至可以使用文本编辑器裁切线性 PCM 音频文件,但(显然)未压缩音频并不是传输或存储数字音频的最高效方式。因此,大多数音频采用了数字压缩技术。
- 采样率( Sample Rate )
每秒采样的频率,即每秒样本数,单位HZ ,常见的频率有22050HZ、44100HZ( CD级 )。并且人耳的听力范围是20HZ ~ 20000HZ,因此超过48000HZ就没有意义了( 根据采样定理 )。 - 样本大小( Sample Size )
每个样本的大小,也就是振幅,假如样本大小为16 Bit = 2 ^ 16 = 65536,即能够记录 65535 个数,常见的有 8Bit、16Bit( CD级 )。
声道( Sound Channel ):指声音在录制或播放时,在不同空间位置采集或回放的相互独立的音频信号,常见的有单声道,双声道,四声道,这个倒是声道越多效果越好。 - 比特率( Bit Rate )
单位( bps 比特每秒 ),可以使用 比特率 = 采样率 x 样本大小 x 声音通道数 来计算。
PCM 全名脉冲编码调制( Pulse Code Modulation ),它是原始的音频脉冲数据,在一般情况下,一帧PCM数据包含2048个样本( 数据帧,注意是一帧而不是一秒 )。
因此,对于一帧PCM数据,使用小端字节序存储为(每个 [ ] 为一个样本):
内存地址: | 低地址 | >>>>>>> | 高地址 |
8Bit 单声道:[ 8 bit ] - [ 8 bit ] - [ 8 bit ] - [ 8 bit ] } 总 2048个。
8Bit 双声道:[ 8 bit 声道1 ] - [ 8 bit 声道2 ] - [ 8 bit 声道1 ] - [ 8 bit 声道2 ] } 总 2048个。
16Bit 单声道:[ 8 bit 低位 + 8 bit 高位 ] - [ 8 bit 低位 + 8 bit 高位 ] - [ 8 bit 低位 + 8 bit 高位 ] - [ 8 bit 低位 + 8 bit 高位 ] } 总 2048个。
16Bit 双声道:[ 8 bit 低位 + 8 bit 高位 声道1 ] - [ 8 bit 低位 + 8 bit 高位 声道2 ] - [ 8 bit 低位 + 8 bit 高位 声道1 ] - [ 8 bit 低位 + 8 bit 高位 声道2 ] } 总 2048个。
声道:同时采集音频的通道数,通常使用单声道或双声道,也有5.1声道,7.1声道。
采样率:1秒钟采样的个数,常用的有16kHZ,32kHZ,44.1kHZ ,48kHZ等。
帧:持续采样时间,可以设置的范围较大,可以使用20ms,也可以使用200ms,一般来说时间越短时延越小。
每帧PCM数据大小:PCM Buffersize=采样率采样时间采样位深/8*通道数(Bytes)
8000Hz采样率,16bit,2channel
每秒数据量=8000162/8=32KBbytes
// Qt4 代码 |