1

我已经在我的应用程序中实现了来自华为 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某种方式计算文件的持续时间?

4

0 回答 0