|
请教下,我把24bit的wav转换成16bit后播放,没有声音,貌似只有噪音出来?
程序播放 16bit 的wav 完全正常,包括单、双声道
唯独吧 24bit 转换成 16bit就不行,dma配置还是按照 16bit的进行配置的,
24bit转换成 16bit的代码如下:
/* 24位音频转换为16位进行播放,SAI音频接口的24位音频播放暂时未解决 */
if(usBitsPerSample == 24)
{
/* 需要读取的字节数 */
NumBytesReq=(_usSize / 2) * 3;
f_read(_pFile, _ptrtemp, NumBytesReq, (UINT*)&NumBytesRead);
p = _ptrtemp;
for(i = 0; i < _usSize; i += 2, p += 3)
{
_ptr[i] = p[1];
_ptr[i+1] = p[2];
}
/* 实际需读取的字节数 */
NumBytesRead = (NumBytesRead / 3) * 2;
}
声音貌似就是刚开始2-3s的时间正常,之后就出现噪音了 ,这个是怎么个情况啊 ????
/*
配置SAI dma 参数
_BitPerSample 音频位数
_SampleRate 音频采样率
_DataLen 数据长度
_ucChannelMode 单、双通道
*/
static void WAVE_SaiConfInit(uint16_t _BitPerSample, uint32_t _SampleRate, uint32_t _DataLen , uint8_t _ucChannelMode)
{
if((_BitPerSample == 8) || (_BitPerSample == 16) || (_BitPerSample == 24)) // wav 音频 8bit / 16bit / 24bit(把24bit转换成16bit播放)
{
WM8978_I2S_Cfg(I2S_MODE_PHILIPS,I2S_MODE_CFG_16BIT); //飞利浦标准,16位数据长度
SAIA_Init(SAI_MODEMASTER_TX,SAI_CLOCKSTROBING_RISINGEDGE,SAI_DATASIZE_16, _SampleRate, _ucChannelMode);
SAIA_TX_DMA_Init(audiodev.i2sbuf1,
audiodev.i2sbuf2,
_DataLen / 2, // /2是因为dma发送是以16bit的格式发送的,不是字节数,DMA样本为32位
SAI_DMA_WIDTH_16BIT); //配置TX DMA,16位,
}
}
|
|