このページはCOOL ONLINE終了に伴いO-Show様の許可を得て作成したBinary Heavenのミラーサイトです
[TOP] [Profile] [NScripter] [BBS] [Links]
初級編 No.12
音を鳴らす
■概要■
ゲームの構成要素として、画像やテキスト以外にも音声というものがあります。

今回は、NScripterでの音声再生の現状を説明しつつ、BGMや効果音を鳴らす方法を説明します。


使用命令:

「bgm」(追加命令一覧.txt)
「bgmonce」(追加命令一覧.txt)

「dwave」(追加命令一覧.txt)
「dwaveloop」(追加命令一覧.txt)

「dwaveload」(追加命令一覧.txt)
「dwaveplay」(追加命令一覧.txt)
「dwaveplayloop」(追加命令一覧.txt)

「play」(マニュアル 表示・演奏系 E)
「playonce」(マニュアル 表示・演奏系 E)

「wave」(マニュアル 表示・演奏系 E)
「waveloop」(マニュアル 表示・演奏系 E)

「mp3」(マニュアル 表示・演奏系 E)
「mp3loop」(マニュアル 表示・演奏系 E)


「stop」(マニュアル 表示・演奏系 E)
「dwavestop」(追加命令一覧.txt)
「playstop」(マニュアル 表示・演奏系 E)
「wavestop」(マニュアル 表示・演奏系 E)
音声再生の現状

NScripterには音声再生の方法がいくつかありますが、大きく分けると次の四つにわけることができると思います。

・DirectX(DirectShow)による様々な種類の音声ファイルの再生
・DirectX(DirectSound)によるWAVEファイルの再生
・CD-DAによる演奏
・その他、古いやり方による音声再生

以下で、この四つの方法を一つずつ紹介していきます。


音声再生についてたくさんの方法がありますが、どれを使っていくかという指標になるものとして「鳴らしたい音声はループするものなのか、それとも一度だけのものなのか」という考え方があります。

「ループするもの」というと、BGMがそれにあたります。
「一度だけのもの」というと、効果音やボイスがそれにあたります。

どの再生方法がそれぞれに向いているのか、考えながら読んでみてください。



DirectX(DirectShow)による様々な種類の音声ファイルの再生

では、実際に再生させる方法を見ていきましょう。
まずはDirectX(DirectShow)による様々な種類の音声ファイルの再生です。

これには「bgm」命令(追加命令一覧.txt)を使います。



	bgm "background.mp3"


難しいことはありません。再生したいファイル名を示すだけです。
この命令では、音声はループして再生されます。
一度だけ再生したい場合は、「bgmonce」命令を使います。


音声の再生は、他の処理を待たせることはありません。音声が鳴っている間、ゲームは次へ進むことが出来ます。

逆に言うのならば、効果音を鳴らす場合は適切な間を空けないと、鳴っている間に話しが先に進んでしまうことがあるということです。



上記の例ではmp3形式のファイルを指定しましたが、このbgm命令では様々な種類の音声ファイルが再生できます。実際には、そのパソコンで再生できる種類のファイルなら全て再生できます。その理由は、この命令がDirectShowを使用しているからです。


DirectShowというのは、音声ファイルなどに対して様々な操作を行って再生できるという技術で、Windows付属のメディアプレイヤーなどにも使われています。

メディアプレイヤーでは様々な形式のファイルを再生することができますが、それはDirectShowがそれぞれのファイルに対して適切な「操作」を行っているためです。再生できない音声ファイルがあるのは、「操作する」ためのプラグインがないからです。


当たり前のことながら、ゲームを制作しているパソコンでは再生できていたとしても、ゲームをプレイするプレイヤーのパソコンでは再生できない、というパターンもありうるわけです。

だから、メジャーな音声ファイル形式を使ったり、あるいは再生するためのプラグインをゲームといっしょに配布することになります。


メジャーなものを以下にいくつか紹介します。


WAVE形式

 Windows標準の音声ファイル形式。拡張子は「.wav」。Windowsならば、再生できないということはまずありません。弱点は、ファイルサイズが非常に大きくなるということです。なので、BGMなどの長い音声には向いていません。

ただし、WAVE形式にも色々あり、普通はPCMという無圧縮のものを指しますが、ADPCMという種類ではファイルサイズを比較的小さめにできます。詳しいことは検索などをして調べてみてください。


MP3形式

 人間の耳には聞こえない領域の音をカットするなどして音声を圧縮したファイル形式。拡張子は「.mp3」。これも最近のパソコンでは再生できると考えてOKです。

ファイルサイズはWAVE(PCM)の十分の一ほどになると言われています。BGMに向いていると言えるでしょう。


ogg形式

 MP3と似ていますが、同ファイルサイズに圧縮したMP3よりも高品質である、あるいはよりファイルサイズを小さくできるという形式です。拡張子は「.ogg」。

他にも、完全な著作権フリーであることなどの理由から、今後の主流になると思われる形式です。しかしながら、まだ現状では再生できないパソコンも多いです。これを解消するためにプラグインが用意されているのですが、詳しくは後述します。


MIDI形式

 パソコンの中に用意されている音(MIDI音源)を楽器のように演奏させるための指示が記録されているファイル。拡張子は「.mid」。正確には色々あるようですがとりあえずこれだけ知っていればOKです。

指示が記録されているファイルですので、上で紹介していたものに比べて格段にファイルサイズが小さくなります。BGMに使うのが良いと思います。

この形式は、Windowsならほぼ全てのパソコンが再生できると思います。また、利点としてネットなどでフリーのMIDIファイルがたくさん公開されているということもあります。自分で音楽を作れない場合はこれらを利用すると良いでしょう。



DirectX(DirectSound)によるWAVEファイルの再生

続いて、DirectSoundによる再生を見ていきましょう。ここでは、先ほどと違いWAVE形式のみ使用可能となります。(oggも使えますが、後述です)

これには「dwave」命令(追加命令一覧.txt)を使います。



	dwave 1,"koukaon.wav"


この命令は一回のみ再生されます。
ループして再生させたいのならば「dwaveloop」命令を使います。

最初の「1」という数字は、再生チャンネルを意味しています。DirectSoundでは、複数の音声を同時に再生することが可能というメリットがあります。そのため、どの音声をどのチャンネルで再生するかという指定が必要になってきます。この指定には「0」〜「49」のチャンネルが使えます。

例えば、システム効果音は1、シナリオ効果音は2、ボイスは3、などに決めておけば、かぶって再生されるような場面があってもお互いの音声が重なり合って聞こえるわけです。

ただし、NScripterにはボイス関連の命令がいくつかありますが、それらはチャンネル0を使うことを前提としています。よって、ボイスはチャンネル0にしておいた方が無難と言えます。



また、DirectSoundによる再生にはもう一つ方法があって、それが「dwaveload」命令からの「dwaveplay」「dwaveplayloop」です。



	dwaveload 5,"koukaon.wav"


	dwaveplay 5


最初の「5」という数字は再生チャンネルです。

これらの命令の意味は、まず「dwaveload」命令で指定した音声ファイルを指定したチャンネルに読み込んでおき、「dwaveplay」「dwaveplayloop」命令が来た時にそれを再生するという意味です。だから「dwaveplay」の時にはチャンネルだけ指定するだけで再生できるわけです。

これはスプライトの時の「lsph」のようなものだと考えておけば良いでしょう。



CD-DAによる演奏

CD-DAとは、音楽CDのようにトラックになっているCDをCD-ROMドライブに入れておくことで、そこから音楽を再生するというものです。

これには「play」命令(マニュアル 表示・演奏系 E)を使います。「play」命令はループ再生なので、一度だけ再生したい場合は「playonce」命令を使います。



	play "*3"


「*3」という文字列の「3」という数字は、トラック番号を意味しています。つまり、上の例ではトラック3を演奏しているわけです。


このCD-DAという再生方式は、実は高橋直樹さん自身が使用を推奨されていません。このことは「使用条件.txt」の一番最初の方に書かれています。

ということで、CD-DAを使うのはやめた方が良さそうです。



その他、古いやり方による音声再生

次に紹介するのは、古いやり方です。これらを使うメリットは特にありません。
bgmなどの命令の方が使い方が統一されているので、むしろデメリットにしかなりません。こういうやり方もあったんだ、という程度に触れておきます。


・playとplayonce命令によるMIDIの再生

playとplayonce命令は、CD-DA以外にもMIDIを再生することもできます。



	play "bamen01.mid"


再生したいファイル名を示すだけです。


・waveとwaveloop命令によるWAVE形式の再生

「wave」「waveloop」命令を使うと、WAVEファイルが再生できます。



	wave "koukaon.wav"


同じく、再生したいファイル名を示すだけです。


・mp3とmp3loop命令によるDirectShowでの再生

「mp3」「mp3loop」という命令を使うと、DirectShowを使って様々な種類の音声ファイルを再生できます。これはbgm、bgmonceとは名前が違うだけでやっていることは全く同じです。

ただ、命令の名前が紛らわしいので今後はbgm、bgmonceで統一していった方が良いと思います。



	mp3 "background.mp3"


やはり、再生したいファイル名を示すだけです。



ogg形式の再生方法

ここで、ogg形式の再生方法について説明を行います。

先ほどプラグインが用意されていると言いましたが、それはNScripterに同梱されています。「ツール」フォルダの「PCMとOGGのストリーミング nsogg.dll」フォルダを覗いてみてください。

「nsogg.dll」というファイルがあると思います。それをnscr.exeと同じフォルダにコピーすることで、bgm系とdwave系の命令でoggを再生できるようになります。


このDLLはフリーで使用可能、また再配布可能なのですが、少し注意が必要なことがあります。DLLといっしょに入っていたreadme.txtを読んでみて下さい。


>このDLLは、liboggとlibvorvisを使っていますので、
>それらの配布条件に従う必要があります(BSD系のライセンスです)。


上記のように書かれています。

これは要するに、このDLLを自分のゲームに含めて配布する場合には、このDLLに使われているソースコードの著作権表示(誰が作ったかの表示)をどこかに書いていっしょに配ってください、ということです。

これはそれほど難しいことはありません。このreadme.txtには、著作権表示が「---(ここから)---」〜「---(ここまで)---」というように書いてくれてあるからです。

これを、自分でゲームを配布する際に書く、ゲーム説明テキストのどこかに書き写しておくなりすれば良いでしょう。(「ここから」〜「ここまで」はreadme.txt内に2つありますが、上の方の英語混じりのやつです)


【注意】
以前にはここで「oggdec.dll」というDLLを紹介していましたが、このDLLにはストリーミング再生ができないという欠点がありました。この欠点は、上で紹介した「nsogg.dll」では解消されています。ですので、もし「oggdec.dll」を使っている方がいたらこれからは「nsogg.dll」を使用するようにしてください。



音声の再生を止める

長々と音声の再生方法ばかり述べてきましたが、最後に音声の再生を停止させる方法について書きます。音声の再生を止めるには、それぞれ再生したときに使用した命令に対応した命令を書かなければなりません。


・DirectX(DirectShow)による様々な種類の音声ファイルの再生

「bgm」「bgmonce」「mp3」「mp3loop」による再生は、「stop」命令で止めることができます。


・DirectX(DirectSound)によるWAVEファイルの再生

「dwave」「dwaveloop」「dwaveplay」「dwaveplayloop」による再生は、「dwavestop」命令で止めることができます。この場合は、止めるチャンネルも指定しなければなりません。


・CD-DAによる演奏「play」「playonce」

CD-DAによる演奏は、「playstop」命令で止めることができます。


・MIDIの演奏「play」「playonce」

MIDIファイルの演奏も同じく、「playstop」命令で止めることができます。


・WAVEファイルの再生「wave」「waveloop」

WAVEファイルの再生は、「wavestop」命令で止めることができます。



なお、「stop」命令はCD-DAの演奏、MIDIの演奏、waveとwaveloopによるWAVEファイルの再生も止めることができます。DirectX(DirectSound)によるWAVEファイルの再生は止められません。



  一度だけ再生 ループ再生 止める
DirectShowによる再生 bgmonce
(mp3)
bgm
(mp3loop)
stop
(stop)
DirectSoundによる再生 dwave
dwaveplay
dwaveloop
dwaveplayloop
dwavestop
CD-DA playonce play playstop
stop
MIDI形式 playonce play playstop
stop
WAVE形式 wave waveloop wavestop
stop
■総括■
音声再生は何度か仕様が変更され、複雑な状況になっています。とりあえずBGMはbgm系命令、効果音等はdwave系命令にしておけば良いのではないかと思います。play命令やwave命令などはやめましょう。

その場合ファイル形式をどうするかが問題ですが、ファイルサイズと音質などを考慮して決めることになります。

次へ   前へ   NScripterのIndexへ