本地录音开启及调试
📎 原始文档:https://www.kdocs.cn/l/ckfrTfZQ27Ts 本地录音开启及调试
一、本地录音
- sdk开启该功能 在对应的板级配置board_xxxx_demo_cfg.h文件中,将下图中的两个宏开启,即是开启了该功能。


#define TCFG_APP_RECORD_EN 1
#define TCFG_ENC_MP3_ENABLE ENABLE
效果演示 开启该功能后,建议先在开发板上测试效果,再做进一步开发。
公版默认录音文件储存在sd卡中,因此做此效果演示需要装入sd卡,并且把mic和喇叭都接上。而且要保证硬件正常。
进入开发板的菜单选择界面,选择录音功能项,点击进入有是一个开始暂停的图片,点击即开始录音。
录音完成后,默认会在storage/sd0/C/JL_REC/路径下生成AC69****.mp3的录音文件,此时可以在音乐界面上拉出音乐列表,找到JL_REC文件夹进入,播放录音文件,就可以了。
二、录音文件存放位置
sd卡 默认就是录在sd卡,参考1中的操作即可。
外挂flash
内置flash 开启下列宏,并配置内置flash分区。


三、调试
- 播放录音文件 默认就是录在sd卡可以参考效果演示中的操作,从音乐界面选取播放。
也可以调用以下接口播放,下方提供一个扫盘的简单demo,可以在获取到名字后,将名字与根目录拼接再调用record_file_play_by_path接口直接播放。
record_file_play则是播放最后一次录音的音频
struct vfscan *fs = NULL;
char name[128];
struct vfs_attr attr = {0};
FILE * fp = NULL;
char * root_path ="storage/sd0/C/JL_REC";
fs = fscan(root_path,"-tMP3 -sn",1);
if(fs == NULL)
{
printf("fscan end");
return;
}
printf("fscan: file_number = %d\n", fs->file_number);
if (fs->file_number == 0) { //判断是否有被扫描格式文件存在
printf("Please create some test files!");
return;
}
//遍历整个文件夹
for(int i=1;i < fs->file_number;i++)
{
//通过文件号选择文件
fp = fselect(fs,FSEL_BY_NUMBER,i);
if(fp)
{
fget_name(fp,name,sizeof(name));
fget_attrs(fp, &attr);
printf("fscan: attr.sclust = %d, file_name = %s\n", attr.sclust, name);
}
fclose(fp);
fp = NULL;
}
//根据路径播放录音文件
record_file_play_by_path("storage/sd0/C/JL_REC/AC690013.MP3");
fscan_release(fs);
fs = NULL;
- 录音时间添加

//获取当前时间
static void get_sys_time(struct sys_time *time)
{
void *fd = dev_open("rtc", NULL);
if (!fd) {
memset(time, 0, sizeof(*time));
return;
}
dev_ioctl(fd, IOCTL_GET_SYS_TIME, (u32)time);
dev_close(fd);
}
//***********************************************
//添加录音文件时间
struct sys_time time;
get_sys_time(&time);
fat_set_datetime_info(time.year,time.month,time.day,time.hour,time.min,time.sec);
//***********************************************
- 录音长文件名 【金山文档】 长文件名demo
https://kdocs.cn/l/cvXIlOecDLoq
长文件名:通过path写入路径,由通过字符转UTF16LE编码写入file_name中,然后通过memcpy将filename的文件名加到path路径后面。通过fopen的"w+"打开可 读/写文件,若文件存在则原文件会被直接覆盖;若文件不存在则创建该文件。通过fopen的"r"以只读方式打开文件,该文件必须存在。
短文件名文件除了通过以上长文件名的方式进行创建和打开读写之外,也可以直接通过路径+短文件名如CONFIG_ROOT_PATH"filename.txt",使用8+3规则,短文件名不能超过8个字节。
//文件夹名
char usr_path[256] = "storage/sd0/C/JL_REC";
//文件名"123456789123.mp3"
char file_path[128] = {'/', '\\', 'U', 0x31, 0x0, 0x32, 0x0, 0x33, 0x0, 0x34, 0x0, 0x35, 0x0, 0x36, 0x0, 0X37, 0x0, 0x38, 0x0, 0x39, 0x0, 0x31, 0, 0x32, 0, 0x33, 0, 0x2E, 0x0, 0x6D, 0x0, 0x70, 0x0, 0x33, 0};
memcpy(usr_path + strlen(usr_path), file_path, sizeof(file_path));
wfil->file = fopen(usr_path, "w+");
转换工具如下:
HEX转字符 十六进制转字符 hex gb2312 gbk utf8 汉字内码转换 - The X 在线工具 (the-x.cn)