top of page

Java Script内でタイマー処理で母音を口パク

執筆者の写真: snackvirtualsnackvirtual

  1. htmlのテキストボックスから、Vueを経由して、Java scriptに入力文章が送られる

  2. これがJava scriptからPythonに送られ、言語処理をしてひらがなの返答を生成する

  3. これをCeVIOに入力し、発音のローマ字列とタイミングテーブルを得る

  4. 発音のローマ字列とタイミングテーブルをJava Scriptに渡し、口パクを実行する

  5. と同時にCeVIOで発声する

  6. と同時に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);
    }
  }

こんな感じとなった



閲覧数:1回0件のコメント

最新記事

すべて表示

Comments


bottom of page