Chapter 5 音声を鳴らそう
Section 1 BGMを流す
BGMの再生を始める ── [playbgm]
音声まわりの機能は、画像まわりの機能に比べてシンプルです。それでは早速、BGMを流してみましょう。
私たちはすでにChapter 2で、以下の行を書くことによってBGMを再生しました。
[playbgm storage=madoromi]
何も指定しなければ、BGMはループ再生されます。もしループ再生をしたくなければ、loop属性にfalseという値を指定して、以下のようにします。
[playbgm storage=madoromi loop=false]
もし、BGMを曲の頭からではなく途中から再生したい場合には、o2_start属性を使います。
[playbgm storage=madoromi o2_start=1:56]
o2_start属性の値の書き方は若干のコツが必要です。上記のように半角コロン(:)を1つだけ使って1:56のように書くと「1分56秒」と解釈され、曲はその位置からスタートします。半角コロンを2つ使い、1:56:45のように書くと「1分56秒45」と解釈されます。問題はコロンを3つ使って2:01:56:45のように書いた場合で、これは「2時間1分56秒45」と解釈されます。
BGMの再生をフェードインで始める ── [fadeinbgm]
[playbgm]タグの代わりに[fadeinbgm]タグを使うと、BGMの再生をフェードインで始めることができます。
[fadeinbgm storage=madoromi time=5000]
[fadeinbgm]タグには必ずtime属性を指定し、「フェードインに何ミリ秒かけるか」を決めなければなりません。その他の属性、つまりloop属性やo2_start属性は[playbgm]タグと同じように利用できます。
BGMの音量を調整する ── [bgmopt]
BGMの音量を調整するには、[bgmopt]タグを使います。一般的に、このタグは実際にBGMを再生する前に置きます。
[bgmopt volume=80]
[playbgm storage=madoromi]
上記のようにvolume属性に音量を指定することができます。音量は0が最低、100が最高です。
ちなみに、BGMが鳴っている最中に[bgmopt]タグで音量を変えた場合には、その時点でいきなり、ガクッと音量が変わります。
BGMの音量をフェードで調整する ── [fadebgm]
BGMの途中で音量を調整したいといっても、ガクッと変わられては不自然なので困る、ということもあるでしょう。そのような時には[fadebgm]タグを使います。
[fadebgm volume=50 time=1000]
[fadebgm]タグは、時間をかけてフェードしながらBGMの音量を調整します。volume属性には0〜100の音量を、time属性にはフェードに費やす時間をミリ秒単位で指定します。
BGMを停止する ── [stopbgm]
BGMを止めるには、[stopbgm]タグを使います。
[stopbgm]
BGMをフェードアウトで停止する ── [fadeoutbgm]
[stopbgm]タグの代わりに[fadeoutbgm]タグを使って、BGMをフェードアウトさせて停止させることができます。以下のシナリオは、5秒かけてゆっくりとBGMをフェードアウトさせるタグです。
[fadeoutbgm time=5000]
BGMのフェードの終了を待つ ── [wb]
[fadeinbgm][fadebgm][fadeoutbgm]タグは時間をかけてBGMの音量をフェードさせますが、フェードの最中、ノベルが先に進んでしまっては困ることもありえます。そのような場合には[wb]タグを使えば、フェードが完了するまで、そのタグの場所でノベルの進行を止めておくことができます。
[fadeoutbgm time=5000][wb]
音楽が止まりました!
上記のようにシナリオを書くと、「音楽が止まりました!」というテキストは、5秒かかるBGMのフェードアウトが完了するまで表示されません。
Section 2 効果音を鳴らす
バッファの考え方
効果音はBGMと異なり、同時に複数の音を鳴らしたい場合があります。そのような時のため、novelsphere.jsにはバッファという機能があります。
バッファとは、効果音を再生するためのスピーカーのようなもので、0、1、2……というように連番が振られています。1つのバッファでは同時に1つしか効果音を鳴らすことができず、複数の効果音を鳴らすときにはそれぞれ別のバッファで再生する必要があります。
効果音を再生する ── [playse][fadeinse]
効果音の再生に使う[playse]タグや[fadeinse]タグの使い方は、BGMの再生における[playbgm]タグや[fadeinbgm]タグの使い方とほとんど同じです。異なる点は、バッファを意識しなければならないところです。
[fadeinse storage=se_mushi time=1000 loop=true buf=0]
[playse storage=explosion buf=1]
上記のようにシナリオを書くと、1秒かけてse_mushiという音声ファイルがフェードイン再生されながら、explosionという音声ファイルが再生されます。
ここで書いた2つのタグにはbuf属性が指定されていますが、これがバッファの指定にあたります。上のシナリオではse_mushiはバッファ0で、explosionはバッファ1で再生されます。ちなみにbuf属性を省略するとバッファ0が指定されたとみなされるため、1つ目のタグのbuf=0を省略しても同じ挙動となります。
なお、BGMと異なり、効果音は基本的にループ再生されません。効果音をループ再生したい場合はloop属性にtrueを指定する必要があります。上のシナリオでは、se_mushiはループ再生されますがexplosionは1回だけしか再生されません。
効果音の再生終了を待つ ── [ws]
上記シナリオにおけるexplosionのように、1回だけしか再生しない効果音を鳴らす場合、その効果音が鳴っている間はノベルの進行を止めたいケースがありえます。その場合には[ws]タグを使います。
[playse storage=explosion buf=1]
[ws buf=1]
[ws]タグにもbuf属性を指定して、どのバッファで鳴っている効果音の再生終了を待つのかを指定する必要があります。
効果音の音量を調整する ── [seopt][fadese]
効果音の音量調整には[seopt]タグを使います。フェードを伴って音量を変えたい場合には[fadese]タグを使います。どちらも、buf属性を指定すること以外は[bgmopt]タグや[fadebgm]タグと同じ使い方ができます。
効果音を停止する ── [stopse][fadeoutse]
効果音の停止には[stopse]タグを使います。フェードアウトして停止させたい場合には[fadeoutse]タグを使います。これらのタグの使い方も、buf属性を指定すること以外は[stopbgm]タグや[fadeoutbgm]タグと同じです。
効果音のフェードの終了を待つ ── [wf]
[fadeinse]タグ、[fadese]タグ、[fadeoutse]タグのようにフェード効果を伴う場合、そのフェードが行われている間ノベルの進行を止めるには[wf]タグを使います。このタグにもbuf属性を指定することを忘れないでください。