首页 > 解决方案 > Android Text to Speech相对于时间的控制率

问题描述

您好,出于某些原因,我需要根据时间值控制 TTS 速率因子,例如我知道如何设置简单的 TTS,例如以下代码

TextToSpeech tts = new TextToSpeech(this, this);
tts.setLanguage(Locale.US);
tts.speak("Wow I am working", TextToSpeech.QUEUE_ADD, null);

并控制我们可以使用的文本语速,setSpeechRate(value)例如

tts.setSpeechRate(2.0) //doubles the normal speed

但我无法暗示一种方法,以便应根据时间因素计算速率,例如 10 秒,因此该短语应在指定时间内以语音完成。

标签: javaandroidkotlintext-to-speech

解决方案


如果这些是您唯一的规范,您可以使用 tts.synthesizeToFile() 并将输出保存在 filesdir 内的某个位置,然后使用 MediaMetadataRetriever 告诉您它在速度等级 1 下有多长时间。然后只需将持续时间除以您想要的时间长度是,那是你的新规模。

编辑:

用于创建合成文件:

val sentence="this is sample text"
val f = File(filesDir, "ttstemprecord")
val b = Bundle()
tts.synthesizeToFile(sentence, b, f, "")

为了获得持续时间:

val soundPath=getFilesDir().absolutePath + "ttstemprecord"
val mmr= MediaMetadataRetriever()
mmr.setDataSource(soundPath)  dur=Integer.parseInt(mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DURATION))

对于速度:

val speed=dur/durationThatIWant

推荐阅读