|
楼主 |
发表于 2017-10-6 11:34:27
|
显示全部楼层
回 eric2013 的帖子
eric2013:搞个DMA双缓冲。直接给DMA的缓冲区即可。 (2017-10-06 10:36) 你好,我目前使用的是 dma 双缓冲的
方法一,直接输出到dma首地址:
if(audiodev.AudioSwitchBuf)
{
fillnum = WAVE_ReadBuff(audiodev.file,
audiodev.i2sbuf2,
WAV_SAI_TX_DMA_BUFSIZE,
WaveFormat.BitPerSample);//填充buf2
}
else
{
fillnum = WAVE_ReadBuff(audiodev.file,
audiodev.i2sbuf1,
WAV_SAI_TX_DMA_BUFSIZE,
WaveFormat.BitPerSample);//填充buf1
}
方法二,使用数据拷贝:
if(audiodev.AudioSwitchBuf)
{
WAVE_FillAudio_MemCpy((uint16_t *)audiodev.i2sbuf2, (uint16_t *)_WavePlayCtr.i2STempBuff, WAV_SAI_TX_DMA_BUFSIZE/2); //16bit拷贝
}
else
{
WAVE_FillAudio_MemCpy((uint16_t *)audiodev.i2sbuf1, (uint16_t *)_WavePlayCtr.i2STempBuff, WAV_SAI_TX_DMA_BUFSIZE/2);
}
fillnum = WAVE_ReadBuff(audiodev.file,
_WavePlayCtr.i2STempBuff,
WAV_SAI_TX_DMA_BUFSIZE,
WaveFormat.BitPerSample);//填充buf1
上述两种方法播放音乐貌似都没有什么问题,但是不知道哪种方法播放出来的音质更好 ??
还是说上述的方法一样 ???? |
|