实验代码代码如下; FATFS fs /* Work area (file system object) for logical drives */
FRESULT res; /*读写文件的返回值*/ UINT br, bw; /* File R/W count */ //BYTE buffer[4096]={0}; /* file copy buffer */ u8 rval=0; __WaveHeader *wavhead=0; u32 sectorsize=0x1111; FIL* f_rec=0; //文件 u8 *recbuf; //数据内存 u8 *pname=0; unsigned char FileBuffer[] = {0x17,0x02, 0x17,0x03, 0x18,0x03, 0x19,0x02, 0x15,0x03, 0x16,0x03, 0x17,0x03, 0x17,0x03, 0x17,0x03, 0x18,0x03}; // //初试话WAV文件 void WavInit(__WaveHeader*wavhead) { 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 wavhead->fmt.NumOfChannels=1; //单声道 wavhead->fmt.SampleRate=8000; //8Khz采样率,采样速度 wavhead->fmt.ByteRate=wavhead->fmt.SampleRate*2;//16位, wavhead->fmt.BlockAlign=2; //块大小=通道数*(ADC位数/8) wavhead->fmt.BitsPerSample=16; //16位PCM wavhead->data.ChunkID=0X61746164; //"data" wavhead->data.ChunkSize=0; //数据大小,还需要计算 } void WavSave(void) { RCC_Configuration(); GPIO_Configuration(); NVIC_Configuration(); f_mount(0,&fs); f_rec=(FIL *)mymalloc(SRAMIN,sizeof(FIL)); //开辟FIL字节的内存数据 wavhead=(__WaveHeader*)mymalloc(SRAMIN,sizeof(__WaveHeader));//开辟__WaveHeader字节的内存数据 wavhead->riff.ChunkSize=sectorsize*512+36; //整个文件大小-8; wavhead->data.ChunkSize=sectorsize*512; //数据大小 f_lseek(f_rec,0); //偏移到头文件. f_write(f_rec,(const void*)wavhead,sizeof(__WaveHeader),&bw);//写入头数据 f_close(f_rec); WavInit(wavhead); res = f_open(f_rec, "孤狼 5.wav", FA_CREATE_ALWAYS | FA_WRITE ); if ( res == FR_OK ) { res = f_write(f_rec, (const void*)wavhead, sizeof(__WaveHeader), &bw); //将缓冲里面的数据写入文件 res = f_write(f_rec, FileBuffer, sizeof(FileBuffer), &bw); //将音频的数据写文件 f_close(f_rec); } } 实验现象如下
实验现象
如图,在SD卡中有WAV的文件生成,但是用千千静听打开文件播放的时间长度确是0.可是我明明在里面写数据了。不知道为什么播放不出来。 我的思路是先在数值中存放段音乐的十六进制的代码,然后把它存在SD卡的WAV文件中,用千千静听播放出来。现在遇到的问题是可以保存但是没有内容。
|