初级会员

- 积分
- 69
- 金钱
- 69
- 注册时间
- 2013-9-21
- 在线时间
- 6 小时
|
小弟最新研究vs1053 IMA_ADPCM设置,,用原子哥代码改的,分享给大家。
VS_WR_Cmd(SPI_MODE,0x0804);
VS_WR_Cmd(SPI_BASS,0x0000);
VS_WR_Cmd(SPI_AICTRL0,8000);
VS_WR_Cmd(SPI_AICTRL1,0);
VS_WR_Cmd(SPI_AICTRL2,4096);
VS_WR_Cmd(SPI_AICTRL3,2);
VS_WR_Cmd(SPI_CLOCKF,0xC000);
temp=VS_RD_Reg(SPI_MODE);
VS_WR_Cmd(SPI_MODE,temp|SM_RESET|SM_ADPCM|SM_LINE1);
HAL_Delay(5); //等待至少1.35ms
VS_Load_Patch((uint16_t*)wav_plugin,40);//VS1053的WAV录音需要patch
wavhead->riff.ChunkID=0x46464952; //"RIFF"
wavhead->riff.ChunkSize=0; //还未确定,最后需要计算 //File size - 8
wavhead->riff.Format=0X45564157; //"WAVE"
wavhead->fmt.ChunkID=0X20746D66; //"fmt "
wavhead->fmt.ChunkSize=20; //大小为20个字节
wavhead->fmt.AudioFormat=0X11; //0X01,表示PCM;0X11,表示IMA ADPCM
wavhead->fmt.NumOfChannels=1; //单声道 //C
wavhead->fmt.SampleRate=8000; //32Khz采样率 采样速率 //R=Fs
wavhead->fmt.ByteRate=wavhead->fmt.SampleRate*256/505;//B=Fs*C*256/505
wavhead->fmt.BlockAlign=256; //块大小,256个字节为一个块
wavhead->fmt.BitsPerSample=4; //4位ADPCM
wavhead->fmt.ByteExtraData=2;
wavhead->fmt.ExtraData=505;
wavhead->fact.ChunkID=0x74636166; //"fact"
wavhead->fact.ChunkSize=4;
wavhead->fact.NumOfSamples=0;
wavhead->data.ChunkID=0X61746164; //"data"
wavhead->data.ChunkSize=0; //数据大小,还需要计算 //File Size-60
读取数据的时候跟原来读取PCM的高低位换下
recbuf[idx++]=w>>8;
recbuf[idx++]=w&0XFF;
|
|