18 Stimmen

Beste Praxis für die Angabe der Aussprache für die Android-TTS-Engine?

Im Allgemeinen bin ich sehr beeindruckt von der Standard-Text-to-Speech-Engine von Android (d. h. com.svox.pico). Wie erwartet, spricht sie einige Wörter falsch aus (genau wie ich) und benötigt daher gelegentlich eine Aussprachehilfe. Ich frage mich also, wie man die Wörter, die die pico TTS-Engine falsch ausspricht, am besten phonetisch buchstabiert.

Die korrekte Aussprache des Vogels Chachalaca ist zum Beispiel CHAH-chah-LAH-kah. Dies ist das Ergebnis der TTS-Engine:

mTts.speak("Chachalaca", TextToSpeech.QUEUE_ADD, null); // output: chuh-KAL-uh-KUH
mTts.speak("CHAH-chah-LAH-kah", TextToSpeech.QUEUE_ADD, null); // output: CHAH-chah-EL-AY-AYCH-dash-kuh
mTts.speak("CHAHchahLAHkah", TextToSpeech.QUEUE_ADD, null); // output: CHA-chah-LAH-ka
mTts.speak("CHAH chah LOCKah", TextToSpeech.QUEUE_ADD, null); // output: CHAH-chah-LAH-kah

Hier sind meine Fragen.

**

  • Gibt es eine standardmäßige phonetische Schreibweise, die von der Android-TTS-Engine erkannt wird?
  • Wenn nicht, gibt es einige allgemeine Regeln für die Erstellung von benutzerdefinierten Ausspracheschreibweisen, die es wahrscheinlicher machen, dass die Schreibweisen in zukünftigen TTS-Engines/Versionen korrekt sind?
  • Es scheint, dass die Android-TTS-Engine die Groß- und Kleinschreibung ignoriert. Wie kann man die Betonung am besten festlegen?

**

Das ist übrigens das, was die TTS-Engine in logcat schreibt:

V/TtsService( 294): TTS-Verarbeitung: CHAH chah LOCKah
V/TtsService( 294): TtsService.setLanguage(eng, USA, )
I/SVOX Pico Engine( 294): Sprache bereits geladen (en-US == en-US)
I/SynthProxy( 294): Einstellung der Sprechgeschwindigkeit auf 100
I/SynthProxy( 294): Tonhöhe auf 100 setzen

[UPDATE]

Ich habe versucht, ein XML-Dokument wie folgt an TextToSpeech.speak() zu übergeben:

            String text = "<?xml version=\"1.0\"?>" +
                "<speak version=\"1.0\" xmlns=\"http://www.w3.org/2001/10/synthesis\" " +
                    "xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" " +
                    "xsi:schemaLocation=\"http://www.w3.org/2001/10/synthesis " +
                        "http://www.w3.org/TR/speech-synthesis/synthesis.xsd\" " +
                    "xml:lang=\"en-US\">" +

                    "That is a big car! " +
                    "That <emphasis>is</emphasis> a big car! " +
                    "That is a <emphasis>big</emphasis> car! " +
                    "That is a huge bank account! " +
                    "That <emphasis level=\"strong\">is</emphasis> a huge bank account! " +
                    "That is a <emphasis level=\"strong\">huge</emphasis> bank account!" +
                "</speak>";
            mTts.speak(text, TextToSpeech.QUEUE_ADD, null);

Wie von Android Eve vorgeschlagen, las die TTS-Engine nur den XML-Körper (d. h. die Kommentare über das große Auto und das riesige Bankkonto). Ich wusste nicht, dass die TTS-Engine in der Lage ist, XML-Dokumente zu parsen. Ich habe jedoch keine Betonung in der TTS-Ausgabe gehört.

[UPDATE 2]

Ich habe die Frage dahingehend vereinfacht, ob Android TTS die Speech Synthesis Markup Language unterstützt oder nicht aquí .

9voto

gregS Punkte 2550

JW beantwortete meine Frage in der tts-for-Android Gruppe:

Hallo Greg,

Die Pico-Engine erkennt den Tag anhand des XSAMPA-Alphabets.

Es gibt keine einfachen Regeln, um eine bestimmte Aussprache aus der Orthographie abzuleiten, aber Sie können intuitive Schreibweisen und Versuch und Irrtum verwenden. Großschreibung und Bindestriche bringen mehr Probleme mit sich, als sie zu lösen. Die Verwendung verschiedener Schreibweisen und die Einführung zusätzlicher Wortgrenzen (Leerzeichen) kann funktionieren.

Das Hervorhebungs-Tag und das Ausrufezeichen verändern das Syntheseergebnis nicht. Verwenden Sie stattdessen , , und Befehle.


Einige Beispiele für die korrekte Syntax zur Angabe der Aussprache unter Verwendung des SSML-Phonem-Tags finden sich in diesen Tests von TextToSpeech .

Selbst bei diesen einfachen Test-SSML-Dokumenten gibt es Warnmeldungen in logcat, dass das SSML-Dokument nicht wohlgeformt ist. Daher habe ich ein Problem mit diesen scheinbar falschen Logcat-Meldungen in der Android Issue Tracker .


Die Syntax für die Angabe einer x-SAMPA-Sequenz an SVOX pico lautet

String text = "<speak xml:lang=\"en-US\"> <phoneme alphabet=\"xsampa\" ph=\"d_ZIn\"/>.</speak>";
mTts.speak(text, TextToSpeech.QUEUE_ADD, null); 

Obwohl mehr Beispiele hilfreich wären, findet sich eine gute Referenz für x-SAMPA unter http://en.wikipedia.org/wiki/Xsampa Wenn ich ein paar Dutzend Beispiele gesammelt habe, werde ich sie auf dieser Wikipedia-Seite veröffentlichen.

1voto

Android Eve Punkte 14674

Eine Antwort für alle 3 Fragen: Sehen Sie sich die SSML-Spezifikationen an: http://www.w3.org/TR/speech-synthesis/

Um zum Beispiel die Betonung festzulegen, verwenden Sie die Schwerpunkt Element, z.B.

<?xml version="1.0"?>
<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://www.w3.org/2001/10/synthesis
                   http://www.w3.org/TR/speech-synthesis/synthesis.xsd"
         xml:lang="en-US">
  That is a <emphasis> big </emphasis> car!
  That is a <emphasis level="strong"> huge </emphasis>
  bank account!
</speak>

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X