音频格式转换

一、场景

项目需求需要App实现声纹识别功能,调用科大讯飞接口:

声纹识别 API 文档 | 讯飞开放平台文档中心

其接口要求音频文件格式为mp3

二、问题产生

在安卓端根据官方文档说明,系统并不支持直接录制mp3格式音频,支持格式如下:

支持的媒体格式 | Android media | Android Developers

苹果端也有类似情况:

Documentation Archive

简单来说,移动端系统支持pcm 或者 wav 这种原始音频文件信息,文件比较大,而科大讯飞接口需要提供压缩后文件比较小的mp3格式音频,因此就需要进行转换处理了。

三、功能实现

刚开始在安卓端查到的资料大多为使用lame库来进行转换处理:
Android集成LAME库,实现pcm转mp3_安卓lame-CSDN博客

但是看到这种需要NDK 开发,并且这个功能以后也不常用,对于框架的维护起来比较麻烦。所以想着换个思路,是否让后端来进行这个转换工作,因为苹果端以后也要进行转码操作,如果java后端实现了,则可以免去移动端两端的烦恼。

查询java端的思路也还是使用lame库或者ffmpeg 库,但是找到几个开源库都是这种star很少的,例如:

https://blog.csdn.net/Fan_1504251998/article/details/126345408

然后应用时不成成功,报各种错误,无法正常转换。

找到一个star 多一点也是如此,例如:

GitHub - a-schild/jave2: The JAVE (Java Audio Video Encoder) library is Java wrapper on the ffmpeg project

就在这种反复尝试无果时,又问了下大模型,给出的其他方案中有使用ffmpeg 转码的,于是想到了之前自己在增加视频关键帧时,曾经下载用命令尝试过,于是查了一下音频转码的命令:

ffmpeg -y -f 采样格式 -ac 声道数 -ar 采样率 -acodec pcm_s16le -i PCM源文件 MP3目标文件

将安卓端录制的pcm音频文件放置到了工具目录下运行:

ffmpeg.exe -y -f s16be -ac 1 -ar 16000 -acodec pcm_s16le -i test_audio.pcm converted.mp3

转换出来的mp3文件能够正常播放,并且使用科大讯飞接口能够成功进行调用。

于是格局打开,思路豁然开朗,感觉大有可为。

继续查询安卓端是否可以直接使用ffmpeg库,而不需要想lame 那样的NDK开发方式,GPT给出了如下引用库: implementation 'com.arthenica:ffmpeg-kit-full:5.1.LTS'

使用方式:

String command = String.format("-y -f s16be -ac 1 -ar 16000 -acodec pcm_s16le -i %s %s",wavPath, mp3Path);

FFmpegSession session = FFmpegKit.execute(command);

if (session.getReturnCode().isSuccess(session.getReturnCode())) {

Log.d("FFmpeg", "WAV to MP3 conversion successful");

} else {

Log.e("FFmpeg", "WAV to MP3 conversion failed: " + session.getFailStackTrace());

}

实现了安卓端的音频mp3转换

相关推荐
独自破碎E7 小时前
【BISHI9】田忌赛马
android·java·开发语言
代码s贝多芬的音符8 小时前
android 两个人脸对比 mlkit
android
darkb1rd10 小时前
五、PHP类型转换与类型安全
android·安全·php
gjxDaniel10 小时前
Kotlin编程语言入门与常见问题
android·开发语言·kotlin
csj5010 小时前
安卓基础之《(22)—高级控件(4)碎片Fragment》
android
峥嵘life11 小时前
Android16 【CTS】CtsMediaCodecTestCases等一些列Media测试存在Failed项
android·linux·学习
stevenzqzq12 小时前
Compose 中的状态可变性体系
android·compose
似霰12 小时前
Linux timerfd 的基本使用
android·linux·c++
EasyGBS13 小时前
视频画面模糊、卡顿、丢失?EasyGBS新增“视频质量诊断”功能,告别人工盯屏
视觉检测·音视频·gb28181·花屏·视频质量诊断·蓝屏检测
zhuweisky14 小时前
ArkTS实现鸿蒙手机视频聊天、屏幕分享(HarmonyOS)
音视频·harmonyos·鸿蒙开发