BGSの記事で、ウディタの音声チャンネルは「BGM」「BGS」「SE」だけとお話しました。
また、BGSの例としてハァハァ言う声のループなども話題に出しましたが、これは「ボイス」でもあります。
音声チャンネルにボイスの欄は無いので、ウディタでのボイスはSE扱いとせざるを得ません。つまり「コンフィグでSEとボイスの音量を別個に設定することはできない」ということになります。
しかし世間にはSEとボイスの音量設定を別個にできるウディタ作品もありまして……
筆者も自分なりのやり方を考えてみました。
基本の考え方
こんなコンフィグ(音量設定)が作れたとします
コンフィグの作り方はさておいて、図の通り、SE音量40%、ボイス音量80%と設定できたとしましょう。
仮に「SE音量」と「ボイス音量」という通常変数があって、それぞれ40、80と登録されたものとします。
SEのシステムデータベース設定をいじる
ウディタ上では足音などのSEでもキャラクターボイスでも、すべていっしょくたにシステムデータベースのSE欄に登録しなくてはなりません。
このためにウディタはSEとボイスを区別できないのですが、システムデータベースにこんな項目を足してみましょう。
ユーザー(作者)が「このIDのデータがSEなら0、ボイスなら1」とウディタにわかるような変数(フラグ)を付けて教えてあげることが可能になりました。
SEを再生する際に、このフラグを読み取って、システム変数のSE再生音量の項目を「SE設定用変数」か「ボイス設定用変数」のどちらかに都度切り替えていけばよさそうです。
ボイスの中でもさらに登場キャラクターごとの音量やオンオフを行う場合もおなじ要領かと思います。
コモンを組み立てる
SE再生をコモン化する
SEの実際の音量はシステム変数102番で管理されています。
このシステム102番を都度、適切に切り替えてくれるSE再生用コモンでSEを鳴らしていくようにすることで、SEとボイスの個別設定が可能となるはずですね。
いま再生しようとしているSEで適用したい音量設定(SEかボイスか)を読み取り、SE再生の直前で適切な音量変数でシステム変数102番を書き換える……という動きをしています。
「SEの停止」までこのコモンでこなすなら、ID指定が「-1のときなら停止」という別分岐をつけるとよさそうです。
この記事での設定なら、これで「SEは40%、ボイスは80%」で音量の鳴らし分けが行われます。
やろうと思えばBGMやBGSについても同じ仕方で参照する音量設定を細かく分けることができそうですね(どういった状況で必要になるのかはわかりませんが……)。
とはいえ、これも力技の設定です。
ボイスが無数に同時再生可能だったり、ボイスの音声ファイルとなるとかなりのファイルサイズで読み込みにも時間がかかることを思うと、再生タイミングのズレや重なりによって、どうしても意図通りにならないことはあるのかもしれません。
SEは通常のコマンドで再生し、ボイスのみ上記コモンを使う……といった使い分けも考えられます。
ボイス付き文章を表示するときの注意点
ボイスを実装して、しかも自作コンフィグで音量設定までできる。
ここまでやるだけでもウディタではかなりの作り込みです。
そんな状況なら、ひょっとするとフルボイスのADVなんかを作ろうとしているのかもしれません。
フルボイスの場合、テキストの読み上げ(ボイス再生)が終わり切らないうちに次のテキストに進んでしまったら、再生中のボイスを止める必要があります。
そうでないと次に始まるボイスが、再生中の前のボイスにかぶってしまうためですね。
ボイス中の作品ならば当たり前のことですが、ウディタでのボイスはSEなので、「SE停止」というコマンドを使わざるを得ません。
この「SE停止」では同時にいくつも鳴っているかもしれないSEのすべてが止まる点に注意が必要です。
とりあえず、テキスト表示も毎回、前後に「SE再生(ボイス)」と「SE停止」が挟まって大変なので、ここもコモン化してみましょう。
こんな感じでしょうか。
ボイス設定を適用したい場合は、SE再生部分を専用コモンに置き換えです。
【補足】ボイス再生後のテキスト送りで必要以上にSE停止をしないために
SEのシステムデータベースで項目を増やしてもらいました。
下の記事も、「対象のSEの秒数」を作者が手入力しておくことで疑似BGSが実現できるという趣旨でした。
ということは、ボイス再生の方でも、再生しようというボイスの秒数を登録しておけば、「テキストを読み上げるボイスの再生が終わったかどうか」が判定できるかもしれません。
システム変数28番に「経過フレーム数」というものがありますので、そのあたりの数値が再生中ボイスの秒数を上回っていれば、再生は終わっているので「SE停止はしなくてよい」と判断できるかもしれない……
しかしフルボイスADVだとしたらボイス数もとんでもないので、逐一秒数をみてデータベースに登録というと、どうにも現実的な方法では無さそうです。
再生中SEの長さも、変数+で取得できれば良いのですが(BGMでは可能)……