htmlのテキストボックスから、Vueを経由して、Java scriptに入力文章が送られる
これがJava scriptからPythonに送られ、言語処理をしてひらがなの返答を生成する
これをCeVIOに入力し、発音のローマ字列とタイミングテーブルを得る
発音のローマ字列とタイミングテーブルをJava Scriptに渡し、口パクを実行する
と同時にCeVIOで発声する
と同時にhtmlに返し、ひらがなで返答を記述する
いまからやる部分は4.のJava script内の処理部分である
つまり、ローマ字列とタイミングテーブルから口パクを生成するところである
現在のlappmodel.ts内のkuchipaku_updateルーチンに
A,I,U,E,O,N(Nのみいくつか種類あり)を引数として、
パラメータ設定ルーチンを作る
lapplive2dmanager.ts上にローマ字列分解とタイミングを計りながら
上記ルーチンの呼び出しをするルーチンを形成する
本来はタイマー処理をして待ち時間を他の処理に回すべきかもしれないが、
そもそも発声時間は短いため、この間は単純なWaitとして発声スレッドだけを動かしてもいいかもしれない
まずは母音と口パクの設定だ
母音A: 口の変形=0.5、口の開閉=1.0
母音I: 口の変形=1.0、口の開閉=0.3
母音U: 口の変形=-1.0、口の開閉=0.3
母音E: 口の変形=0.0、口の開閉=0.6
母音O: 口の変形=0.0、口の開閉=0.3
母音N: 口の変形=0.0、口の開閉=0.0
としておこう
AIUEOの順で1秒ごとのWaitを付けて再生する
const _sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
model.kuchipaku_update("A");
await _sleep(2000);
model.kuchipaku_update("I");
await _sleep(2000);
model.kuchipaku_update("U");
await _sleep(2000);
model.kuchipaku_update("E");
await _sleep(2000);
model.kuchipaku_update("O");
await _sleep(2000);
model.kuchipaku_update("N");
エラーになったのでクイックフィックスさせたら、
public onTap(x: number, y: number): Promise<void> {
→
public async onTap(x: number, y: number): Promise<void> {
となった
動作自体はOK
この方法をモディファイしてまとめよう
/**
* //Hideo
* 口パクの母音列(AIUEON)とその長さ(小数で秒で示す)の行列をタイミングを合わせて実行する
*/
public async kuchipaku_sentense():Promise<void>{
var kuchipaku_boin = ["A","I","U","E","O","N"];
var kuchipaku_time = [1.0,0.5,1.0,0.5,1.0,0];
const model: LAppModel = this.getModel(0);
const _sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
for(var i = 0; i < kuchipaku_boin.length; i++){
model.kuchipaku_update(kuchipaku_boin[i]);
await _sleep(kuchipaku_time[i]*1000);
}
}
これをontap時のルーチンから呼び出して、動作OK
いい感じだ
変数を外に出して
kuchipaku_boin = ["A","I","U","E","O","N"];
kuchipaku_time = [1.0,0.5,1.0,0.5,1.0,0];
/**
* //Hideo
* 口パクの母音列(AIUEON)とその長さ(小数で秒で示す)の行列をタイミングを合わせて実行する
*/
public async kuchipaku_sentense():Promise<void>{
const model: LAppModel = this.getModel(0);
const _sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
for(var i = 0; i < this.kuchipaku_boin.length; i++){
model.kuchipaku_update(this.kuchipaku_boin[i]);
await _sleep(this.kuchipaku_time[i]*1000);
}
}
こんな感じとなった
Comments