我已经在我的应用程序中实现了来自华为 ML Kit 的设备上 TTS,它运行良好。现在我想找出合成音频的持续时间。例如,我想在播放音频时显示剩余时间。
我尝试将生成的音频fragments
从回调写入.pcm
文件
override fun onAudioAvailable(
taskId: String?,
audioFragment: MLTtsAudioFragment?,
offset: Int,
range: android.util.Pair<Int, Int>?,
bundle: Bundle?
) {
if (taskId != null) {
if (audioFragment != null) {
val fileName = "audio.pcm"
writeToFile(audioFragment.audioData, fileName, true)
}
}
}
fun writeToFile(buffer: ByteArray?, strFileName: String?, append: Boolean) {
if (speechFile == null) {
val pcmFileDir: File = view.getExternalFilesDir("/PCM")!!
speechFile = File(pcmFileDir, strFileName)
}
var raf: RandomAccessFile? = null
var out: FileOutputStream? = null
try {
if (append) {
raf = RandomAccessFile(speechFile, "rw")
speechFile?.length()?.let { raf.seek(it) }
raf.write(buffer)
} else {
out = FileOutputStream(speechFile)
out.write(buffer)
out.flush()
}
} catch (e: IOException) {
e.printStackTrace()
} finally {
try {
raf?.close()
out?.close()
} catch (e: IOException) {
e.printStackTrace()
}
}
}
并以这种方式获得持续时间,但 AndroidMediaPlayer.getDuration()
似乎不适用于.pcm
文件。
有没有更好的方法来获取音频的持续时间?如果没有,那么是否可以以.pcm
某种方式计算文件的持续时间?