Calleigh’s blog

幸せは毎日の食卓から

テキスト自動送りをオンにしている際、音声の途中で送らないようにする

この記事では、パートボイスのゲームを想定しています。

[voconfig]タグ等の使用により、#taroと記載するとそのキャラクターの音声が流れる

しかしながら、私は、何が何でも名前欄の苗字と名前の間に半角スペースを入れたい病患者なので#taroのタグは使えません。 calleigh.hatenablog.com

音声を[playse]タグで流す

[playse storage="xx.mp3" loop="false"]  

で普通に流れます。storageの場所は /data/sound/ です。

[autostart]またはデフォルトキーコンフィグでのaキーを押すとテキスト自動送りがオンになります。そうすると、デフォルトのテキスト表示速度だと音声の途中で次の台詞に変わってしまいます。
[wse]タグで再生完了を待つ、という方法もありますが、この場合、画面をクリックスマホであればタップ)しても次の台詞に移動せず、音声を聞きたいわけではないプレイヤーにとっては迷惑な仕様になります。正直、その瞬間ブラウザを閉じるレベルでうざいです。

一時的にテキスト表示速度を遅くして音声の再生が終わるタイミングと、テキスト自動送りのタイミングを(大体)合わせる

[delay speed="130"]   // テキスト表示速度を遅くする
[playse storage="xx.mp3" loop="false"]  // 音声をSEとして再生
[taro]    // 発言者太郎の名前とメッセージウィンドウを表示させるマクロ
ここに台詞[p]    // 流れてる音声の台詞文字+クリック待ち
[stopse]  // クリックすると音声が止まる
[resetdelay]  // 同時にテキスト表示速度がデフォルトに戻る
ここに次の台詞[p]

大体こんな感じになります。
テキストの表示が完了した途端に次のテキストが表示され始めるわけではなく、最後まで読めるように少し間を置いて切り替わります。そのため、「音声の再生が終わってもなかなかテキスト自動送りがされない」と感じさせないよう、テキストの表示の方が音声より多少早くなるようにしてあります。

こんなのをいちいち打っていられないのでマクロを作る
[macro name="voice"]  // voiceという名前のマクロを定義
    [delay speed="130"]    // テキスト表示速度を遅くする
    [playse storage="&mp.vf" loop="false"]
        // SE音として流す音声ファイルの指定
        // 音声なので繰り返して流れないようにする
[endmacro]    // マクロ voice の内容はここまで

[macro name="voice2"]  // マクロ voice2
    [playse storage="&mp.vf2" loop="false" clear="true"]
        // 実行時に流れているSE(音声)がある場合、それを止めてから再生する
[endmacro]

[macro name="voicestop"]   // マクロ voicestop
    [stopse]  // SE(音声)の再生を止める
    [resetdelay]  // テキスト表示速度をデフォルトに戻す
[endmacro]

実行するときはこんな感じ

[voice vf="taro/音声1.mp3"]
[taro]
台詞1[p]
[voice2 vf2="taro/音声2.mp3"]
台詞2[p]
[voice2 vf2="taro/音声3.mp3"]
台詞3[p]
[voicestop]
音声のない台詞1[p]
[voice vf="taro/音声4.mp3"]
台詞4[p]
[voicestop]

マクロ voice2 は、音声付きの台詞が続く場合のみ使用します。
音声付きの台詞が終了する時は、[resetdelay]のほかに[stopse]も入れておかないと、音声の途中でクリックして次の台詞に移動しても、なお音声が流れ続けます。短いタグ2つだけだから毎度書く方法でも平気だろうと思っていると、どちらか片方を書き忘れたりするので一つのマクロにしてしまう方が楽です。
演出によっては[stopse]を敢えて入れないのもありです。ただ、[stopse]を入れていない場合、メッセージスキップをしている時でも音声が流れてしまいます
[resetdelay]は絶対に入れる必要があります。入れなければずっとテキスト表示速度が遅いままになり、プレイヤーのストレスになります。
マクロ voice/2 にあるstorage="&mp.vf/2"の部分は、マクロ内でしか使用できない変数の型mpにvfという変数を定義し、実行時のvf="taro/音声1.mp3"taro/音声1.mp3を引数として渡すものです。ここの変数もマクロ名と同様に短い方がいいです。マクロvoiceとマクロvoice2で同じ変数名を使用することはできません。

間をたっぷり取った音声を流したい場合

普通に喋っている時に合わせたマクロを使用すると、音声の途中で次の台詞に移ってしまいます。
ここで考える三点は以下です:

  1. ここだけイチからタグを打つ
  2. ゆっくり喋ってる時用のマクロも作る
  3. 面倒だからさっき作ったマクロを利用したい
[voice vf="taro/音声1.mp3"]
[delay speed="150"]
[taro]
台詞1[p]
[voicestop]

で解決します。マクロvoiceとその直後の[delay]タグでタグが重複していますが問題ありません。後にある方のタグの数値で、テキスト表示速度は上書きされます。

普通の速度の音声と、遅い速度の音声が続く場合
[voice vf="taro/音声1.mp3"] // 普通の速度の音声
[taro]
台詞1[p]
[voice2 vf2="taro/音声2.mp3"]    // 遅い速度の音声
[delay speed="150"]
台詞2[p]
[voicestop]
普通の速度の音声の間に、遅い速度の音声を挟むこともできる
[voice vf="taro/音声1.mp3"] // 普通の速度の音声
[taro]
台詞1[p]
[voice2 vf2="taro/音声2.mp3"]    // 遅い速度の音声
[delay speed="150"]
台詞2[p]
[voicestop]
[voice vf="taro/音声3.mp3"]  // 普通の速度の音声
台詞3[p]
[voicestop]

この場合は、遅い速度の音声の後にマクロ[voicestop]を挟むことで、clear="true"の入っていないマクロ[voice]を使用しても前の音声を止めてから次の音声を流してくれ、かつ、[delay speed="130"]と打つことなくテキスト表示速度を台詞1と同じにできます。
[stopse]タグに[playse]タグを続けることと、[playse]タグにclear="true"のプロパティを指定することは同じなのです。