おしゃべりアニメーション

おおまかには、以下のような流れでおしゃべり時のポーズや表情が決定されます。

Liplisおしゃべりフロー Liplisおしゃべりフロー

① ニュースの読み込み
ニュースの文章を取得します。
 
 
② 単語分解, ③感情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:「うれしい」の場合に選択される定義を見ると、
以下のようになります。

    <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つの画像ファイルが記述されているのが分かります。
これは、口パク、まばたたきの状態を表した画像になっています。

口パク、まばたきを表すために以下のように画像を定義しています。

6目 : 閉じ口 : 開き
2目 : 開き口 : 開き
3目 : 半目口 : 閉じ
4目 : 半目口 : 開き
5目 : 閉じ口 : 閉じ
6目 : 閉じ口 : 開き

おしゃべり、まばたきの状態によって、表示される画像を決定しています。

おしゃべり中は口パク状態、瞬き状態が常に変化するため、6つの画像がぐるぐるまわって
アニメーションします。

感情が違う単語が読まれると、別の感情の画像が読み込まれる、といった具合です。