野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 10658|回复: 2

基于FATFS文件系统SD卡保存WAV格式音频的疑惑。

[复制链接]
发表于 2016-4-1 22:11:23 | 显示全部楼层 |阅读模式
   实验代码代码如下;     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文件中,用千千静听播放出来。现在遇到的问题是可以保存但是没有内容。

回复

使用道具 举报

发表于 2016-4-2 08:55:09 | 显示全部楼层
我们的例程里有录音例程的,先用它试下
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-4-2 14:57:33 | 显示全部楼层
flyleaf 发表于 2016-4-2 08:55
我们的例程里有录音例程的,先用它试下

您说的是MP3例程吗?单独的录音例程我没有找到啊,不知道您那里有没有?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-9-23 03:26 , Processed in 0.046431 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表