18

一般的に、私はAndroidのデフォルトのテキスト読み上げエンジン(つまり、com.svox.pico)に非常に感銘を受けています。予想通り、(私と同じように)いくつかの単語の発音を間違えるため、発音のガイダンスが必要になる場合があります。ですから、picoTTSエンジンが誤って発音している単語を音声で綴るベストプラクティスについて疑問に思っています。

たとえば、鳥Chachalacaの正しい発音はCHAH-chah-LAH-kahです。TTSエンジンが生成するものは次のとおりです。

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

これが私の質問です。

  • Android TTSエンジンで認識される標準の音声スペルはありますか?
  • そうでない場合、将来のTTSエンジン/バージョンでスペルが正しい可能性が高くなるカスタム発音スペルを作成するための一般的なルールはありますか?
  • AndroidTTSエンジンはテキストの大文字小文字を無視しているようです。強調を指定する最良の方法は何ですか?

ちなみに、これはTTSエンジンがlogcatに書き込むものです。

V / TtsService(294):TTS処理:CHAH chah LOCKah
V / TtsService(294):TtsService.setLanguage(eng、USA、)
I / SVOX Pico Engine(294):言語は既にロードされています(en-US == en-US )
I / SynthProxy(294):発話速度を100に設定
I / SynthProxy(294):ピッチを100に設定

[アップデート]

次のように、XMLドキュメントをTextToSpeech.speak()に渡してみました。

            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);

Android Eveが示唆したように、TTSエンジンはXML本体(つまり、大型車と巨大な銀行口座に関するコメント)のみを読み取ります。TTSエンジンがXMLドキュメントを解析できることに気づいていませんでした。ただし、TTS出力の強調は聞こえませんでした。

[更新2]

ここでは、AndroidTTSが音声合成マークアップ言語をサポートしているかどうかという質問を簡略化しました。

4

2 に答える 2

9

JW は、 tts-for-androidグループで私の質問に答えました。

こんにちはグレッグ、

Pico エンジンは、XSAMPA アルファベットのタグを認識します。

正書法から特定の発音を導き出すための簡単なルールはありませんが、直感的なスペルと試行錯誤を使用できます。大文字とハイフンは、解決するよりも多くの問題を引き起こします。異なるスペルを使用し、余分な単語境界 (スペース) を導入するとうまくいく場合があります。

強調タグと感嘆符は、合成結果を変更しません。、、およびコマンドを代わりに使用してください。


SSML音素タグを使用して発音を指定するための適切な構文の例は、 TextToSpeechのこれらのテストにあります。

これらの単純なテスト用 SSML ドキュメントでも、logcat には、SSML ドキュメントが整形式でないという警告メッセージが投稿されます。そこで、これらの一見正しくない logcat メッセージに関するイシューをAndroid イシュー トラッカーにオープンしました。


x-SAMPA シーケンスを SVOX pico に指定するための構文は次のとおりです。

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

より多くの例が役立ちますが、x-SAMPA の適切なリファレンスはhttp://en.wikipedia.org/wiki/Xsampa にあります。数十の例をコンパイルしたら、Wikipedia のページに投稿します。

于 2010-09-05T21:26:49.760 に答える
1

3 つの質問すべてに対する 1 つの答え: SSML 仕様を見てください: http://www.w3.org/TR/speech-synthesis/

たとえば、強調を指定するには、emphasis要素を使用します。

<?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>
于 2010-08-17T00:25:11.790 に答える