初级会员
- 积分
- 103
- 金钱
- 103
- 注册时间
- 2020-2-27
- 在线时间
- 33 小时
|
1金钱
目前我更改了两个函数,这是更改完以后得代码,现在录得音只有一个声道,而且噪音很重。@正点原子 @原子哥
void recoder_enter_rec_mode(void)
{
WM8978_ADDA_Cfg(0,1); //开启ADC
WM8978_Input_Cfg(1,1,0); //开启输入通道(MIC&LINE IN)
WM8978_Output_Cfg(0,1); //开启BYPASS输出
WM8978_MIC_Gain(46); //MIC增益设置
WM8978_I2S_Cfg(2,2); //飞利浦标准,16位数据长度
I2S2_Init(I2S_Standard_Phillips,I2S_Mode_MasterTx,I2S_CPOL_Low,I2S_DataFormat_24b); //飞利浦标准,主机发送,时钟低电平有效,16位帧长度
I2S2ext_Init(I2S_Standard_Phillips,I2S_Mode_SlaveRx,I2S_CPOL_Low,I2S_DataFormat_24b); //飞利浦标准,从机接收,时钟低电平有效,16位帧长度
I2S2_SampleRate_Set(48000); //设置采样率
I2S2_TX_DMA_Init((u8*)&i2splaybuf[0],(u8*)&i2splaybuf[1],1); //配置TX DMA ??????????????????
DMA1_Stream4->CR&=~(1<<4); //关闭传输完成中断(这里不用中断送数据)
I2S2ext_RX_DMA_Init(i2srecbuf1,i2srecbuf2,I2S_RX_DMA_BUF_SIZE/ 2); //配置RX DMA
i2s_rx_callback=rec_i2s_dma_rx_callback;//回调函数指wav_i2s_dma_callback
I2S_Play_Start(); //开始I2S数据发送(主机)
I2S_Rec_Start(); //开始I2S数据接收(从机)
recoder_remindmsg_show(0);
}
void recoder_wav_init(__WaveHeader* wavhead) //初始化WAV头
{
wavhead->riff.ChunkID=0X46464952; //"RIFF"
wavhead->riff.ChunkSize=0; //还未确定,最后需要计算
wavhead->riff.Format=0X45564157; //"WAVE"
wavhead->fmt.ChunkID=0X20746D66; //"fmt "
wavhead->fmt.ChunkSize=16; //大小为16个字节
wavhead->fmt.AudioFormat=0X01; //0X01,表示PCM;0X01,表示IMA ADPCM
wavhead->fmt.NumOfChannels=2; //双声道
wavhead->fmt.SampleRate=48000; //16Khz采样率 采样速率
wavhead->fmt.ByteRate=wavhead->fmt.SampleRate*6;//字节速率=采样率*通道数*(ADC位数/8)
wavhead->fmt.BlockAlign=6; //块大小=通道数*(ADC位数/8)
wavhead->fmt.BitsPerSample=24 ; //16位PCM??????????????????
wavhead->data.ChunkID=0X61746164; //"data"
wavhead->data.ChunkSize=0; //数据大小,还需要计算
}
|
|