首页 > 其他分享 >Android 端音频变声方案

Android 端音频变声方案

时间:2023-12-13 15:35:20浏览次数:36  
标签:SoundTouch 音频 处理 Fmod PCM 变声 Android

音频变声实质上是通过调整 PCM 数据的音调、节拍等属性,实现听感上的变化。如果是 mp3、aac 等压缩音频,则需提前解码成 PCM 数据,Android 端可以通过 MediaExtractor 及 MediaCodec 解码得到 PCM,但调整音调、节拍仅靠 Android api 就无能为力了,只能集成第三方库来实现,常见的音频处理库有 Fmod 、 SoundTouch 。

Fmod

Fmod 是一个跨平台的音频处理引擎,官网提供了各个平台的 接入文档,可以实现变调、变速变声效果以及混响、颤音等高级效果。开发调用简单,sdk 对外提供了播放器接口,传入音频文件即可直接变声播放。但不支持保存处理后的音频到文件,商业用途需要购买许可证。

如果你不需要保存处理后的音频到文件,那就使用 Fmod 吧,你会发现音频变声是如此简单,而且还支持混响、颤音等高级变声效果!

如果需要保存处理后的音频到文件,那么......我就请你再认真的思考一下,你的需求真的必须要保存处理后的音频吗?假设一个聊天 app 要实现语音消息变声,那这段语音只会在你的应用中播放,那就都可以通过 Fmod 播放器变声播放啊,要知道 Fmod 可是一个跨平台的音频引擎,不论是 Android、IOS 还是 Web 端,只要知道变声参数就可以变声播放了,不需要保存处理后的音频到文件。

能否跃过不支持保存处理后的音频到文件这一缺点,关键是要确定用户能否直接接触到处理后的音频文件,若能接触到,就无法使用 Fmod 了。

关于集成使用 Fmod 库十分简单,网上也有很多,就不再展开了。

SoundTouch

SoundTouch 是一个开源免费的音频处理库,可以改变音调、节拍和播放速率。开发调用时需自行将音频文件解码成 PCM 数据,传入 SoundTouch 处理后,SoundTouch 会输出处理后的 PCM 数据。基于这种使用方式,我们可以对其自由定制以适用于自己的应用。

比如你要实现一个 mp3 的变声播放,可以先用 MediaCodec 将 mp3 解码成 PCM,通过 SoundTouch 处理得到变声后的 PCM,再结合 AudioTrack 实现播放;如果你要将一个 mp3 变声后保存下来,那就在得到变声后的 PCM 后,结合 MediaCodec 将其编码保存下来。

相比 Fmod,SoundTouch 的集成会复杂点,不是随便参考一篇教程就可以跑通的了,这里提供一份亲测可行的 SoundTouch 源码

   

标签:SoundTouch,音频,处理,Fmod,PCM,变声,Android
From: https://www.cnblogs.com/wanglongjiang/p/17899143.html

相关文章

  • 车机 Android 调节音量的三种方式及底层代码逻辑
    注意:本文基于Android12/S进行分析Qidi2023.07.20(MarkDown&EnterpriseArchitect&Haroopad)0.车机环境下音量调节的特殊性车机环境下的音频使用场景,相较于原始Android的音频使用场景,存在这些特殊性:使用专门的aDSP芯片进行音效处理;需要播放/控制原始Android......
  • Android用Dialog作遮照层组件
    1Dialog作蒙版,多层遮罩,布局编写,背景点击,背景样式,,2EditText不可点击,隐藏光标,键盘隐藏,多行显示,3RecyclerView设置最大高度,滚动条显示,4.自定义单选框5.dkVideoPlay6.pdf意义:Android里使用Dialog组件作为遮罩层步骤:1.继承DialogFragment类2.重写onCreate() ......
  • 怎么在Android项目中导入ffmpeg库?
    1.前言在这里我以导入静态库(.a)为例进行分析,动态库(.so)是类似的。在导入前,各位要先编译好ffmpeg库,需要注意的是在编译的时候要开启交叉编译,目标平台为Android,其他平台的库(windows,linux)在Android平台使用不了,我这里编译的是armeabi-v7a架构的库。2.步骤(1)新建一......
  • 360度解析Android动画:哪个更引人注目?
    介绍动画是Android应用中不可或缺的一部分,它可以让应用更加生动、有趣,还可以提升用户体验。Android提供了多种动画实现方式,在本文中,我们将深入研究Android动画的方方面面。从基本的View动画和属性动画开始。我们将介绍高级动画技巧,包括使用自定义插值器、实现复杂效果,以及性能优化......
  • 笔记本睡眠结束后耳机没声音/音频无法播放
    可能原因睡眠结束后WindowsAudio服务没有启动[1].解决思路参考[2]编写bat在电脑睡眠结束后重启该服务,参考[3]让其自动运行.具体步骤编写bat在服务中找到WindowsAudio服务,其属性中复制服务名称编写如下程序以bat为后缀、UTF-8为编码保存实现自动重启按下Win+R,输入t......
  • android随手记(六)
    23.后台弹出界面AndroidQ之后的后台弹出需要申请悬浮窗权限(6.0后悬浮窗权限默认关闭,需要动态申请),如果是小米,vivo,oppo需要另外申请权限/***小米后台弹出界面检测方法**@paramcontext*@return*/publicstaticbooleancanBackgroundStart(Contextcontext){AppOpsMana......
  • android重启app
    code//获取当前应用的包名和类名StringpackageName=getPackageName();StringclassName=getClass().getName();//创建IntentIntentintent=newIntent(curAct,MainActivity.class......
  • 关于Android studio新版本和NEW UI显示返回按钮的设置
    1.新版Androidstudio问题因为在新版本的AndroidStudio中,默认情况下是没有直接的选项来显示返回上一步按钮在状态栏上的,可以通过以下方法来实现返回上一步的功能:在AndroidStudio的顶部菜单栏中,选择"View"。在"View"菜单中,选择"Appearance"。在"Appearance"子菜单中,勾选"Toolbar"......
  • 车机 Android 环境下利用 CarAudioService 实现自定义 Java 服务自启动
    注意:本文基于Android11进行分析Qidi2023.11.28(MarkDown&Haroopad)0.简介AndroidRO(ResourceOverlay)机制Overlay实现的效果正如其字面意思,就是“在原有效果的基础上再叠加一些效果”。Android提供了两种实现方式:编译时:https://source.android.com/docs/set......
  • 车机 Android 环境下利用 CarAudioService 实现自定义 Java 服务自启动
    注意:本文基于Android11进行分析Qidi2023.11.28(MarkDown&Haroopad)0.简介AndroidRO(ResourceOverlay)机制Overlay实现的效果正如其字面意思,就是“在原有效果的基础上再叠加一些效果”。Android提供了两种实现方式:编译时:https://source.android.com/docs/set......