2015-02-07 1 views
14

У меня есть класс, который использует Android TTS API для транскрипции текста в аудио. Я могу контролировать шаг и скорость; но я заметил, что движок требует текстовую строку, а также хэш-объект. Я заметил, что некоторые слова произносятся слишком быстро, чтобы их легко распознать, а перегибы выглядят слишком противоестественными. Есть ли способ управлять этими двумя вещами? возможно через HashMap? Далее, как я использую двигатель:Как я могу контролировать, как Android TTS воспроизводит аудио?

mTts = new TextToSpeech(Globals.context, this); // context, listener 
} 

@Override 
public void onInit(int status) { 
    HashMap<String, String> myHashRender = new HashMap(); 
    myHashRender.put(TextToSpeech.Engine.KEY_PARAM_UTTERANCE_ID, speech); 
    mTts.setPitch(0.8f); 
    mTts.setSpeechRate(0.6f); 
    mTts.synthesizeToFile(speech, myHashRender, fileOutPath); 
    while (mTts.isSpeaking()) try { 
     Thread.sleep(100); 
    } catch (InterruptedException e) { 
     e.printStackTrace(); 
    } 
    mTts.stop(); 
    mTts.shutdown(); 
+0

Google TTS в настоящее время не поддерживает изменение перегибов и не поддерживает встроенные теги просодии, как определено в [SSML] (http://help.voxeo.com/go/help/xml.vxml.elements.prosody). Возможно, что другие TTS-модули поддерживают эти функции, но я ничего не знаю. – alanv

+0

Тогда почему метод принимает хэш-карту и строку? – motoku

+0

Есть параметры, которые вы можете установить, но ни один из них не контролирует перегиб или просодию на слово. – alanv

ответ

4

Google TTS в настоящее время не поддерживает, но вот то, что вы можете сделать: Во время разбора вашего текста, вы можете изменить его части, чтобы получить интонацию и интонацию вы хотите.

Например, если вы столкнулись с словом «Эй», вы переписываете его на лету в «Heeeey», прежде чем отправлять его на движок TTS, чтобы получить другое произносимое слово.

Это не очень, но это обходное решение.

+1

Вы также можете использовать TtsSpan для изменения метаданных, связанных с определенными словами. IIRC, это позволяет вам указывать явное произношение. – alanv

+0

Это была довольно старая нить. но Google TTS по-прежнему не поддерживает теги SSML, которые просматриваются во многих документах. Я попытался использовать некоторые теги. работает только . Интересно, не поддерживает ли ssml этот тег? –

3

Google TTS в настоящее время не поддерживает изменение перегиба, и не поддерживает тегов рядных просодий, как это определенно в SSML. - alanvJun 5 at 20:30

0

Google TTS в настоящее время не поддерживает изменение перегиба и не поддерживает встроенные теги просодии, как определено в SSML. Хотя есть параметры, которые вы можете установить, ни один из них не контролирует перегиб или просодию на слово.

Могут быть другие двигатели, которые поддерживают эти функции. eSpeak, например, поддерживает теги SSML и имеет порт Android, доступный в Play Маркете.