-
Notifications
You must be signed in to change notification settings - Fork 20
FmodSound
DeMon edited this page Aug 26, 2021
·
4 revisions
完整的示例代码,请参见:SoundFmodActivity.kt
//音效的类型
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 //恐怖
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
//初始化
FMOD.init(this)
}
override fun onDestroy() {
super.onDestroy()
//释放
FMOD.close()
}
/**
* 变声并播放,耗时,需要在子线程中执行
*
* @param path 音频路径,只支持WAV格式
* @param type 变声音效类型,默认=0即普通播放无变声效果
*/
external fun playSound(path: String, type: Int = MODE_NORMAL): Int
/**
* 变声保存,耗时,需要在子线程中执行
*
* @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)
}
}