本范例将音频编解码器录制到的声音编码为 MP3 格式并将其储存至微型 SD 卡中,而此 MP3 档也可以通过音频编解码器来播放
本范例使用音频编解码器来录制声音,将此声音数据编码为 MP3 格式后,会将编码后的数据写入微型 SD 卡中。
为了使用此范例代码,用户需要准备一个微型 SD 卡并将其插入 T-Flash 卡槽。接着,用户可以按下按钮 BTN0 来开始录制声音,当按下按钮 BTN1 时即会停止录制。MP3 档会在录制完成后自动播放,也可以透过按下按钮 BTN1 来进行播放。用户可以藉由定义 REC_IN_RT 与否来决定是否进行实时录音。如果有定义 REC_IN_RT,当接收到声音数据的同时,会将其编码为 MP3 格式并储存至微型 SD 卡。相反地,如果没有定义 REC_IN_RT,则录制到的声音数据会先储存在 HyperRAM,直到停止录制后才开始将这些数据编码为 MP3 格式并进一步储存至微型 SD 卡中。
此 MP3 录音机适用于人声录制。支持单声道模式,数据长度为 16 位,采样率预设为 16 千赫兹,比特率预设为 64 千位每秒。此外,该录音机提供了不同采样率及比特率的组合,如表 1-1所列,用户可以藉由定义 REC_SAMPLE_RATE 及 REC_BIT_RATE 来做配置。
本范例为用户提供在线录音及脱机录音,用户可以根据 config.h 中是否定义了 REC_IN_RT 来选择其中一个使用。
在 main.c 的 main() 中,调用 SYS_Init() 及 SD_Init() 来初始化外设时钟及相关的多功能引脚,包含 UART、I2S、I2C、PDMA、HBI 以及 SD。在 while(1) 循环中,它会一直检查 PH.0 与 PH.1 引脚的状态以及 g_u32RecordStart 与 g_u32RecordDone 的数值来开始或停止录制。
当 PH.0 为 1 且 g_u32RecordStart 与 g_u32RecordDone 为 0 时,首先,只在 REC_IN_RT 没被定义时调用 ClearHyperRAM() 来清除 HyperRAM 里所有数据,接着调用 Recorder_Init() 来配置录音条件、初始化 I2S、音频编解码器以及编码器,然后使能 I2S 接收功能来开始接收声音数据。若没有定义 REC_IN_RT,当 g_u32RecordDone 为 1 时,禁用 I2S 接收功能以停止接收声音数据,接着调用 MP3Recorder() 来将声音数据编码为 MP3 格式且将编码后的数据储存至微型 SD 卡。
若 REC_IN_RT 有被定义且 g_u32RecordStart 为 1,当 I2S 每接收到一帧数据时,编码声音数据以及写微型 SD 卡的动作就会被执行。值得注意的是,如果编码声音数据及写微型 SD 卡的时间大于 I2S 接收一帧数据的时间时,I2S 在这段时间所接收到的声音数据将不会被处理。这个情况会在微型 SD 卡性能不佳时发生,此时,错误标志 g_u32ErrorFlag 将不再为零,UART 信息会告知用户部分声音已经遗失。如果用户想要得到高的录音质量,请更换更高性能或者更高速的微型 SD 卡。
下载地址
https://www.nuvoton.com/resource-download.jsp?tp_GUID=EC0120220531132955
|