|
在做项目时,发现在WinCE下面,不管是播放什么采样率的音频文件,I2s都工作一个采样率下(比如不管播放44.1K还是8k的的音频文件,I2S始终都是工作在44.1K)。也就是说其实我的平台的驱动对于codec的采样率是固定的。对于这个我很疑惑。后来在网上看到一个帖子,
而声音的驱动要负责完成声音采集的混音和声音放音的混音。其基本原理如下:
1) 将声音设备设定在一个频率下,比如:44.1KHZ,16BIT
2) 驱动允许打开多个音频流,每个音频流可以允许不同的采样率,比如: (A:8KHZ,8BIT B: 44.1KHZ,16BIT)
3) 放音的混音在最后的数据准备阶段(即放入到DMA前),用合成算法将所有的流进行数学运算,得出声音设备采样频率下(44.1KHZ,16BIT)的数据。数据通过DMA发送到CODEC中。
4) 录音的混音操作,都是从声音设备采样频率下(44.1KHZ,16BIT)下得到采样的基本数据,然后通过数学运算分配到不同的频率下的音频流上。
5) 要注意的就是合成的时候要注意数据不溢出;分开的时候要注意数据速率的匹配和数据宽度的匹配。
本文来自eeworld博客,转载请标明出处:http://blog.eeworld.net/xxxluozhen/archive/2010/04/14/5486220.aspx
哪位能帮忙解下惑,”用合成算法将所有的流进行数学运算“是用的什么样的算法(可别自己猜哦)?在驱动的哪里可以找到呢?
谢谢!
|
|