説明

音楽再生プログラムおよび音楽再生装置

【構成】 ゲーム機(12)のCPU(36)は、BGMのシーケンスデータ再生の実行中にステップS35で検知される拍信号に応答して、ステップS41で、ストリーミング再生における予測サンプル数と、実際のサンプル数とを比較する。その比較誤差が正のときにはBGMのシーケンスデータ再生が遅れているものとみなして、ステップS47でシーケンスデータ再生のテンポを速くし、誤差が負のときにはMIDI再生が進んでいるものとみなして、ステップS49でシーケンスデータ再生のテンポを遅くする。
【効果】 シーケンス再生BGMをストリーミング再生BGMに容易に同期させることができるので、複雑な制御なしに、双方の演奏形式のよい部分を組み合わせた楽曲(BGM)を演奏できる。

【発明の詳細な説明】
【技術分野】
【0001】
この発明は音楽再生プログラムおよび音楽再生装置に関し、特に例えば、ゲームなどのBGMにおいて、MIDIデータなどで音源をシーケンス制御することによる音楽再生と、実際の音楽演奏を録音したストリーミングデータによる音楽再生とを同時に行う、音楽再生プログラムおよび音楽再生装置に関する。
【背景技術】
【0002】
この発明の背景となるビデオゲームにおけるBGM(背景音楽)の再生方式は、大きく分けて、ストリーミング再生方式と、シーケンス再生方式の2種類がある。ストリーミング再生方式は、曲をそのままオーディオファイルとし、これを逐次メディアから読み込みつつ再生する方式であり、通常のCDなどと同様の方式である。シーケンス再生方式は、典型的にはMIDIシーケンスデータのようなシーケンスデータを用い、そのシーケンスデータに基づいて音源(楽器)を逐次鳴らしつつ、ゲーム機上で楽曲を構成していく方式である。
【0003】
ストリーミング再生方式では、たとえばDAW(Desktop Audio Workstation)上で予め曲を作り込んでおくことができるので、高音質な楽曲を再生することができるという利点があるものの、楽曲にプログラム的変化を施すことが困難であるという難点もある。シーケンス再生方式では、演奏情報をプログラム的に操作できるので、ゲームの進行に合わせて楽曲の変化(楽器を変更する、演奏トラックを追加/削除する、特定の位置へ楽曲を分岐させる、など)を施すことができる。しかしながら、ゲーム機の処理速度の制約があるため、DAWで予め作りこむ場合には行なえるような処理、たとえばエフェクタ処理や、長尺のオーディオ(ボーカルなど)の組み込み、などが使えず、そのためストリーミング再生方式に比べて音質が劣る。
【0004】
これらを組み合わせることによって、高品質で多彩な楽曲表現が可能となるが、しかしながら、ストリーミング方式とシーケンス方式とで同時に音楽再生を行なうと、両者に演奏時間のずれが生じる。これは以下のような理由による。
【0005】
シーケンス再生処理はプログラムによって行なわれるが、プロセサのクロックの微小な誤差や、プログラム処理上の誤差が蓄積し、実際に想定している再生テンポからほんの僅かではあるが、ずれが生じる。また、ストリーミング再生処理で再生する波形にループを組む場合、丁度よいタイミングできれいにループが繋がるよう、ループポイントを、たとえば波形サンプル値が0の箇所を選択し、ここでループが接合されるように調整する必要があるが、その際に、僅かではあるが本来のテンポから、時間的に正確なループ位置とサンプル値0の位置の誤差の分だけずれることがある。さらには、シーケンスBGMと同じ演奏長のストリーミングBGMを作る場合には、人間の作業が必要なため、そこでヒューマンエラーが入り込む余地がある。そして、このような原因による演奏時間のずれは、非常に長い楽曲や、楽曲を何回もループ再生を行なう際に顕著に現れる。
【0006】
一方、一般的なDAWソフトウェアでは、実際の音楽演奏を録音したストリーミングデータと、シーケンスデータとの同期をとりながら音楽制作を行うことができる。
【0007】
また、特許文献1に掲げた技術では、ハードディスクに記録されたオーディオデータと、磁気ディスクに記録されたMIDIデータとを、クロック生成部からのクロックに従って再生するので、オーディオデータとMIDIデータとの同期をとることができる。
【特許文献1】特開2003−280662号[G10H7/02 1/00]
【発明の開示】
【発明が解決しようとする課題】
【0008】
しかしながら、一般的なDAWソフトウェアでは、オーディオデータからテンポ情報を抽出して、MIDIデータに対するテンポを決め、あるいは、MIDIデータに対してオーディオデータの長さが合致するように、タイムストレッチなどの技術を用いて、高度な同期をとる方法を採用している。このため、ゲームなどリアルタイムにテンポ同期を行う必要がある局面では、コンピュータへの処理負担が非常に高くなる上に、タイムストレッチ技術などの音質面に配慮するような高度な処理はあまり必要ではない。
【0009】
また特許文献1に掲げた技術では、クロック生成部からのクロックに応じて音楽を生成するので、ゲームなどではあらかじめクロックを別途設定しておく必要があり、データを用意する負担が大きくなる。
【0010】
それゆえに、この発明の主たる目的は、シーケンス方式とストリーミング方式による音楽再生を同時に行う、新規な音楽再生プログラムおよび音楽再生装置を提供することである。
【0011】
この発明の他の目的は、ストリーミング再生に対してシーケンス再生のテンポを調整することによって、双方の演奏形式のよい部分を組み合わせた楽曲(BGM)を演奏できる、音楽再生プログラムおよび音楽再生装置を提供することである。
【0012】
この発明のさらに他の目的は、少ない処理負担で、ストリーミング再生に対してシーケンス再生を同期させることができる、音楽再生プログラムおよび音楽再生装置を提供することである。
【課題を解決するための手段】
【0013】
請求項1の発明は、記憶手段と、音楽ストリーミングデータ再生手段と、音源手段とを備えた音楽再生装置の音楽再生プログラムであって、その音楽再生装置のコンピュータに、音楽再生開始指示に応じて、記憶手段に記憶されたストリーミングデータに基づいて音楽ストリーミングデータ再生手段から音楽を再生する、ストリーミング再生ステップ、音楽再生開始指示に応じて、記憶手段に記憶された所定の音源制御シーケンスデータおよびテンポに基づいて、音源手段から音楽を再生する、シーケンス再生ステップ、シーケンス再生ステップにおいてストリーミング再生ステップにおける再生経過を検出する、ストリーミング再生経過検出ステップ、およびストリーミング再生経過検出ステップで検出した再生経過に応じてシーケンス再生ステップにおけるテンポを調整する、テンポ調整ステップを実行させる音楽再生プログラムである。
【0014】
請求項1の発明では、音楽再生装置(12:実施例で相当する部分を例示したとえば機の参照番号。以下同じ。)は、記憶手段(40)、音楽ストリーミング再生手段(36,62,66)、音源手段(52,54,62,66)、およびコンピュータ(36)を含む。コンピュータ(36)は、再生開始指示に応じて、記憶手段に記憶されたストリーミングデータに基づいて音楽ストリーミングデータ再生手段から音楽を再生する(S7:図5)とともに、記憶手段に記憶された所定の音源制御シーケンスデータおよびテンポに基づいて、音源手段から音楽を再生する(図6,図7)。コンピュータ(36)は、シーケンス再生ステップの実行中に、ストリーミング再生における再生経過を検出し(S37,S39)、その検出した再生経過によって、テンポを調整する(S41-S49)。
【0015】
請求項1の発明によれば、ストリーミング再生に対してシーケンス再生のテンポを調整するので、双方の演奏形式(再生方式)のよい部分を組み合わせた楽曲(BGM)を演奏できる。
【0016】
請求項2の発明は、シーケンス再生ステップは、基準タイミング信号を検出する、基準タイミング信号検出ステップをさらに含み、ストリーミング再生経過検出ステップは、基準タイミング信号に応答して、ストリーミング再生ステップにおける再生サンプル数の予測値を取得する、サンプル数予測ステップ、および基準タイミング信号に応答して、ストリーミング再生ステップにおける実際のストリーミング再生に基づく再生サンプル数を取得する、再生サンプル数取得ステップを含む、請求項1記載の音楽再生プログラムである。
【0017】
請求項2の発明では、コンピュータ(36)は、基準タイミング信号検出ステップ(S35)で拍信号のような基準タイミング信号を検知すると、それに応答して、ストリーミング再生における、予測再生サンプル数と実際の再生サンプル数とを、再生経過として検出する。
【0018】
請求項2の発明によれば、たとえば拍信号のような、シーケンス再生における基準タイミング信号に応答してストリーミング再生の再生経過、すなわち実際の再生サンプル数および予測サンプル数を検出するので、複雑な制御なしに、両者を同期させることができる。
【0019】
請求項3の発明は、テンポ調整ステップは、予測値と再生サンプル数との誤差を算出する、誤差算出ステップ、および誤差に基づいて、シーケンス再生ステップにおけるテンポを増減する、テンポ増減ステップを含む、請求項2記載の音楽再生プログラムである。
【0020】
請求項3の発明では、コンピュータ(36)は、誤差算出ステップ(S41)を実行し、その誤差に基づいて、テンポを増減する(S45,S47,S49)。
【0021】
請求項3の発明によれば、実際の再生サンプル数および予測サンプル数の比較誤差によってテンポを増減するので、少ない処理負担で正確な同期制御を行なうことができる。
【0022】
請求項4の発明は、テンポ増減ステップは、誤差の大きさに応じて非線形な関係のテンポ増減率に応じてテンポを修正する、請求項3記載の音楽再生プログラムである。
【0023】
請求項4の発明では、コンピュータ(36)は、たとえば2次曲線のような非線形の関係で誤差量と増減率とを対応付ける。
【0024】
請求項4の発明によれば、誤差量に応じてテンポの増減率を非線形にしたので、大きい誤差量のときでも早く収束させることができる。
【0025】
請求項5の発明は、音源手段、音源手段を制御するための音源制御シーケンスデータおよびテンポならびに音楽ストリーミングデータを記憶する記憶手段、音楽再生開始指示に応じて、記憶手段に記憶されたストリーミングデータに基づいて音楽を再生するストリーミング再生手段、音楽再生開始指示に応じて、記憶手段に記憶された音源制御シーケンスデータおよびテンポに基づいて、音源手段から音楽を再生するシーケンス再生手段、ストリーミング再生手段における再生経過を検出するストリーミング再生経過検出手段、および再生経過に応じてシーケンス再生手段によるシーケンス再生のテンポを調整するテンポ調整手段を備える、音楽再生装置である。
【0026】
請求項5の発明では、請求項1の発明と同様の効果が期待できる。
【発明の効果】
【0027】
この発明によれば、ストリーミング再生に対してシーケンス再生のテンポを調整することによって、双方の演奏形式のよい部分を組み合わせた楽曲(BGM)を演奏できる。
【0028】
この発明の上述の目的,その他の目的,特徴および利点は、図面を参照して行う以下の実施例の詳細な説明から一層明らかとなろう。
【発明を実施するための最良の形態】
【0029】
図1に示す実施例のビデオゲームシステム10はビデオゲーム機(以下、単に「ゲーム機」という。)12を含む。この発明の音楽再生プログラムはこの実施例ではゲーム機12に適用されるので、その意味では、ゲーム機12は音楽再生装置でもある。
【0030】
ゲーム機12は、略立方体のハウジング14を含み、ハウジング14の上端には光ディスクドライブ16が設けられる。光ディスクドライブ16には、ゲームプログラムを記憶した情報記憶媒体の一例である光ディスク18が装着される。ハウジング14の前面には複数の(実施例では4つの)コネクタ20が設けられる。これらコネクタ20は、ケーブル24によって、コントローラ22をゲーム機12に接続するためのものであり、この実施例では最大4つのコントローラをゲーム機12に接続することができる。
【0031】
コントローラ22には、その上面,下面,あるいは側面などに、操作手段(コントロール)26が設けられる。操作手段26は,たとえば2つのアナログジョイスティック,1つの十字キー,複数のボタンスイッチ等を含む。1つのアナログジョイスティックは、スティックの傾き量と方向とによって、プレイヤキャラクタ(「プレイヤオブジェクト」ということもある。)(プレイヤがコントローラ22によって操作可能な動画キャラクタまたはオブジェクト)の移動方向および/または移動速度ないし移動量などを入力するために用いられる。他のアナログジョイスティックは、傾斜方向によって、仮想カメラの移動を制御する。十字スイッチは、アナログジョイスティックに代えてプレイヤキャラクタの移動方向を指示するために用いられる。ボタンスイッチは、プレイヤキャラクタの動作を指示するために利用されたり、3次元画像の仮想カメラの視点を切り換えたり、プレイヤキャラクタの移動スピード調節等に用いられる。ボタンスイッチは、さらに、たとえばメニュー選択やポインタあるいはカーソル移動を制御する。
【0032】
なお、実施例ではコントローラ22がケーブル24によってゲーム機12に接続された。しかしながら、コントローラ22は、他の方法、たとえば電磁波(たとえば電波または赤外線)を介してワイヤレスで、ゲーム機12に接続されてもよい。また、コントローラ22の操作手段の具体的構成は、もちろん実施例の構成に限られるものではなく、任意の変形が可能である。たとえば、アナログジョイスティックは1つだけでもよいし、用いられなくてもよい。十字スイッチは用いられなくてもよい。
【0033】
ゲーム機12のハウジング14の前面のコネクタ20の下方には、少なくとも1つの(実施例では2つの)メモリスロット28が設けられる。このメモリスロット28にはメモリカード30が挿入される。メモリカード30は、光ディスク18から読み出したゲームプログラムや表示用データ(図3参照)をローディングして一時的に記憶し、あるいはこのゲームシステム10を利用してプレイしたゲームのゲームデータ(たとえばゲームの結果)をセーブしておくために利用される。
【0034】
ゲーム機12のハウジング14の後面には、AVケーブルコネクタ(図示せず)が設けられ、そのコネクタを用いて、AVケーブル32を通してゲーム機12にモニタ34を接続する。このモニタ34は典型的にはカラーテレビジョン受像機であり、AVケーブル32は、ゲーム機12からの映像信号をカラーテレビのビデオ入力端子に入力し、音声信号を音声入力端子に与える。したがって、カラーテレビ(モニタ)34の画面上にたとえば3次元(3D)ビデオゲームのゲーム画像が表示され、左右のスピーカからゲーム音楽(BGM)や効果音などのステレオゲーム音声が出力され得る。
【0035】
このゲームシステム10において、ユーザまたはゲームプレイヤがゲーム(または他のアプリケーション)をプレイするために、ユーザはまずゲーム機12の電源をオンし、ついで、ユーザはビデオゲーム(もしくはプレイしたいと思う他のアプリケーション)のソフトウェア(データ)をストアしている適宜の光ディスク18を選択し、その光ディスク18をゲーム機12のディスクドライブ16にローディングする。応じて、ゲーム機12がその光ディスク18にストアされているソフトウェアに基づいてビデオゲームもしくは他のアプリケーションを実行し始めるようにする。ユーザはゲーム機12に入力を与えるためにコントローラ22を操作する。たとえば、操作手段26のどれかを操作することによってゲームもしくは他のアプリケーションをスタートさせる。操作手段26の他のものを動かすことによって、動画キャラクタ(プレイヤキャラクタ)を異なる方向に移動させ、または3次元(3D)のゲーム世界におけるユーザの視点(カメラ位置)を変化させることができる。
【0036】
光ディスク18には上述のようにゲームデータが記録されているが、そのようなゲームデータには、ゲームのプログラムのデータや、そのゲームに登場するプレイヤキャラクタ(プレイヤオブジェクト)やそれ以外のノンプレイヤキャラクタ(背景キャラクタ、敵キャラクタなど)を表現するゲーム画像データなどが含まれる。ゲームデータはさらに、ゲーム音楽(BGM)をストリーミング再生方式で再生するためのストリーミングデータ(たとえば、PCMデータ)を含む。
【0037】
なお、後述の音源手段を逐次的に制御するためのシーケンスデータは、たとえばMIDIメッセージを含み、そのようなシーケンスデータは上記プログラムの一部を構成するサウンド処理プログラムに含まれる。
【0038】
図2は図1実施例のビデオゲームシステム10の構成を示すブロック図である。ビデオゲーム機12には、このゲーム機の全体的な制御を担当する中央処理ユニット(以下、「CPU」という。)36が設けられ、このCPU36には、バスを介して、メモリコントローラ38が結合される。メモリコントローラ38は主として、CPU36の制御の下で、バスを介して結合されるメインメモリ40の書込みや読出しを制御する。このメモリコントローラ38にはGPU(Graphics Processing Unit:グラフィックス処理装置) 42が結合される。
【0039】
GPU42は、たとえばシングルチップASICで構成され、メモリコントローラ38を介してCPU36からのグラフィクスコマンド(graphics command:作画命令)を受け、そのコマンドに従って、ジオメトリユニット44およびレンダリングユニット46によって3次元(3D)ゲーム画像を生成する。つまり、ジオメトリユニット44は、3次元座標系の各種キャラクタやオブジェクト(複数のポリゴンで構成されている。そして、ポリゴンとは少なくとも3つの頂点座標によって定義される多角形平面をいう)の回転,移動,変形等の座標演算処理を行う。レンダリングユニット46は、各種オブジェクトの各ポリゴンにテクスチャ(Texture:模様画像)を貼り付ける(レンダリングする)。したがって、GPU42によって、ゲーム画面上に表示すべき3D画像データが作成され、その画像データわがフレームバッファ48内に描画(記憶)される。なお、GPU42が作画コマンドを実行するにあたって必要なデータ(プリミティブまたはポリゴンやテクスチャ等)は、GPU42がメモリコントローラ38を介して、メインメモリ40から入手する。
【0040】
フレームバッファ48は、たとえばラスタスキャンモニタ34の1フレーム分の画像データを描画(蓄積)しておくためのメモリであり、GPU42によって1フレーム毎に書き換えられる。後述のビデオI/F58がメモリコントローラ38を介してフレームバッファ48のデータを読み出すことによって、モニタ34の画面上に3Dゲーム画像が表示される。なお、フレームバッファ48の容量は、表示したい画面の画素(ピクセルまたはドット)数に応じた大きさである。たとえば、ディスプレイないしモニタ34の画素数に応じた画素数(記憶位置またはアドレス)を有する。
【0041】
また、Zバッファ50は、フレームバッファ48に対応する画素(記憶位置またはアドレス)数×1画素当たりの奥行データのビット数に相当する記憶容量を有し、フレームバッファ48の各記憶位置に対応するドットの奥行き情報または奥行データ(Z値)を記憶するものである。
【0042】
なお、フレームバッファ48およびZバッファ50は、ともにメインメモリ40の一部を用いて構成されてもよい。
【0043】
メモリコントローラ38はまた、DSP(Digital Signal Processor)52を介して、オーディオメモリ54に結合される。したがって、メモリコントローラ38は、メインメモリ40だけでなく、オーディオメモリ54の書込みおよび/または読出しを制御する。このDSP52およびオーディオメモリ54によって、音源手段(MIDI音源)を構成する。つまり、オーディオメモリ52に、その音源手段から出力できる楽器(たとえば、ピアノなどの鍵盤楽器、バイオリンなどの弦楽器、トランペットやフルートなどの管楽器、さらには打楽器やパーカッションなど)の音色やその他のいろいろな音色に相当する波形データを記憶しておき、DSP52がシーケンスデータ(代表的にはMIDIメッセージ)に基づいてその波形データを加工することによって、音楽データ(オーディオデータ)として出力する。音源手段から出力されるこの音楽データないしオーディオデータは、メモリコントローラ38によって、画像データなどともに一旦フレームメモリ48に蓄えられ、そのフレームメモリ48から出力されて後述のオーディオI/F62に与えられる。
【0044】
メモリコントローラ38は、さらに、バスによって、各インタフェース(I/F)56,58,60,62および64に結合される。コントローラI/F56は、コントローラ22のためのインタフェースであり、コントローラ22の操作手段26の操作信号またはデータをメモリコントローラ38を通してCPU36に与える。ビデオI/F58は、フレームバッファ48にアクセスし、GPU42で作成した画像データを読み出して、画像信号または画像データ(ディジタルRGBピクセル値)をAVケーブル32(図1)を介してモニタ34に与える。外部メモリI/F60は、ゲーム機12の前面に挿入されるメモリカード30(図1)をメモリコントローラ38に連係させる。それによって、メモリコントローラ38を介して、CPU36がこのメモリカード30にデータを書込み、またはメモリカード30からデータを読み出すことができる。オーディオI/F62は、メモリコントローラ38を通してフレームバッファ48から与えられるオーディオデータまたは光ディスク18(実際にはメインメモリ40の適宜場所に形成された後述のストリーミングバッファ)から読み出されたオーディオストリームデータを受け、それらに応じたオーディオ信号(音声信号)をモニタ34のスピーカ66に与える。なお、ステレオ音声の場合には、スピーカ66は、少なくとも、左右1つずつ設けられる。そして、ディスクI/Fは、そのディスクドライブ16をメモリコントローラ38に結合し、したがって、CPU36がディスクドライブ16を制御する。このディスクドライブ16によって光ディスク18から読み出されたプログラムデータやテクスチャデータ等が、CPU36の制御の下で、メインメモリ40に書き込まれる。
【0045】
図3にはメインメモリ40のメモリマップが示される。メインメモリ40は、プログラム記憶領域68を含む。プログラム記憶領域68には、ゲーム処理プログラム領域70、画像処理プログラム領域72およびサウンド処理プログラム領域72が設けられる。ゲーム処理プログラム領域70には、光ディスク18から読み出したゲームプログラムが、1度に全部または部分的かつ順次的に、記憶される。画像処理プログラム領域72にも同様に、光ディスク18から読み出したプログラムデータが1度に全部または部分的かつ順次的に、記憶される。画像処理プログラムデータは、たとえば、ゲームプレイヤがコントローラ38を操作することによってゲーム空間内で移動させ、あるいは他の任意の動作をさせるためのプログラムである。
【0046】
プログラム記憶領域68に含まれるサウンド処理プログラム領域74には、ゲーム音楽(BGM)を再生するためのBGM再生プログラム76が含まれる。このBGM再生プログラム76の一例が後述の図4のフローチャートで表される。サウンド処理プログラム領域74はさらに、後述の図5のフローチャートで例示するストリーミングデータ再生プログラム78、および後述の図6および図7のフローチャートで例示するシーケンス再生プログラム80を含む。
【0047】
シーケンス再生プログラム80に関連して、さらに、拍信号取得プログラム82、再生サンプル数予測プログラム84、再生サンプル数取得プログラム86およびテンポ修正プログラム88などが設けられる。
【0048】
拍信号取得プログラム82は、シーケンス再生において1拍毎に拍信号を取得するためのプログラムである。すなわち、シーケンスデータに1拍毎の情報を埋め込んでおき、シーケンスの進行中にこの情報があったとき、拍信号を発生する方法である。
*2つの方法とおっしゃられましたが、当方のテンポの定義の解説を実際の処理と混同する誤解を与えたようです。実際は拍情報が埋め込まれている、という説明でした。
他には、tick数(MIDIシーケンスデータを処理する、単位時間当たりの分解能)および楽曲の拍子情報から、特定間隔のtickが処理されたときに1拍が経過したと判断し、拍信号を発生する方法も考え得る。。
【0049】
ストリーミングバッファに蓄積されたストリーミング波形データは、逐次オーディオI/F62での発音処理に回されるが、その発音処理に回されたサンプル数が、再生サンプル数である。再生サンプル数予測プログラム84は、拍信号が発生するタイミングで、その時点で再生されていなければならないストリーミング波形サンプル数を予測するためのプログラムであり、再生サンプル数取得プログラム86は、ストリーミング再生された実際のサンプル数を拍信号が発生するタイミングで取得するためのプログラムである。
【0050】
メインメモリ40にはさらに、データ記憶領域90が形成され、その中にはストリーミングバッファ92、シーケンスデータバッファ94および再生カウント数データカウンタ96が設けられる。ストリーミングバッファ92には、先に説明したように光ディスク18から読み出されたストリーミングデータがストアされる。ストリーミングデータは音楽(BGM)毎に一連のデータとして記憶され、ここではそれらをBGM1,BGM2,…として表す。ストリーミングデータは、波形データのほか、そのストリーミングデータをどの程度の速さで再生するかを示す再生レート(周波数)や、ループ再生(繰り返し再生)の場合の開始サンプル値および終了サンプル値などが含まれる。ループ開始サンプル値とは、ループを開始させるサンプル値(アドレス)のことであり、ループ終了サンプル値とは、ループを終了させるサンプル値(アドレス)のことである。
【0051】
シーケンスデータバッファ94には、サウンド処理プログラム74から抽出されたシーケンスデータがストアされる。シーケンスデータは音楽毎に一連のデータとして記憶され、ここではそれらをシーケンス1,シーケンス2,…として表す。シーケンスデータは、MIDIメッセージ(音源への指示コマンドと演奏の制御コマンドとを包括的に扱ったデータ)を含む。シーケンスデータは、基本形としてのMIDIメッセージや、そのMIDIメッセージを拡張した形で使用するループコマンドなどを含み、ループ演奏の場合には、開始拍数および終了拍数などが含まれる。ループ開始拍数とは、シーケンス再生においてループを開始させる拍数のことであり、ループ終了拍数とは、そのループを終了させる拍数のことである。
【0052】
シーケンスデータにはさらにテンポデータが含まれるが、MIDI再生はゲームの処理フレームやストリーミングデータのサンプリングレートとは同期しない。シーケンスデータではまず、全ての基本となるカウント値(tick)が定義されていることはよく知られている。(たとえば、4分音符は480tick。)テンポデータは、何秒で1tickとするかを定義するデータである。したがって、テンポデータは、最終的には、4分音符を1分間に何カウントするか、という音楽的なテンポと同義になる。
【0053】
なお、再生カウント数データカウンタ96は上記テンポデータに基づいて、tick数をカウントする。つまり、何秒で1tickとするかはテンポデータで決まるので、そのテンポに基づいてカウント値すなわちtick数をカウントする。
【0054】
ゲームをプレイするとき、上述のように光ディスク18をゲーム機12にセットし、電源を投入すると、光ディスクからデータが読み出され、そのときのゲームマップないしステージに必要なプログラムやデータが図3に示すようにメインメモリ40に記憶(ロード)される。そのプログラムやデータに従ってゲームが実行されるが、この発明にはゲームそれ自体には関係しないので、ゲームについての説明は省略する。
【0055】
CPU36はゲームの実行中に、ゲームプログラムによって、BGM(ゲーム音楽)再生要求を受ける。応じて、CPU36は、図4の最初のステップS1において、ディスク18からメインメモリ40のストリーミングバッファ92(図3)に、即座に再生を開始できる分だけの適宜量のストリーミングデータを読み込む。そして、そのストリーミングバッファ92に適宜量のストリーミングデータが読み込まれたとき、CPU36は、ステップS5において、BGMの再生開始を指示する。つまり、ステップS3でストリーミングバッファ92に十分な量のストリーミングデータが蓄積されたことを検出したとき、ステップS5でBGM再生開始指示を出す。ストリーミング再生では記録メディアすなわちディスク18からメインメモリ(RAM)40のストリーミングデータ(波形データ)を読み込むまでのタイムラグが生じるので、ストリーミングバッファ92に所要量の波形データが蓄積されるまで、シーケンス再生を待つようにしている。このようにして同期を確保した状態で、再生開始指示に応答して、ステップS7でシーケンスデータ再生を実行し、ステップS7でストリーミング再生を実行する。ストリーミング再生とシーケンス再生とは同時に開始されるのであるが、以下の説明では、便宜上両者を別々に説明する。
【0056】
ストリーミングデータ再生は具体的には図5に詳細に示される。ストリーミング再生では、ストリーミングバッファ92が空にならないように、つまり常に適当量のストリーミングデータを蓄積しておけるように、逐次記録メディア18からストリーミングデータを読み込み、ストリーミングバッファ92を更新し続けるのであるが、この図5ではそのことは省略していることを最初に指摘しておく。
【0057】
そして、最初のステップS11で、CPU36は、ストリーミングバッファ92にストアされているストリーミングデータ(BGM)に含まれる再生レートを読み取って、そのときのストリーミングデータ再生のテンポ(速さ)を決める。そして、ステップS13では、たとえばメインメモリ40のデータ記憶領域90の適宜の場所に形成される再生サンプル位置カウンタ(図示せず)をインクリメントし、ステップS15でストリーミングバッファ92からストリーミングサンプル(波形データ)を読み出し、ステップS17でその波形データをオーディオI/F62(図2)に入力することによって発音する。つまり、ストリーミング再生では、ステップS19で最終サンプル値が検知されるまで、ステップS13−S17を繰り返し実行し、ストリーミングバッファ92に蓄積したストリーミング波形データは逐次発音処理に送られる。このとき、図3の再生サンプル数取得プログラム86に従って、発音処理されたストリーミング波形サンプルの数(サンプル数)が検知またはカウントされる。
【0058】
ステップS19で最終サンプル値であることを検出したとき、ステップS21でそのストリーミングBGMはループ再生するのかどうか、判断する。もし、ループ再生すべきストリーミングBGMであれば、図3のストリーミングバッファ92に、ループ開始/終了サンプル値が予め設定されているので、それを見れば、このステップS21で“YES”か“NO”かを判断できる。ループ再生の必要がないなら、そのまま、終了する。
【0059】
そして、ループ再生する場合には、すなわちステップS21で“YES”が判断されたときには、続くステップS23で、ループを終了すべきかどうか、判断する。ループの終了条件は、一例として、ループ回数が予め設定されているループ回数に達したときである。ループが繰り返される都度、たとえばメインメモリ40のデータ記憶領域の適宜の場所に設定されているループカウンタ(図示せず)をインクリメントすることによって、ループ回数をカウントする。他方、ループ再生すべき回数(ループ回数)はストリーミングデータの一部としてバッファ92に設定されているので、このステップS23では、先のループカウンタでカウントしたループ回数がバッファに設定されているループ回数に達したかどうか判断するようにすればよい。
【0060】
ループを終了すべき別の条件は、ゲームの進行などの結果そのときのストリーミングBGMを強制的に終了させる指令信号が出されたときである。この終了指令信号によってもループは終了され、このステップS23で“YES”が判断される。
【0061】
ステップS23でループ終了ではない(“NO”)と判断したときには、ステップS13‐S25を繰り返し実行する。
【0062】
このようにして、ストリーミング再生が実行されるが、先に述べたように、その実行中に、再生サンプル数がカウントまたは検出されている。
【0063】
なお、ループをするかしないかをプログラム的に決定したい場合には、上で説明したステップS19とステップS21とを入れ替えてもよい。その場合は、ループ区間の終了点に来たとき、たとえばメインメモリ40のデータ記憶領域90の適宜の領域に設定された「ループすべき」フラグ(図示せず)が立っていたらループするし、そうでなければそのままスルーさせる。そして、最終サンプルまで再生が来たら終了させるようにする。
【0064】
次に図6および図7を参照して、シーケンス再生について説明する。このシーケンス再生は先にも説明したように、ストリーミング再生と同期させるため、ストリーミング再生プログラムからシーケンス再生指示があるまでは開始できない。そして、ステップS31でその再生指示を受けると、続くステップS33で、シーケンスデータ再生を実行する。
【0065】
シーケンスデータ再生は図7に示すように、最初のステップS61で、CPU36は、図3に示すデータ記憶領域90のシーケンスバッファ94から、テンポデータを取得する。それとともに、ステップS63で、CPU36は、データ記憶領域94の再生カウント数カウンタ96から再生カウント数データを取得する。この再生カウント数とは、tick数のことである。そして、ステップS65で、CPU36は、その再生カウント数すなわちtick数に対応したシーケンスデータをそのシーケンスデータバッファ94から取得する。
【0066】
次のステップS67でCPU36は、ステップS65で取得したシーケンスデータがMIDIメッセージかどうか判断する。MIDIメッセージとは、音の高さ(音階)、音の発音(NoteOn:発音開始タイミング)とその終了(NoteOff:発音終了タイミング)、大きさ(強さ)をDSP50(図2)へ指示するコマンドであり、シーケンスデータはそのコマンドと演奏の制御コマンドとを包含するものである。したがって、ステップS67で“YES”が判断されると、CPU36はステップS69でそのMIDIメッセージをDSP50に送る。したがって、DSP50は、その指示コマンドに従って、オーディオメモリ52(図2)の音源波形を加工して音楽データ(オーディオデータ)として出力する。そのオーディオデータによって、オーディオI/F62がオーディオ信号をスピーカ66に出力し、発音させる。
【0067】
ついで、ステップS71で、CPU36は、再生カウント数カウンタ96を、テンポデータに基づいてインクリメントする。つまり、何秒で1tickとするかはテンポ(4分音符(480tick)を1分間に何個入れるか)によって決まるので、ここでは、処理フレームによってではなく、テンポによって、再生カウント数(tick)を進める(インクリメントする)どうかが決まる。
【0068】
なお、ステップS67で“NO”の判断をしたとき、CPU36は次にステップS73で、ステップS65で取得したシーケンスデータがループ再生指示かどうか判断する。実施例のようなゲーム機では基本的なシーケンスメッセージを拡張することによってコマンドを作っているので、ここでは、シーケンスデータにループ再生コマンドを含んでいるかどうか判断する。シーケンスデータがループコマンドを含んでいるときには、次のステップS75でCPU36は、再生カウント数カウンタ96にループ開始位置のカウント数を設定する。
【0069】
ただし、ステップS77で、ステップS65で取得したシーケンスデータが終了コマンドを含んでいると判断したときには、シーケンス再生を終了する。
【0070】
このようにして、図6のステップS33でシーケンスデータ再生が実行される。
【0071】
そして、次のステップS35で、CPU36は、拍信号があるかどうか判断する。拍信号は、先に説明したように拍信号取得プログラム82に従って検出する。この拍信号は、そのときのストリーミング再生のずれを検出するための基準タイミング信号として機能するものであり、可能なら、拍信号以外の他の基準タイミング信号が利用されてもよい。
【0072】
ステップS35で拍信号を検出すると、CPU36は、次のステップS37で、ストリーミングサンプル数予測プログラム84(図2)に従って、そのとき再生されているであろう、またはそのとき再生されているはずのストリーミング波形サンプル数を予測する。具体的には、数1に従って、ストリーミングの再生レートで決まる1拍毎のサンプル数にそのときまでに得られた拍信号の数を掛ければ、そのときまでの再生サンプル数を予測できる。
[数1]
再生サンプル数予測値=1拍毎のサンプル数×拍信号の数
次に、CPU36は、ステップS39で、図5に示すストリーミング再生の実行中にカウントしておいた、実際に再生したストリーミングサンプル数を取得する。
【0073】
ステップS41で、数2に従って、ストリーミング波形の再生サンプル数の予測値と実際値とを比較して誤差を求める。
[数2]
誤差=実際の再生サンプル数−予測再生サンプル数
その後、ステップS43で誤差があるかどうか判断し、誤差がなければ、そのときのストリーミングBGM再生とシーケンスBGM再生とは同期がとれていることを意味している。したがって、この場合には、何もしないでリターンする。
【0074】
ステップS43で誤差を検出した場合には、次のステップS45でCPU36は、誤差が正かどうか判断する。
【0075】
誤差が正である場合、予測値が遅れている、つまりはシーケンスBGMがストリーミングBGMよりも遅れていることを意味しているので、次のステップS47でCPU36は、シーケンスのテンポを速くする。逆に、誤差が負である場合、予測値が進んでいる、つまりシーケンスBGMがストリーミングBGMよりも進んでいるので、ステップS49でCPU36はシーケンスBGMのテンポを遅くする。ただし、テンポを増減するためには、変化率(増減率)の数値を設定する。すなわち、テンポを速める増加率またはテンポを遅くする減少率を設定し、480tick(4分音符)毎にその増加率または減少率でtick数をカウントする時間を逆比例的に変更するようにすれば、シーケンス再生が徐々にストリーミング再生と同期するようになる。
【0076】
なお、上述の増減率を誤差の大きさによって変動するように設定することも可能である。たとえば、誤差量に対してテンポ変化率を2次曲線(非線形な関係の増減率)として用意すれば、誤差の大きいときにはテンポが大きく変化(増減)するようになり、誤差収束が速くなる。
【0077】
シーケンス再生はシーケンスデータで逐次楽曲を合成していく方法であるので、上記のようにシーケンスの再生テンポを微調整することによって、シーケンス再生を容易にストリーミング再生と同期させることができる。
【0078】
なお、このようなテンポ微調整の方法としては、毎tickに上記のような誤差を軽減する方法や、ゲームの処理単位で誤差軽減処理をする方法も考えられるが、実施例ではそれらを採用せず、シーケンス再生の拍信号毎に誤差軽減処理を実行するようにした。それは、以下の理由による。すなわち、余りにも頻繁に誤差軽減処理を行うと、ゲーム機本来の仕事であるゲーム処理に負担をかけ過ぎることになるし、拍毎にテンポ調整を行なうことによって、人間の耳にはテンポ変化が自然に聞こえるからである。
【0079】
なお、ループ再生の場合には、既に説明したように、1拍毎のサンプル数情報に加え、ストリーミングBGMのループの開始サンプル値および終了サンプル値、さらにシーケンスBGMのループ開始拍数およびループ終了拍数の情報を持たせることにより、ループを繰り返した場合の計算を正確に行なうことができる。
【0080】
このように、シーケンスBGMとストリーミングBGMの同期がとれるようになるので、双方の演奏形式のよい部分を組み合わせた楽曲(BGM)を演奏できる。たとえば、高音質なストリーミングBGMの上に、シーケンスBGMによる演奏トラックを追加することができる。また、大部分の演奏パートをストリーミング形式にしておくことにより、シーケンスの演奏処理(シーケンス解析処理および波形合成処理)を省くことができるため、シーケンス再生にかかるCPUやDSPの占有率を軽減することができる。
【0081】
また、シーケンスデータを、ゲームの時系列制御用データとして捉えれば、ストリーミングBGMに完全同期してゲーム中のイベントやオブジェクトの挙動を制御することができる。
【図面の簡単な説明】
【0082】
【図1】図1はこの発明の一実施例のゲームシステムを示す図解図である。
【図2】図2は図1実施例のゲーム機を詳細に示すブロック図である。
【図3】図3は図2におけるメインメモリのメモリマップの一例を示す図解図である。
【図4】図4は図1実施例のBGM再生動作を示すフロー図である。
【図5】図5は図1実施例のストリーミング再生動作を示すフロー図である。
【図6】図6は図1実施例のシーケンス再生動作を示すフロー図である。
【図7】図7は図6実施例のデータ再生動作を示すフロー図である。
【符号の説明】
【0083】
10 …ゲームシステム
12 …ゲーム機
22 …コントローラ
36 …CPU
40 …メインメモリ
52 …DSP
54 …オーディオメモリ
62 …オーディオI/F
68 …プログラム記憶領域
74 …サウンド処理プログラム
92 …ストリーミングバッファ
94 …シーケンスデータバッファ

【特許請求の範囲】
【請求項1】
記憶手段と、音楽ストリーミングデータ再生手段と、音源手段とを備えた音楽再生装置の音楽再生プログラムであって、その音楽再生装置のコンピュータに、
音楽再生開始指示に応じて、前記記憶手段に記憶されたストリーミングデータに基づいて前記音楽ストリーミングデータ再生手段から音楽を再生する、ストリーミング再生ステップ、
前記音楽再生開始指示に応じて、前記記憶手段に記憶された所定の音源制御シーケンスデータおよびテンポに基づいて、前記音源手段から音楽を再生する、シーケンス再生ステップ、
前記シーケンス再生ステップにおいて前記ストリーミング再生ステップにおける再生経過を検出する、ストリーミング再生経過検出ステップ、および
前記ストリーミング再生経過検出ステップで検出した前記再生経過に応じて前記シーケンス再生ステップにおけるテンポを調整する、テンポ調整ステップ
を実行させる音楽再生プログラム。
【請求項2】
前記シーケンス再生ステップは、基準タイミング信号を検出する、基準タイミング信号検出ステップをさらに含み、
前記ストリーミング再生経過検出ステップは、
前記基準タイミング信号に応答して、前記ストリーミング再生ステップにおける再生サンプル数の予測値を取得する、サンプル数予測ステップ、および
前記基準タイミング信号に応答して、前記ストリーミング再生ステップにおける実際のストリーミング再生に基づく再生サンプル数を取得する、再生サンプル数取得ステップを含む、請求項1記載の音楽再生プログラム。
【請求項3】
前記テンポ調整ステップは、
前記予測値と前記再生サンプル数との誤差を算出する、誤差算出ステップ、および
前記誤差に基づいて、前記シーケンス再生ステップにおけるテンポを増減する、テンポ増減ステップを含む、請求項2記載の音楽再生プログラム。
【請求項4】
前記テンポ増減ステップは、前記誤差の大きさに応じて非線形な関係のテンポ増減率に応じてテンポを修正する、請求項3記載の音楽再生プログラム。
【請求項5】
音源手段、
前記音源手段を制御するための音源制御シーケンスデータおよびテンポならびに音楽ストリーミングデータを記憶する記憶手段、
音楽再生開始指示に応じて、前記記憶手段に記憶されたストリーミングデータに基づいて音楽を再生するストリーミング再生手段、
前記音楽再生開始指示に応じて、前記記憶手段に記憶された音源制御シーケンスデータおよびテンポに基づいて、前記音源手段から音楽を再生するシーケンス再生手段、
前記ストリーミング再生手段における再生経過を検出するストリーミング再生経過検出手段、および
前記再生経過に応じて前記シーケンス再生手段によるシーケンス再生のテンポを調整するテンポ調整手段を備える、音楽再生装置。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate


【公開番号】特開2007−298786(P2007−298786A)
【公開日】平成19年11月15日(2007.11.15)
【国際特許分類】
【出願番号】特願2006−127199(P2006−127199)
【出願日】平成18年5月1日(2006.5.1)
【出願人】(000233778)任天堂株式会社 (1,115)
【Fターム(参考)】