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

OmapL138语音采集问题

在第三方的板子上跑通了OmapL138的audio语音例程,但是现在我想对例程进行修改。原例程如下:

uint32_t testAudioLineIn(void)
{
uint32_t rtn = ERR_NO_ERROR;
int16_t msec, sec, sample;
int32_t dat;
MCBSP1->DXR = 0;
// loop audio
for (sec = 0; sec < 5 ; sec++)/*一开始sec<5是被屏蔽的*/
{
for (msec = 0; msec < 1000; msec++)
{
for (sample = 0; sample < 48; sample++)
{
// send a sample to the left channel
while (!CHKBIT(MCBSP1->SPCR, 0x00000002));
dat = MCBSP1->DDR;/*采样到一个数据*/
MCBSP1->DXR = dat;
// send a sample to the right channel
while (!CHKBIT(MCBSP1->SPCR, 0x00000002));
dat = MCBSP1->DDR;
MCBSP1->DXR = dat;/*采样到一个数据*/
}
}
}
return (rtn);
}

标红的部分是采集进来一个数据之后就放到MCBSP的发送数据寄存器中,这个相当于是采集一个发送一个。但是我现在有一套语音编码的算法,算法是处理一个语音数组数据,数组长度是256.也就是我的想法是想先采集256个数据放在一个数组里,然后调用我的语音算法,最后再将这个数组输出。但是现在我运行出来的效果不对,有很多杂音,我修改后的工程是:

for (sec = 0; sec < 5 ; sec++)/*一开始sec<5是被屏蔽的*/
{
for (msec = 0; msec < 1000; msec++)
{
for (sample = 0; sample < 128; sample++)
{
// send a sample to the left channel
while (!CHKBIT(MCBSP1->SPCR, 0x00000002));
sound[dat++] = MCBSP1->DDR;/*采样到一个数据*/
//MCBSP1->DXR = dat;
// send a sample to the right channel
while (!CHKBIT(MCBSP1->SPCR, 0x00000002));
sound[dat++] = MCBSP1->DDR;
//MCBSP1->DXR = dat;/*采样到一个数据*/
}
}
}

然后输出的话在调用那个testAudioLineOut()函数。希望求到高人指点,最好是希望有人能帮我按照我的思路提供一个方案或者例程,谢谢大家

user3816639:

回复 Tony Tang:

我明白您的意思,您的意思就是说MCBSP搭配上DMA来用,咱们这有没有什么例程啥的供我参考下。

Tony Tang:

回复 user3816639:

这里有例子,希望对你有帮助。

http://www.deyisupport.com/question_answer/dsp_arm/omap_l1x/f/54/p/257388/reply.aspx

赞(0)
未经允许不得转载:TI中文支持网 » OmapL138语音采集问题
分享到: 更多 (0)