LiplisTalkingAnimation
おしゃべりアニメーション†
おおまかには、以下のような流れでおしゃべり時のポーズや表情が決定されます。
① ニュースの読み込み
ニュースの文章を取得します。
② 単語分解, ③感情ID、強度取得
ニュースデータを単語単位に分解します。
ニュースデータは以下の様な書式で送られてきます。
今日,0,0;は,0,0;晴れ,0,0;
文字と数字が混在していて、パッと見どのような情報か分からないかと思います。
コンマ区切りで1かたまりとなっています。これをたてに並べてみると・・・。
今日,0,0; は,0,0; 晴れ,0,0;
のようになります。
1つのかたまりがコンマ区切りで「単語+数字+数字」となっているかと思います。
これは、Liplisのおしゃべりに必要な感情メタデータとなります。以下のようになっています。
単語 , 感情ID , 感情強度
感情IDは、「うれしい」や「かなしい」等の感情に対応しています。
Liplisでは、感情IDに対応する感情と立絵を結びつけて、表情やポーズを表示しています。
感情ID、感情強度についての詳細は「LiplisEmotion」を参照してください。
④口調変換
口調変換を行います。
口調変換の詳細については「NoralisToneXml」を御覧ください。
⑤ おしゃべりアニメーション
感情IDと立絵画像画像ファイルの紐づけは「body.xml」で行っています。
たとえば感情ID:1,感情強度+1:「うれしい」の場合に選択される定義を見ると、
以下のようになります。
#sh(xml){{
<joy_p>
<emotion>joy_p</emotion>
<joy_p11>joy_p_1_1_1.png</joy_p11>
<joy_p12>joy_p_1_1_2.png</joy_p12>
<joy_p21>joy_p_1_2_1.png</joy_p21>
<joy_p22>joy_p_1_2_2.png</joy_p22>
<joy_p31>joy_p_1_3_1.png</joy_p31>
<joy_p32>joy_p_1_3_2.png</joy_p32>
</joy_p>
}}
データを見てみると、6つの画像ファイルが記述されているのが分かります。
これは、口パク、まばたたきの状態を表した画像になっています。
口パク、まばたきを表すために以下のように画像を定義しています。
1 | 目 : 開き | 口 : 閉じ |
2 | 目 : 開き | 口 : 開き |
3 | 目 : 半目 | 口 : 閉じ |
4 | 目 : 半目 | 口 : 開き |
5 | 目 : 閉じ | 口 : 閉じ |
6 | 目 : 閉じ | 口 : 開き |
おしゃべり、まばたきの状態によって、表示される画像を決定しています。
おしゃべり中は口パク状態、瞬き状態が常に変化するため、6つの画像がぐるぐるまわって
アニメーションします。
感情が違う単語が読まれると、別の感情の画像が読み込まれる、といった具合です。