一、前言提前两周接到任务,项目需要更换编码解码器芯片,重新移植声卡驱动。
因为之前没有进行过声卡驱动程序的移植,所以对音频的知识不太了解,所以在网上搜索了很多资料。
写这个博客,既是为了共享,也是为了做笔记。
之后,我也会分享这次移植声卡的前后。
二、音频相关1、语音数模转换大学时代学习数模电的小伙伴应该不知道这个概念。
数模转换:数字信号和模拟信号之间的转换。
数字信号是在计算机中传输的信号(0/1); 模拟信号是在一定介质中传播的波,可以用周期和振幅两个重要指标来描述。
正常人能听到的声音频率范围为20Hz~20KHz。 现实中存在的声音是模拟量,这给声音的保存和长距离传输带来很大的困难。 一般将模拟量转换为相应的数字量进行存储,在需要恢复声音的地方将数字量转换为模拟量。 大致过程如下图所示。
图-语音数模转换模拟量到数字量的转换一般分为三个过程,分别是采样、量化、编码。 举个正弦波信号的例子:
图-正弦波音频信号采样图中的正弦波为源音频信号,对直线进行了等间隔采样。
直线之间的距离大小为t (周期,但t=1/fs )采样率)。 请考虑一下,fs越大,T越小,采集的源音频信号就越多,得到的声音就越清晰。
每条直线的长度决定了此时源音频信号的量化值。 该量化值有另一个概念,即量化比特数。 量化位数表示每个采样点用多少位表示数据范围,通常使用16位、24位或32位。 位数越多,最终恢复的音质越好,数据量也越大。
2、模数转换三要素采用频率:每秒提取声波幅度样本的次数。 采样频率越高,音质越好,数据量也越大。 常用的采样频率为11.025KHz、22.05KHz、44.1KHz、48KHz、96KHz等。
量化位数:每个采样点表示数据范围的二进制位数。 量化比特数也称为采样比特数。 量化比特数越多,音质越好,数据量也越大。 常用的采样位数有8位、16位、24位、32位等。
通道数:使用通道的数量。 立体声比单声道表现力更丰富,但数据量要加倍。 常用的频道数为单声道、立体声(左声道和右声道)。
3、模数转换后的数据量语音数字化后的数据量计算公式如下
音频数据量=采样频率(Hz )量化比特数)通道数/8,单位:字节/秒。
在这里举个例子吧。 将一个音频信号数字化,假设采样频率为16KHz,量化位数为16位,则:
单声道音频数据量为16000 * 16 * 1/8=32000字节/秒;
的立体声声音数据量是16000 * 16 * 2/8=64000字节/秒。
3358 www.Sina.com/http://www.Sina.com /声卡是负责录音、广播、语音合成的多媒体板。 其功能如下。
1、录制、编辑、播放数字音频文件;
2、控制各声源音量混合;
3、记录和回放时进行压缩和解压缩;
4、语音合成技术(文本阅读);
5、有MIDI接口(乐器数字接口)。
声卡芯片类型:
1、CODEC芯片(依赖CPU,价格便宜);
2、数字信号处理器DSP (不依赖于CPU )。
三. I2S总线及其协议1、I2S总线是飞利浦公司为在数字音频设备之间传输音频数据制定的总线标准,该总线专门用于音频设备之间的数据传输,且被广泛应用于各种多媒体系统
特点:
、支持全双工模式和半双工模式。
、支持主从模式。
2、接口I2S总线一般包括三条CLK时钟总线和多达四条数据总线。
、MCLK主时钟、系统时钟。
计算方法: freq(mclk )=128/256/512 * fs。 目前公司正在使用的512 * fs。
fs是采样频率。
、SCLK串行时钟,也称为位时钟BCLK,与数字音频的各位数据相对应,SCLK具有脉冲。
freq(sclk )=通道数*fs*样本位数。
、场选择信号WS场选择信号WS,也称为LRCLK,用于切换左右通道的数据。 WS为0,表示左通道的数据正在传输。 WS为1,表示正在传输右通道的数据。
freq(ws )=fs。
、串行数据SD
gin-left:0pt;">串行数据SD,就是用二进制补码表示的音频数据。I2S在传输数据的时候,由高位(MSB)到低位(LSB)一次进行传输。
对于系统而言,能够产生SCLK和WS的信号端就是主设备,用MASTER表示。
3、I2S数据格式I2S共有三种数据格式,左对齐(MSB)、右对齐(LSB)、I2S Philips标准。
对于所有数据格式和通信标准而言,始终会先发送最高有效位(MSB优先)。
发送端和接收端必须使用相同的数据格式,确保发送和接收的数据一致。
①、I2S Philips标准使用LRCLK信号来指示当前正在发送的数据所属的声道,为0时表示左声道数据。LRCLK信号从当前声道数据的第一个位(MSB)之前的一个时钟开始有效。LRCLK信号在BCLK的下降沿变化。发送方在时钟信号BCLK的下降沿改变数据,接收方在时钟信号BCLK的上升沿读取数据。正如上文所说,LRCLK频率等于采样频率Fs,一个LRCLK周期(1/Fs)包括发送左声道和右声道数据。
对于这种标准I2S格式的信号,无论有多少位有效数据,数据的最高位总是出现在LRCLK变化(也就是一帧开始)后的第2个BCLK脉冲处。这就使得接收端与发送端的有效位数可以不同。如果接收端能处理的有效位数少于发送端,可以放弃数据帧中多余的低位数据;如果接收端能处理的有效位数多于发送端,可以自行补足剩余的位。这种同步机制使得数字音频设备的互连更加方便,而且不会造成数据错位。
②、左对齐(MSB)
在LRCLK发生翻转的同时开始传输数据。该标准较少使用。注意此时LRCLK为1时,传输的是左声道数据,这刚好与I2S Philips标准相反。左对齐(MSB)标准时序图如下所示:
③、右对齐(LSB)
声音数据LSB传输完成的同时,LRCLK完成第二次翻转(刚好是LSB和LRCLK是右对齐的,所以称为右对齐标准)。注意此时LRCLK为1时,传输的是左声道数据,这刚好与I2S Philips标准相反。右对齐(LSB)标准时序图如下所示: