Dev-C++ кровопролития является лучшим IDE C/C++ окон IMO: http://www.bloodshed.net/ Это использует набор компилятора GNU и свободно как в пиве.
РЕДАКТИРОВАНИЕ: страница загрузки для IDE здесь: http://www.bloodshed.net/dev/devcpp.html
Я использовал разбиение строки и использовал playsilence (), как показано ниже:
public void speakSpeech(String speech) {
HashMap<String, String> myHash = new HashMap<String, String>();
myHash.put(TextToSpeech.Engine.KEY_PARAM_UTTERANCE_ID, "done");
String[] splitspeech = speech.split("\\.");
for (int i = 0; i < splitspeech.length; i++) {
if (i == 0) { // Use for the first splited text to flush on audio stream
textToSpeech.speak(splitspeech[i].toString().trim(),TextToSpeech.QUEUE_FLUSH, myHash);
} else { // add the new test on previous then play the TTS
textToSpeech.speak(splitspeech[i].toString().trim(), TextToSpeech.QUEUE_ADD,myHash);
}
textToSpeech.playSilence(750, TextToSpeech.QUEUE_ADD, null);
}
}
При отсутствии опции паузы вы можете добавить тишину на время, когда вы хотите отложить выступление TTS Engine. Это, конечно, должно быть предопределенной «паузой» и не поможет, например, включить функцию кнопки паузы.
Для API < 21: public int playSilence (long durationInMs, int queueMode, параметры HashMap)
Для> 21: public int playSilentUtterance (long durationInMs, int queueMode, String utteranceId)
Не забудьте использовать TextToSpeech.QUEUE_ADD , а не TextToSpeech.QUEUE_FLUSH , иначе это очистит ранее начатую речь.
Кроме того, экранированная кавычка (\ "), кажется, также несколько останавливает ее - по крайней мере, если вы поместите ее вокруг слова, это добавляет пробел вокруг слова.
Я использовал другой подход.
код Котлина:
class VoiceService {
private lateinit var textToSpeech: TextToSpeech
var sentenceCounter: Int = 0
var myList: List<String> = ArrayList()
fun resume() {
sentenceCounter -= 1
speakText()
}
fun pause() {
textToSpeech.stop()
}
fun stop() {
sentenceCounter = 0
textToSpeech.stop()
}
fun speakText() {
var myText = "This is some text to speak. This is more text to speak."
myList =myText.split(".")
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
textToSpeech.speak(myList[sentenceCounter], TextToSpeech.QUEUE_FLUSH, null, utteranceId)
sentenceCounter++
} else {
var map: HashMap<String, String> = LinkedHashMap<String, String>()
map[TextToSpeech.Engine.KEY_PARAM_UTTERANCE_ID] = utteranceId
textToSpeech.speak(myList[sentenceCounter], TextToSpeech.QUEUE_FLUSH, map)
sentenceCounter++
}
}
override fun onDone(p0: String?) {
if (sentenceCounter < myList.size) {
speakText()
} else {
speakNextText()
}
}
}