AVRecorder录制出的音频文件格式为.m4a,不支持录制.amr格式的音频文件 HarmonyOS 鸿蒙Next

AVRecorder录制出的音频文件格式为.m4a,不支持录制.amr格式的音频文件 HarmonyOS 鸿蒙Next 【标题】AVRecorder录制出的音频文件格式为.m4a,不支持录制.amr格式的音频文件

【API版本】Api14

【DevEco Studio版本】5.0.5.315

【问题描述】FFmpeg三方库(当前版本v1.1.3)因尚未编译支持libopencore-amrnb导致无法通过命令转.amr格式。而AVRecorder录制出的音频文件格式为.m4a,不支持录制.amr格式的音频文件。因业务需要,音频文件需要和其他端格式保持一致,大家知道如何将.m4a转为.amr格式吗?

【问题相关代码】


更多关于AVRecorder录制出的音频文件格式为.m4a,不支持录制.amr格式的音频文件 HarmonyOS 鸿蒙Next的实战教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复

可以通过@sj/ffmpeg三方库将音频文件转为.pcm格式的,再通过@charles/amrnbconverter三方库将.pcm转为.amrg格式,你参考下这个代码:

const filePath = 'xxx'; // 文件沙箱路径
const pcmFilePath = filePath.replace(/.m4a$/, '.pcm'); // 创建需要生成.pcm文件的路径
const amrFilePath = filePath.replace(/.m4a$/, '.amr'); // 创建需要生成.amr文件的路径

// 使用@charles/amrnbconverter三方库转.amr时,.pcm格式要求:16位采样位数,采样率8000,采集声道数1。使用其他采样位数,采样率,采集声道数会导致转换出的.amr音频文件播放异常
const commands = ["ffmpeg", "-i",  filePath, "-f", "s16le", "-acodec", "pcm_s16le", "-ar", "8000", "-ac", "1", pcmFilePath, "-y"];
FFmpeg.exectue(commands, {
  logCallback: (logLevel: number, logMessage: string) => console.log(`[${logLevel}]${logMessage}`),
  progressCallback: (message: string) => console.log(`[progress]${JSON.stringify(FFProgressMessageParser.parse(message))}`),
}).then(async () => {
  await nativeConvertPcmToAmr(pcmFilePath, amrFilePath);
  // 最后删除源文件,和PCM文件,只保留.amr文件
  fileIo.unlink(filePath);
  fileIo.unlink(pcmFilePath);
})

更多关于AVRecorder录制出的音频文件格式为.m4a,不支持录制.amr格式的音频文件 HarmonyOS 鸿蒙Next的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next中,AVRecorder组件默认录制的音频文件格式为.m4a。目前,AVRecorder不支持直接录制.amr格式的音频文件。这是由于AVRecorder在鸿蒙系统中的实现基于特定的音频编码器和容器格式,而.m4a是较为常见的音频格式,支持AAC编码。而.amr格式通常用于低比特率的语音录制,鸿蒙Next的AVRecorder并未集成该格式的编码器。因此,如果需要.amr格式的音频文件,可能需要在录制后通过第三方工具或库进行格式转换。

回到顶部