你好,由于某些原因,我需要根据时间值控制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秒,所以这个短语应该在指定的时间内完成语音。
如果这些是您唯一的规范,您可以使用tts.synthesizeToFile()并将输出保存在filesdir中的某个地方,然后使用mediametadataretriiever告诉您它在速度刻度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