vs100录音问题

vs1003和vs1053录音的保存格式不同,或着说WAV的格式头不一样。

1053录音在激活录音后,初始化WAV格式头要比1003的WAV格式头少十几个字节,这样导致了1003录音可以成功。但却解不了码。

这里直接分享

1003录音的程序代码



//激活PCM 录音模式

//agc:0,自动增益.1024相当于1倍,512相当于0.5倍,最大值65535=64倍   

void recoder_enter_rec_mode(u16 agc)

{

 //如果是IMA ADPCM,采样率计算公式如下:

  //采样率=CLKI/256d; 

 //假设d=0,并2倍频,外部晶振为12.288M.那么Fc=(2
12288000)/2566=16Khz

 //如果是线性PCM,采样率直接就写采样值

    //VS_WR_Cmd(SPI_BASS,0x0000);   

  VS_WR_Cmd(SPI_AICTRL0,12); //设置采样率,设置为8Khz

  VS_WR_Cmd(SPI_AICTRL1,agc);  //设置增益,0,自动增益.1024相当于1倍,512相当于0.5倍,最大值65535=64倍 

  //VS_WR_Cmd(SPI_AICTRL2,0);  //设置增益最大值,0,代表最大值65536=64X

  //VS_WR_Cmd(SPI_AICTRL3,6);  //左通道(MIC单声道输入)

  VS_WR_Cmd(SPI_CLOCKF,SCI_ClockF(2, 3, 0));//VS_WR_Cmd(SPI_CLOCKF,0X2000); //设置VS10XX的时钟,MULT:2倍频;ADD:不允许;CLK:12.288Mhz

 VS_WR_Cmd(SPI_MODE,0x1804);  //MIC,录音激活   

 

 delay_ms(5);     //等待至少1.35ms

  VS_Load_Patch((u16
)wav_plugin,40);//VS1053的WAV录音需要patch

}

//初始化WAV头.
void recoder_wav_init(__WaveHeader* wavhead) //初始化WAV头     
{
 wavhead->riff.ChunkID=0X46464952; //"RIFF"
 wavhead->riff.ChunkSize=0x0;   //还未确定,最后需要计算
 wavhead->riff.Format=0X45564157;  //"WAVE"
 wavhead->fmt.ChunkID=0X20746D66;  //"fmt "
 wavhead->fmt.ChunkSize=0x00000014;    //大小为16个字节
 wavhead->fmt.AudioFormat=0X0011;   //0X01,表示PCM;0X01,表示IMA ADPCM
  wavhead->fmt.NumOfChannels=0x0001;  //单声道
  wavhead->fmt.SampleRate=8000;  //8Khz采样率 采样速率
  wavhead->fmt.ByteRate=0x00000fd7;//wavhead->fmt.SampleRate*2;//16位,即2个字节
  wavhead->fmt.BlockAlign=0x0100;   //块大小,2个字节为一个块
  wavhead->fmt.BitsPerSample=0x0004;  //16位PCM
    wavhead->fmt.ByteExtraData=0x0002;
 wavhead->fmt.ExtraData=0x01f9;
 wavhead->fact.ChunkID=0X74636166;
 wavhead->fact.ChunkSize=0x00000004;      //子集合大小(不包括ID和Size);这里为:4.
 
 wavhead->fact.NumOfSamples=0x00001f5c;
    wavhead->data.ChunkID=0X61746164; //"data"
  wavhead->data.ChunkSize=0x00000fe8;   //数据大小,还需要计算 
}

基本上把这些改完之后就可以录音了。

sitemap