java - 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 秒,因此该短语应在指定时间内以语音完成。
解决方案
如果这些是您唯一的规范,您可以使用 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
推荐阅读
- c# - CSVHelper:在抛出 BadDataException 时记录错误
- sql - 我在 Oracle Apex 中开发的系统有问题
- linux - 安装`gdebi`但出现错误`linux-image-generic-hwe-16.04:取决于:linux-image-4.15.0-76-generic,但不会安装`
- c# - 额外属性不刷新
- javascript - ReactJs 记录收到的道具数组显示空数组
- snowflake-cloud-data-platform - Snowflake 的 Tableau 增量刷新
- node.js - 如何从 NodeJS 流转换阶段发出多个对象
- algorithm - 在计算时间复杂度的过程中删除不太重要的项?
- java - 如何更新 SSL 证书 - 在 java 中使用 TLS1.2 的 bouncycastle
- mysql - 根据不同的项目类别为每个项目插入MYSQL