OpenEdv-开源电子网

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

[求助] 录音代码修改,想要设置录音延迟一段时间重复播放几次

[复制链接]

3

主题

6

帖子

0

精华

新手上路

积分
21
金钱
21
注册时间
2020-4-10
在线时间
6 小时
发表于 2020-4-13 17:29:16 | 显示全部楼层 |阅读模式
1金钱
本帖最后由 zxcvsdd 于 2020-4-13 17:32 编辑

key1保存完之后再key0是继续录音了,不能进行相关设置                               



LCD_Fill(30,230,240,246,WHITE);        //清除显示,清除之前显示的录音文件名             
                                        recoder_show_time(recsec);                //显示时间
                                       
                                       
//                                        while(delayplay<3||playtimes<3)
//                                        {
//                                        key=KEY_Scan(0);
//                                        switch(key)
//                                        {
//                                         case KEY0_PRES://设置延时播放时间
//                                   delayplay++;
//                                   break;
//                                         case KEY1_PRES://设置延时播放次数
//                                   playtimes++;
//                                   break;
//                                        }
//                                }
                                       

                                        break;         
                                case KEY0_PRES:        //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(30,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 WKUP_PRES://播放录音(仅在非录音状态下有效)
                                   if(rec_sta==0)playFlag=1;
                                   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//没有开始录音
                        {                                                                  
                                if(playFlag&&pname[0])//如果KEY_UP按键被按下,且pname不为空
                                {                                 
                                        Show_Str(30,230,240,16,"播放:",16,0);                  
//                                Show_Str(30+40,230,240,16,pname+11,16,0);        //显示当播放的文件名字  
//                                        delay_ms(delayplay*5000);
//                                        while(playtimes)
//                                        {
//                                                playtimes--;
//                                          rec_play_wav(pname);                                                //播放pname
//                                        }
                                        rec_play_wav(pname);                                                //播放pname
                                        LCD_Fill(30,230,240,246,WHITE);                                //清除显示,清除之前显示的录音文件名          
                                        recoder_enter_rec_mode(1024*recagc);                //重新进入录音模式       

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

109

主题

5564

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
10569
金钱
10569
注册时间
2017-2-18
在线时间
1913 小时
发表于 2020-4-13 21:47:19 | 显示全部楼层
用的什么解码芯片
有没有判断文件播放完成的函数?
回复

使用道具 举报

3

主题

6

帖子

0

精华

新手上路

积分
21
金钱
21
注册时间
2020-4-10
在线时间
6 小时
 楼主| 发表于 2020-4-13 23:42:54 | 显示全部楼层
peng1554 发表于 2020-4-13 21:47
用的什么解码芯片
有没有判断文件播放完成的函数?


vs1053,程序就是程序源码录音实验里的,只有注释掉的这几行是后面加的,源程序不是摁下key_up之后直接回复最近的一次录音嘛,就想试试能不能摁下之后延迟一段时间再播放几回
回复

使用道具 举报

3

主题

6

帖子

0

精华

新手上路

积分
21
金钱
21
注册时间
2020-4-10
在线时间
6 小时
 楼主| 发表于 2020-4-13 23:45:48 | 显示全部楼层
peng1554 发表于 2020-4-13 21:47
用的什么解码芯片
有没有判断文件播放完成的函数?

vs1053,程序就是程序源码录音实验里的,只有注释掉的这几行是后面加的,源程序不是摁下key_up之后直接回复最近的一次录音嘛,就想试试能不能摁下之后延迟一段时间再播放几回
回复

使用道具 举报

3

主题

6

帖子

0

精华

新手上路

积分
21
金钱
21
注册时间
2020-4-10
在线时间
6 小时
 楼主| 发表于 2020-4-13 23:46:29 | 显示全部楼层
peng1554 发表于 2020-4-13 21:47
用的什么解码芯片
有没有判断文件播放完成的函数?

vs1053,程序就是程序源码录音实验里的,只有注释掉的这几行是后面加的,源程序不是摁下key_up之后直接回复最近的一次录音嘛,就想试试能不能摁下之后延迟一段时间再播放几回
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-25 05:59

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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