FFmpeg开发笔记(八十)使用百变魔音AiSound实现变声特效
<span data-cke-copybin-start="1"><span data-cke-copybin-start="1"></span></span><span id="cke_bm_215S">《FFmpeg开发实战:从零基础到短视频上线》一书的“第5章 FFmpeg处理音频”介绍了如何使用FFmpeg处理和转换音频,“第 12 章 FFmpeg的移动开发”介绍了如何使用FFmpeg在手机上剪辑视频,二者结合起来即可开发音频剪辑App。那么在Android系统上还有一款国产的开源音频特效框架AiSound,通过该框架可以更快地开发变声App,下面就来介绍如何在App工程中使用AiSound。</span><p><span id="cke_bm_215S"> AiSound名叫AI魔法声音,也叫百变魔音,它是一个运行于Android系统的结合AI技术的变声器SDK。AiSound基于开源框架fmod实现,通过fmod处理音频的变声播放效果,还支持试听和保存变声后的音效文件。其中fmod是一款游戏音频引擎,它的最新版本为1.10.15,下载页面为https://fmod.com/download。<br>
AiSound的源码托管地址为https://github.com/microshow/AiSound,最新版本是2020年8月发布的AiSound 1.0(星星数0.4k),可见该框架的源码更新十分及时。并且AiSound的源码采用Java+XML编写,对于初学者而言非常友好,使用Android Studio Dolphin(小海豚版本)无需任何改动即可直接导入AiSound的demo工程。<br>
在自己的App工程中集成AiSound也很简单,只要执行下列几个步骤就行。</span></p>
<h1>一、导入AiSound库</h1>
<p>如果已经事先导入AiSound的库工程,则只需在build.gradle中添加下面一行即可引入AiSound:</p>
<div class="cke_widget_wrapper cke_widget_block cke_widget_codeSnippet cke_widget_selected" data-cke-display-name="代码段" data-cke-filter="off" data-cke-widget-id="9" data-cke-widget-wrapper="1">
<pre class="cke_widget_element" data-cke-widget-data="%7B%22code%22%3A%22implementation%20project('%3Aaisound')%22%2C%22classes%22%3Anull%7D" data-cke-widget-keep-attr="0" data-cke-widget-upcasted="1" data-widget="codeSnippet"><code class="hljs">implementation project(':aisound')</code></pre>
</div>
<p>如果不用库工程,也只要在build.gradle中添加下面一行即可引入AiSound(未验证):</p>
<div class="cke_widget_wrapper cke_widget_block cke_widget_codeSnippet cke_widget_selected" data-cke-display-name="代码段" data-cke-filter="off" data-cke-widget-id="8" data-cke-widget-wrapper="1">
<pre class="cke_widget_element" data-cke-widget-data="%7B%22code%22%3A%22implementation%20'com.github.microshow%3AAiSound%3A1.0.0-beta'%22%2C%22classes%22%3Anull%7D" data-cke-widget-keep-attr="0" data-cke-widget-upcasted="1" data-widget="codeSnippet"><code class="hljs">implementation 'com.github.microshow:AiSound:1.0.0-beta'</code></pre>
</div>
<h1>二、执行变声操作</h1>
<p>在App工程中可通过以下代码初始化变声器AiSound:</p>
<div class="cke_widget_wrapper cke_widget_block cke_widget_codeSnippet cke_widget_selected" data-cke-display-name="代码段" data-cke-filter="off" data-cke-widget-id="7" data-cke-widget-wrapper="1">
<pre class="cke_widget_element" data-cke-widget-data="%7B%22code%22%3A%22AiSound.init(this)%3B%20%2F%2F%E5%88%9D%E5%A7%8B%E5%8C%96AiSound%22%2C%22classes%22%3Anull%7D" data-cke-widget-keep-attr="0" data-cke-widget-upcasted="1" data-widget="codeSnippet"><code class="hljs">AiSound.init(this); //初始化AiSound</code></pre>
</div>
<p>初始化之后,再通过以下代码对指定路径的音频文件执行指定类型的变声播放操作:</p>
<div class="cke_widget_wrapper cke_widget_block cke_widget_codeSnippet cke_widget_selected" data-cke-display-name="代码段" data-cke-filter="off" data-cke-widget-id="6" data-cke-widget-wrapper="1">
<pre class="cke_widget_element" data-cke-widget-data="%7B%22code%22%3A%22AiSound.playSoundAsync(path%2C%20type)%3B%22%2C%22classes%22%3Anull%7D" data-cke-widget-keep-attr="0" data-cke-widget-upcasted="1" data-widget="codeSnippet"><code class="hljs">AiSound.playSoundAsync(path, type);</code></pre>
</div>
<p>开始变声播放之后,可通过以下代码暂停AiSound的变声播放操作:</p>
<div class="cke_widget_wrapper cke_widget_block cke_widget_codeSnippet cke_widget_selected" data-cke-display-name="代码段" data-cke-filter="off" data-cke-widget-id="5" data-cke-widget-wrapper="1">
<pre class="cke_widget_element" data-cke-widget-data="%7B%22code%22%3A%22AiSound.pauseSound()%3B%20%2F%2F%20%E6%9A%82%E5%81%9C%E6%92%AD%E6%94%BE%22%2C%22classes%22%3Anull%7D" data-cke-widget-keep-attr="0" data-cke-widget-upcasted="1" data-widget="codeSnippet"><code class="hljs">AiSound.pauseSound(); // 暂停播放</code></pre>
</div>
<p>暂停变声播放之后,可通过以下代码恢复AiSound的变声播放操作:</p>
<div class="cke_widget_wrapper cke_widget_block cke_widget_codeSnippet cke_widget_selected" data-cke-display-name="代码段" data-cke-filter="off" data-cke-widget-id="4" data-cke-widget-wrapper="1">
<pre class="cke_widget_element" data-cke-widget-data="%7B%22code%22%3A%22AiSound.resumeSound()%3B%20%2F%2F%20%E6%81%A2%E5%A4%8D%E6%92%AD%E6%94%BE%22%2C%22classes%22%3Anull%7D" data-cke-widget-keep-attr="0" data-cke-widget-upcasted="1" data-widget="codeSnippet"><code class="hljs">AiSound.resumeSound(); // 恢复播放</code></pre>
</div>
<p>退出变声播放页面或者提前结束变声播放,都要通过以下代码关闭AiSound的变声播放操作:</p>
<div class="cke_widget_wrapper cke_widget_block cke_widget_codeSnippet cke_widget_selected" data-cke-display-name="代码段" data-cke-filter="off" data-cke-widget-id="3" data-cke-widget-wrapper="1">
<pre class="cke_widget_element" data-cke-widget-data="%7B%22code%22%3A%22AiSound.close()%3B%20%2F%2F%20%E9%87%8A%E6%94%BE%E6%92%AD%E6%94%BE%E8%B5%84%E6%BA%90%22%2C%22classes%22%3Anull%7D" data-cke-widget-keep-attr="0" data-cke-widget-upcasted="1" data-widget="codeSnippet"><code class="hljs">AiSound.close(); // 释放播放资源</code></pre>
</div>
<p>由此可见,AiSound用起来很简单,只要寥寥几行代码就能在自己的App工程中快速添加变声播放功能。<br>
按照上述几个步骤给App工程集成AiSound后,编译运行AiSound的demo工程,打开测试App如下图所示。</p>
<p><span class="cke_widget_wrapper cke_widget_inline cke_widget_image cke_image_nocaption cke_widget_selected" data-cke-display-name="图像" data-cke-filter="off" data-cke-widget-id="2" data-cke-widget-wrapper="1"><span class="cke_reset cke_widget_drag_handler_container"><span class="cke_image_resizer" title="点击并拖拽以改变尺寸"><span class="cke_widget_edit_container" title="编辑图片"><img src="https://img2024.cnblogs.com/blog/729938/202507/729938-20250713182204365-1938465503.jpg"></span></span></span></span></p>
<p>可见AiSound支持的变声特效包括萝莉、大叔、惊悚、搞怪、空灵等等,是个不错的国产音效处理SDK。</p>
<p>更多详细的FFmpeg开发知识参见<span class="cke_widget_wrapper cke_widget_inline cke_widget_csdnlink cke_widget_selected" data-cke-display-name="a" data-cke-filter="off" data-cke-widget-id="1" data-cke-widget-wrapper="1">《FFmpeg开发实战:从零基础到短视频上线》一书。</span></p><br><br>
来源:https://www.cnblogs.com/aqi00/p/18982658
頁:
[1]