2015-02-07 15 views
14

Mam klasę, która używa interfejsu API systemu Android TTS do transkrypcji tekstu na dźwięk. Potrafię kontrolować wysokość i szybkość; ale zauważyłem, że silnik wymaga ciągu tekstowego, a także obiektu mieszającego. Zauważyłem, że niektóre słowa są wymawiane zbyt szybko, aby można je było łatwo rozpoznać, a fleksja wydaje się zbyt nienaturalna. Czy istnieje sposób, w jaki mogę kontrolować te dwie rzeczy; prawdopodobnie przez HashMap? Poniższy sposób używam silnika:Jak kontrolować sposób, w jaki Android TTS odtwarza dźwięk?

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 obecnie nie obsługuje zmiany fleksji ani nie obsługuje wbudowanych tagów prozdrowotnych zdefiniowanych w [SSML] (http://help.voxeo.com/go/help/xml.vxml.elements.prosody). Możliwe, że inne silniki TTS obsługują te funkcje, ale nie jestem tego świadomy. – alanv

+0

Dlaczego więc metoda przyjmuje hashmap i ciąg znaków? – motoku

+0

Istnieją parametry, które można ustawić, ale żaden z nich nie kontroluje prozodii typu fleksja lub słowo. – alanv

Odpowiedz

4

Google TTS obecnie nie obsługuje, ale tutaj jest to, co można zrobić: Podczas analizowania tekstu, można zmienić jego części, aby uzyskać intonację i przegięcie chcesz.

Na przykład, jeśli napotkasz słowo "Hej", przepisujesz je w locie na "Heeeey", zanim wyślesz je do silnika TTS, aby uzyskać inną wymowę.

To nie jest ładne, ale stanowi obejście tego problemu.

+1

Możesz także rozważyć użycie TtsSpan do zmiany metadanych powiązanych z określonymi słowami. IIRC, to pozwala ci na sprecyzowanie wymowy. – alanv

+0

to był dość stary wątek. ale Google TTS nadal nie obsługuje tagów SSML, jak przeszukiwane przez wiele dokumentacji. Próbowałem użyć tagów. działa tylko . Zastanawiam się, czy nie obsługuje ssml, jak działa ten tag? –

0

Google TTS obecnie nie obsługuje zmiany fleksji ani nie obsługuje wbudowanych tagów prozdrowotnych zdefiniowanych w SSML. Chociaż istnieją parametry, które można ustawić, żadna z nich nie kontroluje prozodii typu fleksja lub słowo.

Mogą być inne silniki, które obsługują te funkcje. Na przykład eSpeak obsługuje tagi SSML i udostępnia port Android w Sklepie Play.

Powiązane problemy