OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 7937|回复: 11

基于VS1053的录音文件保存失败!

[复制链接]

10

主题

67

帖子

0

精华

初级会员

Rank: 2

积分
127
金钱
127
注册时间
2013-10-20
在线时间
0 小时
发表于 2014-5-24 00:03:35 | 显示全部楼层 |阅读模式
5金钱
以下是基于迷你板子的recorder.c部分代码:
现在就是可以初始化完毕后进入录音模式,但是保存录音文件功能失效,哪位帮忙看看问题出在哪儿,万分感谢,附件是整体工程
//录音机
//所有录音文件,均保存在SD卡RECORDER文件夹内.
u8 recoder_play(void)
{
u8 res;
u8 key;
u8 rval=0;
__WaveHeader *wavhead=0;
u32 sectorsize=0;
FIL* f_rec=0; //文件    
DIR recdir; //目录
u8 *recbuf; //数据内存
u16 w;
u16 idx=0;    
u8 rec_sta=0; //录音状态
//[7]:0,没有录音;1,有录音;
//[6:1]:保留
//[0]:0,正在录音;1,暂停录音;
u8 *pname=0;
u8 timecnt=0; //计时器  
u32 recsec=0; //录音时间
u8 recagc=4; //默认增益为4
u8 playFlag=0; //播放标志



Show_Str(60,130,200,16,"KEY1:REC/PAUSE",16,0);
Show_Str(60,150,200,16,"KEY0:STOP&SAVE",16,0);
Show_Str(60,170,200,16,"KEY_UPlay The File",16,0);




  while(f_opendir(&recdir,"0:/RECORDER"))//打开录音文件夹
{
Show_Str(60,230,240,16,"RECORDER文件夹错误!",16,0);
delay_ms(200);  
LCD_Fill(60,230,240,246,WHITE); //清除显示    
delay_ms(200);  
f_mkdir("0:/RECORDER"); //创建该目录  
}
  f_rec=(FIL *)mymalloc(SRAMIN,sizeof(FIL)); //开辟FIL字节的内存区域
if(f_rec==NULL)rval=1; //申请失败
wavhead=(__WaveHeader*)mymalloc(SRAMIN,sizeof(__WaveHeader));//开辟__WaveHeader字节的内存区域
if(wavhead==NULL)rval=1;
recbuf=mymalloc(SRAMIN,512);
if(recbuf==NULL)rval=1;    
pname=mymalloc(SRAMIN,30); //申请30个字节内存,类似"0:RECORDER/REC00001.wav"
if(pname==NULL)rval=1;
if(rval==0) //内存申请OK
{      
recoder_enter_rec_mode(1024*recagc);
  while(VS_RD_Reg(SPI_HDAT1)>>8); //等到buf 较为空闲再开始  
  recoder_show_time(recsec); //显示时间
recoder_show_agc(recagc); //显示agc
pname[0]=0; //pname没有任何文件名
  while(rval==0)
{
key=KEY_Scan();
switch(key)
{
case KEY0_VAL: //STOP&SAVE
if(rec_sta&0X80)//有录音
{
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);
sectorsize=0;
}
rec_sta=0;
recsec=0;
LED1=1; //关闭DS1
LCD_Fill(60,230,240,246,WHITE); //清除显示,清除之前显示的录音文件名    
recoder_show_time(recsec); //显示时间
break;
case KEY1_VAL: //REC/PAUSE
if(rec_sta&0X01)//原来是暂停,继续录音
{
rec_sta&=0XFE;//取消暂停
}else if(rec_sta&0X80)//已经在录音了,暂停
{
rec_sta|=0X01; //暂停
}else //还没开始录音
{
rec_sta|=0X80; //开始录音
recoder_new_pathname(pname); //得到新的名字
Show_Str(60,230,240,16,pname+11,16,0); //显示当前录音文件名字
recoder_wav_init(wavhead); //初始化wav数据
res=f_open(f_rec,(const TCHAR*)pname, FA_CREATE_ALWAYS | FA_WRITE);
if(res) //文件创建失败
{
rec_sta=0; //创建文件失败,不能录音
rval=0XFE; //提示是否存在SD卡
}else res=f_write(f_rec,(const void*)wavhead,sizeof(__WaveHeader),&bw);//写入头数据
}
if(rec_sta&0X01)LED1=0; //提示正在暂停
else LED1=1;
break;
 case KEY_UP_VAL:
  playFlag = 1;
      mp3_play();
  break;

}
///////////////////////////////////////////////////////////
//读取数据  
if(rec_sta==0X80)//已经在录音了
{
  w=VS_RD_Reg(SPI_HDAT1);
if((w>=256)&&(w<896))
{
idx=0;  
  while(idx<512) //一次读取512字节
{
w=VS_RD_Reg(SPI_HDAT0);      
recbuf[idx++]=w&0XFF;
recbuf[idx++]=w>>8;
}  
res=f_write(f_rec,recbuf,512,&bw);//写入文件
if(res)
{
printf("err:%d\r\n",res);
printf("bw:%d\r\n",bw);
break;//写入出错.  
}
sectorsize++;//扇区数增加1,约为32ms
}
}else//没有开始录音,则检测TPAD按键
{  
if(playFlag&&pname[0])//如果触摸按键被按下,且pname不为空
{
         playFlag = 0;
Show_Str(60,230,240,16,"播放:",16,0);  
Show_Str(60+40,230,240,16,pname+11,16,0); //显示当播放的文件名字  
rec_play_wav(pname); //播放pname
LCD_Fill(60,230,240,246,WHITE); //清除显示,清除之前显示的录音文件名  
recoder_enter_rec_mode(1024*recagc); //重新进入录音模式
  while(VS_RD_Reg(SPI_HDAT1)>>8); //等到buf 较为空闲再开始  
  recoder_show_time(recsec); //显示时间
recoder_show_agc(recagc); //显示agc
}
delay_ms(5);
timecnt++;
if((timecnt%20)==0)LED0=!LED0;//DS0闪烁
}
/////////////////////////////////////////////////////////////
if(recsec!=(sectorsize*4/125))//录音时间显示
{  
LED0=!LED0;//DS0闪烁
recsec=sectorsize*4/125;
recoder_show_time(recsec);//显示时间
}
}  
}        
myfree(SRAMIN,wavhead);
myfree(SRAMIN,recbuf);  
myfree(SRAMIN,f_rec);
myfree(SRAMIN,pname);
return rval;
}
现在就是可以初始化完毕后进入录音模式,但是保存录音文件功能失效,哪位帮忙看看问题出在哪儿,万分感谢,附件是整体工程

Mini STM32 VS1053录音机实验(FATFS版本).rar

7.17 MB, 下载次数: 252

求学不怕苦才能坚持到彼岸
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-5-24 00:05:27 | 显示全部楼层
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

10

主题

67

帖子

0

精华

初级会员

Rank: 2

积分
127
金钱
127
注册时间
2013-10-20
在线时间
0 小时
 楼主| 发表于 2014-5-24 00:20:06 | 显示全部楼层
 

        
就是WK_UP按键按了也没有反应,进入不了保存文件功能,界面也不会显示任何,上述为进入开始录音状态
求学不怕苦才能坚持到彼岸
回复

使用道具 举报

10

主题

67

帖子

0

精华

初级会员

Rank: 2

积分
127
金钱
127
注册时间
2013-10-20
在线时间
0 小时
 楼主| 发表于 2014-5-24 00:41:21 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
在recorder文件夹内创建的REC65534.wav文件始终是0字节,感觉录音数据根本没实现保存
求学不怕苦才能坚持到彼岸
回复

使用道具 举报

10

主题

67

帖子

0

精华

初级会员

Rank: 2

积分
127
金钱
127
注册时间
2013-10-20
在线时间
0 小时
 楼主| 发表于 2014-5-24 10:08:00 | 显示全部楼层
自己顶一个,有谁帮忙看看问题出在哪儿了么,录音数据保存不了
求学不怕苦才能坚持到彼岸
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-5-24 23:24:03 | 显示全部楼层
回复【3楼】爱在暖晴天:
---------------------------------
TIME有在走,应该是有录音的,你要按KEY0,才会保存.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

10

主题

67

帖子

0

精华

初级会员

Rank: 2

积分
127
金钱
127
注册时间
2013-10-20
在线时间
0 小时
 楼主| 发表于 2014-5-25 01:05:50 | 显示全部楼层
回复【6楼】正点原子:
---------------------------------
KEY0完全功能失效,没任何作用,在根目录下自建的mwv文件依旧是0字节,说明根本没保存
求学不怕苦才能坚持到彼岸
回复

使用道具 举报

10

主题

67

帖子

0

精华

初级会员

Rank: 2

积分
127
金钱
127
注册时间
2013-10-20
在线时间
0 小时
 楼主| 发表于 2014-5-25 20:25:12 | 显示全部楼层
想把保存后的录音数据采用DMA串口传输给上位机,有哪位尝试并成功过?
求学不怕苦才能坚持到彼岸
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-5-26 00:45:31 | 显示全部楼层
回复【8楼】爱在暖晴天:
---------------------------------
Mini板有录音机代码,官方的,你测试下看看。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-5-26 00:45:47 | 显示全部楼层
http://www.openedv.com/posts/list/21375.htm
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

12

主题

113

帖子

0

精华

高级会员

Rank: 4

积分
899
金钱
899
注册时间
2020-10-29
在线时间
114 小时
发表于 2020-12-4 10:20:12 | 显示全部楼层
爱在暖晴天 发表于 2014-5-24 00:41
回复【2楼】正点原子:
---------------------------------
在recorder文件夹内创建的REC65534.wav文件始终 ...

我的也是 加上其它传感器模块特别明显
回复

使用道具 举报

12

主题

113

帖子

0

精华

高级会员

Rank: 4

积分
899
金钱
899
注册时间
2020-10-29
在线时间
114 小时
发表于 2020-12-8 16:46:44 | 显示全部楼层
爱在暖晴天 发表于 2014-5-25 01:05
回复【6楼】正点原子:
---------------------------------
KEY0完全功能失效,没任何作用,在根目录下自建 ...

对的  我的有的也是
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-23 15:35

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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