初级会员

- 积分
- 112
- 金钱
- 112
- 注册时间
- 2017-4-24
- 在线时间
- 56 小时
|

楼主 |
发表于 2017-12-28 09:34:10
|
显示全部楼层
本帖最后由 进击的咸鱼 于 2017-12-28 10:42 编辑
[mw_shl_code=c,true]u8 pwm_play_wav(u8 *pname)
{
FIL* fmp3;
u16 br;
u8 res,rval=0;
u8 *databuf;
u16 i=0;
u8 n;
fmp3=(FIL*)mymalloc(SRAMIN,sizeof(FIL));//éêÇëÄú′æ
databuf=(u8*)mymalloc(SRAMIN,512); //¿a±ù512×Ö½úμÄÄú′æÇøóò
if(databuf==NULL||fmp3==NULL)rval=0XFF ;//Äú′æéêÇëê§°ü.
if(rval==0)
{
printf("in\r\n");
VS_HD_Reset(); //ó2¸′λ
VS_Soft_Reset(); //èí¸′λ
VS_Set_All(); //éèÖÃòôá¿μè2Îêy
VS_Reset_DecodeTime(); //¸′λ½aÂëê±¼ä
res=f_open(fmp3,(const TCHAR*)pname,FA_READ);//′ò¿aÎļt
if(res==0)//′ò¿a3é1|.
{
VS_SPI_SpeedHigh(); //¸ßËù
//VS_SPK_Set(1);
while(rval==0)
{
res=f_read(fmp3,databuf,512,(UINT*)&br);//¶á3ö4096¸ö×Ö½ú
i=0;
do//Ö÷2¥·ÅÑ-»·
{
// if(VS_Send_MusicData(databuf+i)==0)i+=32;//¸øVS10XX·¢ËíòôÆμêy¾Y
// else recoder_show_time(VS_Get_DecodeTime());//ÏÔê¾2¥·Åê±¼ä
TIM_SetCompare1(TIM1, databuf[i++]);
}while(i<512);//Ñ-»··¢Ëí4096¸ö×Ö½ú
if(br!=512||res!=0)
{
rval=0;
printf("¶áíê\r\n");
break;//¶áíêáË.
}
}
f_close(fmp3);
}else rval=0XFF;//3öÏÖ′íÎó
VS_SPK_Set(0); //1رհåÔØà®°è
}
myfree(SRAMIN,fmp3);
myfree(SRAMIN,databuf);
return rval;
}[/mw_shl_code]
PWM的配置:TIM1_PWM_Init(255, 71); //用的是4K的频率
录音的配置:
[mw_shl_code=c,true]//¼¤»î CM ¼òôÄ£ê½
//agc:0,×Ô¶ˉÔöòæ.1024Ïàμ±óú1±¶,512Ïàμ±óú0.5±¶,×î′óÖμ65535=64±¶
void recoder_enter_rec_mode(u16 agc)
{
//èç1ûêÇIMA ADPCM,2éÑùÂê¼ÆËã1«ê½èçÏÂ:
//2éÑùÂê=CLKI/256*d;
//¼ùéèd=0,2¢2±¶Æμ,ía2¿¾§ÕñÎa12.288M.ÄÇÃ′Fc=(2*12288000)/256*6=16Khz
//èç1ûêÇÏßDÔ CM,2éÑùÂêÖ±½ó¾íD′2éÑùÖμ
VS_WR_Cmd(SPI_BASS,0x0000);
VS_WR_Cmd(SPI_AICTRL0,4000); //éèÖÃ2éÑùÂê,éèÖÃÎa8Khz
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,0X2000); //éèÖÃVS10XXμÄê±Öó,MULT:2±¶Æμ;ADD:2»ÔêDí;CLK:12.288Mhz
VS_WR_Cmd(SPI_MODE,0x1804); //MIC,¼òô¼¤»î
delay_ms(5); //μè′yÖáéù1.35ms
VS_Load_Patch((u16*)wav_plugin,40);//VS1053μÄWAV¼òôDèòapatch
}
//3õê¼»ˉWAVí·.
void recoder_wav_init(__WaveHeader* wavhead) //3õê¼»ˉWAVí·
{
wavhead->riff.ChunkID=0X46464952; //"RIFF"
wavhead->riff.ChunkSize=0; //»1Î′è·¶¨,×îoóDèòa¼ÆËã
wavhead->riff.Format=0X45564157; //"WAVE"
wavhead->fmt.ChunkID=0X20746D66; //"fmt "
wavhead->fmt.ChunkSize=16; //′óD¡Îa16¸ö×Ö½ú
wavhead->fmt.AudioFormat=0X01; //0X01,±íê¾ CM;0X01,±íê¾IMA ADPCM
wavhead->fmt.NumOfChannels=1; //μ¥éùμà
wavhead->fmt.SampleRate=4000; //8Khz2éÑùÂê 2éÑùËùÂê
wavhead->fmt.ByteRate=wavhead->fmt.SampleRate*2;//16λ,¼′2¸ö×Ö½ú
wavhead->fmt.BlockAlign=2; //¿é′óD¡,2¸ö×Ö½úÎaò»¸ö¿é
wavhead->fmt.BitsPerSample=16; //16λ CM
wavhead->data.ChunkID=0X61746164; //"data"
wavhead->data.ChunkSize=0; //êy¾Y′óD¡,»1Dèòa¼ÆËã
}[/mw_shl_code]
|
|