Skip to content

FmodSound

DeMon edited this page Aug 26, 2021 · 4 revisions

FMOD官网

示例

完整的示例代码,请参见:SoundFmodActivity.kt

1.七种音效类型

FmodSound

    //音效的类型
    const val MODE_NORMAL = 0 //正常

    const val MODE_FUNNY = 1 //搞笑

    const val MODE_UNCLE = 2 //大叔

    const val MODE_LOLITA = 3 //萝莉

    const val MODE_ROBOT = 4 //机器人

    const val MODE_ETHEREAL = 5 //空灵

    const val MODE_CHORUS = 6 //混合

    const val MODE_HORROR = 7 //恐怖

2.初始化FMOD

override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        //初始化
        FMOD.init(this)
}

override fun onDestroy() {
        super.onDestroy()
        //释放
        FMOD.close()
}

3.变声播放

   /**
     * 变声并播放,耗时,需要在子线程中执行
     *
     * @param path 音频路径,只支持WAV格式
     * @param type 变声音效类型,默认=0即普通播放无变声效果
     */
    external fun playSound(path: String, type: Int = MODE_NORMAL): Int

4.变声保存

    /**
     * 变声保存,耗时,需要在子线程中执行
     *
     * @param path 音频路径,只支持WAV格式
     * @param type 变声音效类型,默认=0即普通播放无变声效果
     * @param savePath 变声后保存的路径,输出为WAV格式
     */
    external fun saveSound(path: String, type: Int, savePath: String): Int

    /**
     * 变声保存
     * @param path 音频路径,只支持WAV格式
     * @param type 变声音效类型,默认=0即普通播放无变声效果
     * @param savePath 变声后保存的路径,输出为WAV格式
     * @param listener 变声结果监听,根据回调可以在变声成功后播放
     */
    fun saveSoundAsync(path: String, type: Int, savePath: String, listener: ISaveSoundListener? = null) {
        try {
            if (isPlaying()) {
                stopPlay()
            }
            val result = saveSound(path, type, savePath)
            if (result == 0) {
                listener?.onFinish(path, savePath, type)
            } else {
                listener?.onError("error")
            }
        } catch (e: Exception) {
            listener?.onError(e.message)
        }
    }
Clone this wiki locally