VS1003录音噪音太大(附代码)
可以录,但是有沙沙沙的背景噪音,去不掉,不知什么原因unsigned char RIFFHeader0[] = {
'R' , 'I' , 'F' , 'F' , // Chunk ID (RIFF)
0x70, 0x70, 0x70, 0x70, // Chunk payload size (calculate after rec!)
'W' , 'A' , 'V' , 'E' , // RIFF resource format type
'f' , 'm' , 't' , ' ' , // Chunk ID (fmt )
0x14, 0x00, 0x00, 0x00, // Chunk payload size (0x14 = 20 bytes)
0x11, 0x00, // Format Tag (IMA ADPCM)
0x01, 0x00, // Channels (1)
0x80, 0x3e, 0x00, 0x00, // Sample Rate, 0x3e80 = 16.0kHz
0xd7, 0x0f, 0x00, 0x00, // Average Bytes Per Second
0x00, 0x01, // Data Block Size (256 bytes)
0x04, 0x00, // ADPCM encoded bits per sample (4 bits)
0x02, 0x00, // Extra data (2 bytes)
0xf9, 0x01, // Samples per Block (505 samples)
'f' , 'a' , 'c' , 't' , // Chunk ID (fact)
0xc8, 0x01, 0x00, 0x00, // Chunk payload size (456 bytes (zeropad!))
0xff, 0xff, 0xff, 0xff// Number of Samples (calculate after rec!)
// Insert 448 zeroes here!
};
unsigned char RIFFHeader504[] = {
'd' , 'a' , 't' , 'a' , // Chunk ID (data)
0x70, 0x70, 0x70, 0x70// Chunk payload size (calculate after rec!)
};
unsigned long SEC_CAL=0;
delayms(10);
VS1003_CMD_Write(0x03,0x6696);
VS1003_CMD_Write(0x0c,9);
VS1003_CMD_Write(0x0d,0x1000);
VS1003_CMD_Write(0,0x1804);
_delay_ms(50);
VS1003_CMD_Write(0x03,0x6696);
_delay_ms(50);
for (i=0; i<56; i++)
{
buffer = RIFFHeader0;
}
for (i=52; i<504; i++)
{
buffer = 0;
}
for (i=504; i<512; i++)
{
buffer = RIFFHeader504;
}
if(f_open(&fdst, "test.wav", FA_CREATE_ALWAYS | FA_WRITE))
{
LCD_TextOut(0, 0,"OPEN ER!");
while(1);
}
f_write(&fdst, buffer,512, &bw);
j=0;
p=buffer;
REC_Scount=1;
while (VS1003_CMD_Read(0x09)>>8);
while(!(key1_up(1)))
{
if(VS1003_CMD_Read(0x09) >= 128)
{
for (i=0;i<128;i++)
{
z = VS1003_CMD_Read(0x08);
*p++ = (z>>8);
*p++ = (z & 0xff);
}
j++;
}
if(j==2)
{
j=0;
if(f_write(&fdst,buffer,512, &bw))
{
LCD_TextOut(0, 1,"WR ER!");
while(1);
}
REC_Scount++;
p=buffer;
}
}
for (i=0; i<56; i++)
{
buffer = RIFFHeader0;
}
for (i=52; i<504; i++)
{
buffer = 0;
}
for (i=504; i<512; i++)
{
buffer = RIFFHeader504;
}
SEC_CAL=(REC_Scount-1UL)*1010UL;
buffer = (SEC_CAL & 0xff);
buffer = ((SEC_CAL >>8) & 0xff);
buffer = ((SEC_CAL >>16) & 0xff);
buffer = ((SEC_CAL >>24) & 0xff);
SEC_CAL = (REC_Scount*512UL)-8UL;
buffer = (SEC_CAL & 0xff);
buffer = ((SEC_CAL >>8) & 0xff);
buffer = ((SEC_CAL >>16) & 0xff);
buffer = ((SEC_CAL >>24) & 0xff);
SEC_CAL = (REC_Scount-1)*512UL;
buffer = (SEC_CAL & 0xff);
buffer = ((SEC_CAL >>8) & 0xff);
buffer = ((SEC_CAL >>16) & 0xff);
buffer = ((SEC_CAL >>24) & 0xff);
LCD_Num(0, 2,SEC_CAL);
f_lseek(&fdst,0);
f_write(&fdst, buffer,512, &bw);
f_lseek(&fdst,fdst.fsize);
// VS1003_Init();
f_close(&fdst); 就是从你们网站邮购的 好的 mark,
armok 阿莫
能否发一份VS1003录音的程序参考下? 能否发一分录音的操作文档给我学习一下.. 回复【楼主位】hywhywhyw98
-----------------------------------------------------------------------
请问,您这句里面的while(!(key1_up(1))) 中的这个key1_up(1)是什么意思?是自己定义的按键函数吗? 楼主能否给我答疑。
1、fmt chunk中 Data Block Size这一项为什么是256,而一般性的解释这一项为一次采样所占字节数。
2、fmt chunk中 额外增加的两个字节Samples per Block设置为505这里有什么用。
3、fact chunk 百度百科的解释是这一项是可有可无的,插入448个0可以解释为了使整个wave文件头占512个字节(恰好是256的倍数)。
但为什么在 0xc8, 0x01, 0x00, 0x00(插入0的个数)后面4个字节的数据要另外计算,因为从这里开始的数据应该是fact chunk的正式数据。
4、为什么这里要填充一个fact项呢。 armok 发表于 2008-9-13 10:44
如果仍不能解决问题,可以联系我们的技术人员(邮购部网页底部能查到电话,MSN或QQ),可以给你一段我们的 ...
你好,我现在用VS1003做录音和放音,放MP3声音很动听,没有任何杂音,但放录音,就很多杂音,应该是录不好,背景杂音很大,并且录音有一点点失真,不知是芯片问题还是电路板问题,一开始以为是干拢而造成录音有噪,后来打几款板都一样,接着以为是芯片问题的,换了几个供应,效果都是一样,我看了你回复“CS1003录音噪音太大”的贴子,你提用你的VS1003没有一点背景杂音,不知是不是真的,如果是。真的想采购的你的芯片,期待你的回复。
页:
[1]