VOICEROID2の読み仮名(AIKANA)表現

まえがき

以前、VOICEROID2をHTTPサーバー化するプログラムvoiceroid_daemonを公開しました。
しかしながらASP.NETを使ってみたかったためこれを全面的に書き直し、VoiceroidDaemonというプログラムとして仕上げました。
リポジトリのURLは変わらず
https://github.com/Nkyoku/voiceroid_daemon
です。

さて、VOICEROID、というかAITalkでは文章の音声変換をする際に
文章→読み仮名(AIKANA)→音声という手順を経て変換を行います。
文章を構文解析し区切りを認識、カタカナに変換しアクセント記号などを付与したものがAIKANAになります。
文章→AIKANA変換の様子はエディタからも確認できます。
VoiceroidDaemonでは文章→AIKANA、AIKANA→音声への変換も個別に実行可能です。
これにより発声を細かく制御できます。

AIKANA構文

以下の情報は公式なものではなく、間違いが含まれていかもしれません。
開始記号 "<S>"
終端符号 "<F>"
句点で分割された一つ一つの文は開始記号"<S>"と終端記号"<F>"で囲まれます。
文と文の間には文末ポーズ(PauseSentence)が挿入されます。
アクセント記号 "^", "!" "^"は次の文字から上がることを表します。
"!"は次の文字から下がることを表します。
区切り記号 "|0", "$1_1", "$2_2" "|0"は文節の区切りを表します。ポーズ時間はありません。
"$1_1"は短ポーズ(PauseMiddle)を表します。
"$2_2"は長ポーズ(PauseLong)を表します。
文章をAIKANAに変換する際、読点は長ポーズに変換されます。
任意長ポーズ記号 "$1(Pau MSEC=?)" "?"に任意の数値を入れることで任意の長さのポーズが挿入できます。
音量記号 "(Vol ABSLEVEL=?)" 読み上げの途中で音量を変化させます。
"?"には0.0から2.0までの数値が入ります。
話速記号 "(Spd ABSSPEED=?)" 読み上げの途中で話速を変化させます。
"?"には0.5から2.0までの数値が入ります。
ピッチ記号 "(Pit ABSLEVEL=?)" 読み上げの途中でピッチを変化させます。
"?"には0.5から2.0までの数値が入ります。
抑揚記号 "(EMPH ABSLEVEL=?)" 読み上げの途中で抑揚を変化させます。
"?"には0.0から2.0までの数値が入ります。
割り込み記号 "(Irq MARK=?)" "?"には再生開始位置や自動ブックマークの情報が入ります。
"?"内が"_AI@〇〇"といった表記のとき、これは自動ブックマークを示します。

アクセント記号によって設定できるアクセントの型には以下のパターンがあります。
無アクセント "^コンニチワ"
頭高型 "^コン!ニチワ"
中高型 "コ^ンニチ!ワ"
尾高型 "コン^ニチワ"

自動ブックマークとは入力された文章の文節の位置が変換後の音声のどの位置にあたるのかを対応付けるために使用される機能です。
VOICEROID2エディタにおいてこの機能は読み上げ中の文節のハイライトとキャラクターのリップシンクに利用されています。
自動ブックマークは割り込み記号"(Irq MARK=_AI@?)"で表されます。
"?"にはそれぞれの文節が終了する文字の位置の数字が入ります。
例えば、"こんにちは"という文章をAIKANA変換すると
"<S>(Irq MARK=_AI@5)コ^ンニチワ<F>"
と出力されます。
これは、今から始まる文節が元の文章でいえば5文字目で終了することを示しています。

発音イベント

音声変換の際にも自動ブックマークの情報は音声の再生位置とともに出力されます。
また、それ以外に発音記号も出力されますので、これを利用すれば完全なリップシンクも可能でしょう。
VoiceroidDaemonにおいては出力されるWAVEファイルの"phon"チャンクにこれら発音イベントの情報がJSON形式で格納されています。
JSONは以下に示す辞書の配列となっています。
{
  "Tick":<再生位置[ms]を示す整数値>,
  "Value":<値を示す文字列>,
  "Type":<種類を示す文字列>
}

Typeフィールドの値によってValueの意味は異なります。
"Phonetic" 発音イベントを表します。
Tickは発音の起きた時刻、
Valueには発音記号が格納されます。
"Bookmark" 不明
"AutoBookmark" 自動ブックマークを表します。
Tickは文節の始まる時刻、
Valueには文節の終了する文字位置の整数値が文字列として格納されます。

0 件のコメント :

コメントを投稿