Pepper やNaoで使用されているNaoqi OSのメモです。

NAOqi Audio - 概要 | API | チュートリアル


このチュートリアルではどのように文章を読んだり、音声に対する操作を変更したり、言語や音声合成エンジンを変更したりするかを説明します。
📝メモ
The tutorial is written in Python.

モジュールにプロキシをつくる



TTSコマンドを使う前にTTSモジュールにプロキシをつくる必要があります。

# 言語音声モジュールにプロキシをつくる
#Creates a proxy on the text-to-speech module
from naoqi import ALProxy

IP = "<IP ADDRESS>"
tts = ALProxy("ALTextToSpeech", IP, 9559)

String型のテキストを読む


say機能を利用することで文章を読み上げることが可能です。

# Example: Sends a string to the text-to-speech module
#例:string型を言語音声モジュールに送信する
tts.say("Hello World!")

変更速度

APIが音声の速度にいくつかの変更を加えることが可能である。例えば、
tts.setParameter("speed", 200)

詳しくはALTextToSpeechProxy::setParameterを参照してください。デフォルトの速度値に戻すには、

tts.setParameter("speed", 200)
tts.resetSpeed()
デフォルトの速度値を変えるには、
tts.setParameter("defaultVoiceSpeed", 200)
デフォルトの速度値を変更する際に現在の速度値もリセットされます。

デフォルトの速度値の変更は永続的なものではありません。別の言語に切り替えてまた戻した際、デフォルトの速度値は100に戻ります。特定の値を維持したい場合、言語パッケージに格納されているvoiceSettings.xmlファイルに以下を加えてください。
<Setting name="defaultVoiceSpeed" description="Voice speed" value="150.0"/>
この値はこの言語が使用される度にロードされます。

ピッチの変更

APIが音声のピッチの変更も可能にします、例えば、
tts.setParameter("pitchShift", 1.1)
このコマンドはメインの音声のピッチをあげます。1.1という値は元の音声の周波数と処理された音声の周波数の比率です。

Double voiceパラメータの変更

double voiceレンダリングは3つのパラメータを使って変更できます。

doubleVoice:元の音声の周波数と処理された音声の周波数の比率
doubleVoiceLevel:最初の音声と2番目の音声の大きさの比率
doubleVoiceTimeShift:最初の音声と2番目の音声の時間シフトの比率
例えば以下のコマンドを用いてロボット的な音声を生成することができます。

tts.setParameter("doubleVoice", 1)
tts.setParameter("doubleVoiceLevel", 0.5)
tts.setParameter("doubleVoiceTimeShift", 0.1)
tts.setParameter("pitchShift", 1.1)

合成エンジンの言語の変更

合成エンジンの言語はsetLanguage機能を使って変更することができる。使用できる言語のリストはgetAvailableLanguages機能で得ることができます。
# Example: set the language of the synthesis engine to English:
tts.setLanguage("English")

合成エンジンの音声の変更

setVoice機能で合成エンジンの音声を変更することもできます。getAvailableVoices機能で使用することのできる音声が得られます。音声を変更する際、現在の言語は音声に対応した言語に自動的に変更されます。
# Example: use the voice of Kenny:
tts.setVoice("Kenny22Enhanced")

音声調節にタグを使用

すべてのエンジンで使用可能
アプリの文脈に対する発音の変更には異なるタグが用意されています。言語パッケージのエンジンによって使用可能なタグは異なります。

ピッチの変更
すべてのエンジンで使用可能

Insert \\vct=value\\ in the text. The value is between 50 and 200 in %. Default value is 100.

# Say the sentence with a pitch of +50%
tts.say("\\vct=150\\Hello my friends")
会話速度の変更
すべてのエンジンで使用可能
Insert \\rspd=value\\ in the text. The value between 50 and 400 in %. Default value is 100.
# Say the sentence 50% slower than normal speed
tts.say("\\rspd=50\\hello my friends")

間の挿入
すべてのエンジンで使用可能

Insert \\pau=value\\ in the text. The value is a duration in msec.

# Insert a pause of 1s
tts.say("Hello my friends \\pau=1000\\ how are you ?")

音量の変更

すべてのエンジンで使用可能

Insert \\vol=value\\ in the text. The value is between 0 and 100 in %. Default value is 80. Values > 80 can introduce clipping in the audio signal.
# Say the sentence with a volume of 50%
tts.say("\\vol=50\\Hello my friends")

ブックマークの挿入
すべてのエンジンで使用可能

このタグは会話と特定のロボットの動きを同期させたいときに非常に便利です。

Insert \\mrk=value\\ in the text. The value is between 0 to 64535.

The value will be raised in the “ALTextToSpeech/CurrentBookMark” event of ALMemory.
tts.say("\\mrk=0\\ I say a sentence.\\mrk=1\\ And a second one.")
連続した制御をデフォルトにリセットします
すべてのエンジンで使用可能。

Insert \\rst\\ in the text.
tts.say("\\vct=150\\\\rspd=50\\Hello my friends.\\rst\\ How are you ?")
Nuanceのみ
音韻韻律境界の種類を設定

Nuanceパッケージでのみ使用可能

テキストに \\bound=value\\ を挿入します。値に代入可能なのは、

・W: 音韻韻律境界が弱め
・S: 音韻韻律境界が強め
・N: 音韻韻律境界なし
//# Say the sentence with a weak phrase boundary (no silence in speech)
#音韻韻律境界弱めで文を発話します(会話中の間はなし)

# 
tts.say("\\bound=W\\ Hello my friends")
//# Say the sentence with a strong phrase boundary (silence in speech)
#音韻韻律境界を強めで文を発話します(会話中の間あり)
tts.say("\\bound=S\\ Hello my friends")

単語の頻出度を設定します
Nuance パッケージのみ対象

\\emph=value\\ をテキストに挿入します。値に代入可能なのは、

・0: 弱める
・1: 強調します
・2: アクセントをつける
tts.say("Hello my \\emph=0\\ friends") # 弱めます
tts.say("Hello my \\emph=1\\ friends") # 強調します
tts.say("Hello my \\emph=2\\ friends") # アクセントをつける

文末検知を制御します
Nuanceパッケージのみ利用可能

\\eos=value\\ をテキストに挿入します。代入可能な値は、

・0: 文と文の間をつめる
・1: 文と文の間を設ける
Warning
must appear immediately after the symbols that triggers the break

tts.say("Hello my friends.\\eos=0\\How are you ?") # no break
tts.say("Hello my friends.\\eos=1\\How are you ?") # break
read modeの制御
Nuanceパッケージのみ使用可能

\\readmode=value\\をテキストに挿入します。代入可能な値は、

・sent: Sentence mode (デフォルト)
・char: Character mode (綴りの読み上げに近い)
・word: Word-by-word mode
tts.say("\\readmode=sent\\ Hello my friends")
tts.say("\\readmode=char\\ Hello my friends")
tts.say("\\readmode=word\\ Hello my friends")

テキストの正規化のガイド
Nuanceパッケージのみ利用可能

\\tn=value\\をテキストに挿入します。代入可能な値は、

・spell: 入力されたテキストの綴りの読み出しを開始します
・address: 続くテキストをアドレスとして拡張します
・sms: 続くテキストをSMSメッセージとして拡張します
・normal: 通常のテキストへの正規化へリセットします

tts.say("\\tn=address\ 244 Perryn Rd Ithaca, NY \\tn=normal\\ That’s spelled \\tn=spell\\ Ithaca \\tn=normal\\.")
tts.say("\\tn=sms\\ Carlo, can u give me a lift 2 Helena's house 2nite? David \\tn=normal\\")
spelling pause durationを設定します

Nuanceパッケージのみ利用可能

\\spell=value\\ をテキストに挿入します。値はミリ秒単位の字間です。

tts.say("\\tn=spell\\hello")
tts.say("\\tn=spell\\\\spell=2000\\hello")
sentence pause durationの終わりを設定します
Nuanceパッケージのみ利用可能です
\\wait=value\\をテキストに挿入します。値は0と9の間で、実際の間はその値に200ミリ秒を乗算したものになります。

tts.say(“\\wait=2\\ There will be a short wait period after this sentence. \\wait=9\\ This sentence will be followed by a long wait period. Did you notice the difference?”)
ディジタル音声録音を挿入してます
Nuanceパッケージのみ利用可能です

\\audio=path\\をテキストに挿入します。パスはロボットの中の音声ファイルへのパスです。

Warning
The audio file must be a WAV file that contains linear 16-bit PCM samples at 22050Hz

tts.say("\\audio=\"/usr/share/naoqi/wav/0.wav\"\\")
表音テキストを挿入します
Nuanceパッケージのみ利用可能です

デフォルトではNuanceエンジンは入力を綴りの正しいものとして判断しますが、それと同時に他の表音テキストにも対応しています。 \toi=value\ というタグは制御配列の後に始まる入力の種類を区別します。

・lhp: Phonetic text in the phonetic alphabet L&H+ (Nuance specific alphabet).
・orth: Orthographic text (default)
備考:入力の種類をリセットしたい場合は、単語の後ろに\toi=orth\を挿入することを忘れないでください

tts.setLanguage("English")
tts.say("\\toi=lhp\\‘zi.R+o&U \\toi=orth\\")
# Same as
tts.say("zero")

声のスタイルを変化させる
中国語、英語、フランス語のNuanceパッケージのみ利用可能

\\style=value\\をテキストに挿入します。代入可能な値は、

・ニュートラル (デフォルト)
・楽しげ
・説教的な
備考:声のスタイルを変えた場合、次の文にもそのスタイルは適用されます。

tts.say("\\style=joyful\\ Today I am feeling happy.")
tts.say("And now I speak with a joyful voice.")
tts.say("\\style=didactic\\ I can explain you how my ears work.")
tts.say("And now I speak with a didactic voice.")
tts.say("\\style=neutral\\ Everything is normal.")
tts.say("And now I speak with a neutral voice.")

AiTalkのみ

単語の頻出度を設定します
AiTalkパッケージのみで利用可能

\emph=value\\をテキストに挿入します。値は0から200の間で単位は%です。デフォルトの値は100です。

tts.say("こんにちは\\emph=200\\マスター。\\emph=100\\")
声を大きくします
Language Japaneseパッケージのみで利用可能

音声圧縮を有効にするために、enableCompressionのパラメータを設定します。これで声を大きくなります。

tts.say("こんにちは!普通の声で話す!")
tts.setParameter("enableCompression",True)
tts.say("こんにちは!大きいな声で話す!")

Acapelaのみ

アカペラに関する特定のタグについての詳細は、以下を参照してください。

Acapela Mobility Text TAGS Documentation

コメントをかく


ユーザーIDでかく場合はこちら

画像に記載されている文字を下のフォームに入力してください。

「http://」を含む投稿は禁止されています。

利用規約をご確認のうえご記入下さい

×

この広告は60日間更新がないwikiに表示されております。

Menu

NAOqi - Developer guide

Creating an application?

Programming for a living robot?

Other tutorials?

Choregraphe Suite?

どなたでも編集できます