hywhywhyw98 发表于 2008-9-13 09:46:51

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);

armok 发表于 2008-9-13 09:58:04

hywhywhyw98 发表于 2008-9-13 10:42:22

就是从你们网站邮购的

armok 发表于 2008-9-13 10:43:51

armok 发表于 2008-9-13 10:44:48

hywhywhyw98 发表于 2008-9-13 11:23:09

好的

armok 发表于 2008-9-13 11:24:15

youki1234 发表于 2010-5-29 22:34:04

mark,                              


armok 阿莫


能否发一份VS1003录音的程序参考下?

yijiyuanjack 发表于 2010-8-6 17:06:56

能否发一分录音的操作文档给我学习一下..

sunshine001 发表于 2011-7-20 21:30:45

回复【楼主位】hywhywhyw98
-----------------------------------------------------------------------

请问,您这句里面的while(!(key1_up(1))) 中的这个key1_up(1)是什么意思?是自己定义的按键函数吗?

小小码字员 发表于 2014-2-2 22:49:53

楼主能否给我答疑。
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项呢。

李志柳 发表于 2014-11-28 18:15:09

armok 发表于 2008-9-13 10:44
如果仍不能解决问题,可以联系我们的技术人员(邮购部网页底部能查到电话,MSN或QQ),可以给你一段我们的 ...

你好,我现在用VS1003做录音和放音,放MP3声音很动听,没有任何杂音,但放录音,就很多杂音,应该是录不好,背景杂音很大,并且录音有一点点失真,不知是芯片问题还是电路板问题,一开始以为是干拢而造成录音有噪,后来打几款板都一样,接着以为是芯片问题的,换了几个供应,效果都是一样,我看了你回复“CS1003录音噪音太大”的贴子,你提用你的VS1003没有一点背景杂音,不知是不是真的,如果是。真的想采购的你的芯片,期待你的回复。
页: [1]
查看完整版本: VS1003录音噪音太大(附代码)