TI中文支持网
TI专业的中文技术问题搜集分享网站

关于使用AIC23采集音频后存储再播放的问题

我用C5509A和AIC23进行音频采集实验 初始化是DSP通过IIC总线将配置命令发送给AIC23  我采样率设置的是44.1K 

具体音频采集存储和播放的代码如下   请高手工程师帮忙解答下吧 为什么输出来的没有声音全是噪声 是不是采样点数的问题 不太明白 万分感谢!

while(1)
{
for(i=0;i<8000;i++)
{
while (!ReadMask(pMCBSP0 -> spcr2, SPCR2_XRDY)); // 等待McBSP0准备好
input[i]=Read(pMCBSP0->ddr2); // 读取左右声道的数据
input[i]=Read(pMCBSP0->ddr1); // 因为耳机输入左右声道相同,所以读两次即可
// far_poke(lpWork++,nWork); // 保存到缓冲区
}
///
if(8000==i) i=0;
for(j=0;j<8000;j++)
{
output[j]=input[i];
Write(pMCBSP0->dxr2,output[j]); // 送数据到McBSP0
Write(pMCBSP0->dxr1,output[j]); } // 声音输出由AIC23完成

Barry Xiao:

Hi, 李阳,

 

可以做个简单的实验将DIN和DOUT短接,看DAC输出是否正常,来确认下AIC23 DAC部分的设置是否有问题。如果设置没有问题,那么原因应该是在DSP端了。

 

Best regards,

Barry Xiao

yang L:

回复 Barry Xiao:

AD和DA应该没问题 因为我用例程跑 声音很清楚 也就是采集一个输出一个数据就没问题 但是我想储存一部分数据再输出 就有问题了

Barry Xiao:

回复 yang L:

如果CODEC设置没有问题,而是数据存储的问题,建议向DSP论坛咨询下。

yang L:

回复 Barry Xiao:

恩 我感觉是 那谢谢了

Derek Xie:

回复 yang L:

你好:

          你看下你的保存的数据的格式与你采集的数据的格式是否一致。比如你采用的是CHAR型的,但是保存成Float或者Int那么就会出问题

yang L:

回复 Derek Xie:

您好,

       我储存和输出的数据全是int的 实时采集的话声音没问题 而且保存的是int数据 不知道为啥我这个就不行 我感觉是点数太少的缘故 但是我循环了

Derek Xie:

回复 yang L:

你好:

           你的保存的中断时间和你的采样率一致吗?还有就是你加大你保存的数据试下。

            你可以用正弦波作试验,采集进去后用数字的方式看是不是正弦波的信号,确保采集的数据没错。。

李阳:

回复 Derek Xie:

谢谢您的回答! 

我想问下保存的中断时间是指的储存8000个点的时间吗  我设置采样率是8K 然后循环采样8000储存在数组中 然后再循环从数组中输出  就严重失真了

Derek Xie:

回复 李阳:

你好:

          你不是按照中断触发一次保存一次数据的吗?

李阳:

回复 Derek Xie:

不是的 直接在程序中循环保存了 

          while (!ReadMask(pMCBSP0 -> spcr2, SPCR2_XRDY)); // 等待McBSP0准备好     

 for(i=0;i<40000;i++)          

 {        input[i]=Read(pMCBSP0->ddr2); // 送数据到McBSP0// 读取左右声道的数据          

          input[i]=Read(pMCBSP0->ddr1);        // 因为耳机输入左右声道相同,所以读两次即可                             

  }       

   for(j=0;j<40000;j++)         

 {  output[j]=input[j];

     Write(pMCBSP0->dxr2,output[j]); // 送数据到McBSP0            

      Write(pMCBSP0->dxr1,output[j]);  

 } 

没有想到用中断 想当然的以为直接这样子就行呢??  这样不可以吗

 

赞(0)
未经允许不得转载:TI中文支持网 » 关于使用AIC23采集音频后存储再播放的问题
分享到: 更多 (0)