我用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]);
}
没有想到用中断 想当然的以为直接这样子就行呢?? 这样不可以吗
TI中文支持网