录音放音实验。16bits 双声道,44.1K录音(录音数据实时写入外部sdram),然后读取sdram放音。
I2S设置核心代码如下。
[mw_shl_code=c,true] I2SHandle.Instance = SPI2;
I2SHandle.Init.AudioFreq = I2S_AUDIOFREQ_44K;
I2SHandle.Init.ClockSource = I2S_CLOCK_SYSCLK;
I2SHandle.Init.CPOL = I2S_CPOL_LOW;
I2SHandle.Init.DataFormat = I2S_DATAFORMAT_16B;
I2SHandle.Init.MCLKOutput = I2S_MCLKOUTPUT_DISABLE;
I2SHandle.Init.Standard = I2S_STANDARD_PHILIPS;
I2SHandle.Init.Mode = I2S_MODE_MASTER_RX;[/mw_shl_code]
[mw_shl_code=c,true] /* 录音数据实时写入SDRAM关键代码 */
for (uwIndex = 0; uwIndex < 10000000; )
{
while((SPI2->SR&I2S_FLAG_RXNE) != I2S_FLAG_RXNE)
{
}
*(__IO uint16_t*) (SDRAM_BANK_ADDR+ uwIndex) = SPI2->DR;
uwIndex+=2;
}[/mw_shl_code]
录音一段时间后回放有时候左声道会伴随有噪音,有时候录音回放右声道会伴有噪音。总之左右声道总会有一个声道有噪音,而另一个声道声音干净正常。每次重新启动录音噪音通道可能会不一样,并且没有规律。
给我的感觉好像启动录音那一刻哪里错位了?
琢磨了好久想不明白到底哪里问题。
另外放音没有问题,我直接将一个wav文件从SD卡里写到SDRAM然后再播放是没有问题的。现在问题就出现在录音的时候好像WM8731 ADC采集到的数据单片机读取到的总有一个声道原始数据是不干净的感觉。
简单来说我只是想通过WM8731 ADC采集两声道数据,可是好像总得不到干净的数据?
有人成功用WM8731的ADC进行双声道录音吗,找了网络上也没有可以借鉴的例子。不知道是不是我掉坑里了。
请有经验的朋友指点下,谢谢。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
我看例程好像没有双声道LINE IN录音。
我的组合结构为STM32+SDRAM+WM8731
目前可以直接旁路line in到line out,听声音是正常的。就是WM8731 LINE IN ADC总有一个声道录到的音有放鞭炮一样的背景噪音,而另一个声道是正常的。而将现成的WAV文件直接通过DAC LINE OUT播放都是正常的。我严重怀疑STM32的ADC这块用不起来。
有图有真相。
这个是STM32的I2S
下图是WM8731的的I2S,当然我看了其他codec芯片的I2S都是这样子的。我严重怀疑STM32的是有问题的。少了一个BCLK,从而导致总有一个声道声音有噪音。
本身我的代码也特别简单直接。并没有使用DMA,代码结构也很简单。
但是硬是调了好久ADC始终搞不定。如果哪位有兴趣我可以把代码整理发上来。
一周热门 更多>