(57)【特許請求の範囲】
【請求項１】
楽曲を構成する各音の音高情報および再生タイミング情報を含む楽曲データを再生することによって当該楽曲の演奏を行う楽曲演奏装置において実行される楽曲演奏プログラムであって、
前記楽曲演奏装置のコンピュータに、
任意の音量で前記楽曲データを再生する機能を有する楽曲データ再生ライブラリを利用して、音量０で前記楽曲データを再生する無音再生処理を開始する無音再生開始ステップ、
前記無音再生処理中に、前記楽曲を構成する各音が無音で再生される毎に、当該無音で再生された音に関する音情報を音情報記憶領域に順次格納する音情報格納ステップ、
前記無音再生処理が開始された後に前記楽曲データを有音で再生する有音再生処理を、前記無音再生処理と並列に再生するように開始する有音再生開始ステップ、
前記有音再生処理中に、前記音情報記憶領域に記憶されている前記音情報を利用した情報処理を行う音情報利用ステップ、および、
前記有音再生処理が開始される前の期間において、前記無音再生処理における前記楽曲の再生速度を、前記有音再生処理における当該楽曲の再生速度よりも一時的に速くする再生速度制御ステップを実行させる、楽曲演奏プログラム。
【請求項２】
前記再生速度制御ステップでは、当該無音再生処理が開始されてから前記有音再生処理が開始されるまでの間は、前記無音再生処理における前記楽曲の再生速度を前記有音再生処理における当該楽曲の再生速度よりも速くし、前記有音再生処理が開始された後は、前記無音再生処理における前記楽曲の再生速度を前記有音再生処理における当該楽曲の再生速度と同じ再生速度にする、請求項１に記載の楽曲演奏プログラム。
【請求項３】
前記音情報記憶領域は、記憶装置の中に設定された一定容量の記憶領域であり、
前記音情報格納ステップでは、前記音情報記憶領域が満杯のときに当該音情報記憶領域に前記音情報を先入れ先出し方式で格納する、請求項１に記載の楽曲演奏プログラム。
【請求項４】
前記音情報記憶領域は、リングバッファである、請求項３に記載の楽曲演奏プログラム。
【請求項５】
前記楽曲演奏プログラムは、
前記無音再生処理が開始された後、前記有音再生処理が開始される前に前記無音再生処理を一時停止する一時停止ステップ、および、
前記有音再生処理が開始されたときに前記無音再生処理を再開する再開ステップを前記コンピュータにさらに実行させる、請求項１に記載の楽曲演奏プログラム。
【請求項６】
前記楽曲データは、ＭＩＤＩデータである、請求項１に記載の楽曲演奏プログラム。
【請求項７】
前記楽曲演奏プログラムは、前記無音再生処理中に、前記ＭＩＤＩデータにおいて規定されているいずれかのトラックにおいて複数の音が同時に出力されたときに、当該同時に出力された複数の音を１つのグループとして関連付ける和音データを生成して和音データ記憶領域に格納する和音データ格納ステップを前記コンピュータにさらに実行させる、請求項６に記載の楽曲演奏プログラム。
【請求項８】
前記楽曲演奏プログラムは、
前記和音データ記憶領域に記憶されている和音データのうち、各トラックにおける最新の和音データをトラックデータとして記憶する最新和音記憶ステップ、
前記無音再生処理においていずれかの音が再生される毎に、当該再生された音と同一トラックかつ同一の再生タイミングの和音データが前記トラックデータとして記憶されているか否かを判断する最新和音判断ステップ、および、
前記最新和音判断ステップにおける判断結果が肯定である場合に、前記再生された音を前記再生された音と同一トラックかつ同一の再生タイミングの和音データに関連づける和音関連付けステップを前記コンピュータにさらに実行させる、請求項７に記載の楽曲演奏プログラム。
【請求項９】
前記楽曲演奏装置は、表示装置を備え、
前記音情報利用ステップでは、前記有音再生処理中に、前記音情報記憶領域に記憶されている前記音情報に基づいて譜面の画像を生成して前記表示装置に出力する、請求項１に記載の楽曲演奏プログラム。
【請求項１０】
前記楽曲演奏装置は、入力装置を備え、
前記楽曲演奏プログラムは、前記有音再生処理中に前記入力装置からの入力を検知する入力検知ステップを前記コンピュータにさらに実行させ、
前記音情報利用ステップは、
前記入力検知ステップで検知した前記入力装置からの入力のタイミングと前記楽曲データに基づく理想の入力タイミングとのズレ幅を計算するズレ幅計算ステップ、および、
前記ズレ幅計算ステップで計算されたズレ幅に基づいて前記音情報記憶領域に記憶されている前記音情報の一部または全てを変更する音情報変更ステップを含み、
前記有音再生ステップは、前記変更された音情報に基づいて音を発生させる音発生ステップを含む、請求項１に記載の楽曲演奏プログラム。
【請求項１１】
前記音情報には、前記再生タイミング情報が少なくとも含まれており、
前記音情報変更ステップでは、前記計算されたズレ幅に基づいて、前記音情報記憶領域に記憶されている前記音情報に含まれる前記再生タイミング情報を変更する、請求項１０に記載の楽曲演奏プログラム。
【請求項１２】
前記音情報変更ステップでは、前記計算されたズレ幅が大きいほど前記音情報の変化量を大きくする、請求項１０に記載の楽曲演奏プログラム。
【請求項１３】
前記楽曲演奏装置は、操作強度検出機能を有する入力装置を備え、
前記音情報には、各音の音長情報が少なくとも含まれており、
前記楽曲演奏プログラムは、前記有音再生処理中に前記入力装置に対する操作強度を検知する操作強度検知ステップを前記コンピュータにさらに実行させ、
前記音情報利用ステップでは、前記操作強度検知ステップで検知した前記入力装置に対する操作強度に基づいて、前記音情報記憶領域に記憶されている前記音情報に含まれる前記音長情報を変更する、請求項１に記載の楽曲演奏プログラム。
【請求項１４】
楽曲を構成する各音の音高情報および再生タイミング情報を含む楽曲データを再生することによって当該楽曲の演奏を行う楽曲演奏装置であって、
任意の音量で前記楽曲データを再生する機能を有する楽曲データ再生ライブラリを利用して、音量０で前記楽曲データを再生する無音再生処理を開始する無音再生開始手段、
前記無音再生処理中に、前記楽曲を構成する各音が無音で再生される毎に、当該無音で再生された音に関する音情報を音情報記憶領域に順次格納する音情報格納手段、
前記無音再生処理が開始された後に前記楽曲データを有音で再生する有音再生処理を、前記無音再生処理と並列に再生するように開始する有音再生開始手段、
前記有音再生処理中に、前記音情報記憶領域に記憶されている前記音情報を利用した情報処理を行う音情報利用手段、および、
前記有音再生処理が開始される前の期間において、前記無音再生処理における前記楽曲の再生速度を、前記有音再生処理における当該楽曲の再生速度よりも一時的に速くする再生速度制御手段を備える、楽曲演奏装置。
【請求項１５】
楽曲を構成する各音の音高情報および再生タイミング情報を含む楽曲データを再生することによって当該楽曲の演奏を行う楽曲演奏装置において実行される楽曲演奏方法であって、
前記楽曲演奏装置の無音再生開始手段により、任意の音量で前記楽曲データを再生する機能を有する楽曲データ再生ライブラリを利用して、音量０で前記楽曲データを再生する無音再生処理を開始する無音再生開始ステップ、
前記楽曲演奏装置の音情報格納手段により、前記無音再生処理中に、前記楽曲を構成する各音が無音で再生される毎に、当該無音で再生された音に関する音情報を音情報記憶領域に順次格納する音情報格納ステップ、
前記楽曲演奏装置の有音再生開始手段により、前記無音再生処理が開始された後に前記楽曲データを有音で再生する有音再生処理を、前記無音再生処理と並列に再生するように開始する有音再生開始ステップ、
前記楽曲演奏装置の音情報利用手段により、前記有音再生処理中に、前記音情報記憶領域に記憶されている前記音情報を利用した情報処理を行う音情報利用ステップ、および、
前記楽曲演奏装置の再生速度制御手段により、前記有音再生処理が開始される前の期間において、前記無音再生処理における前記楽曲の再生速度を、前記有音再生処理における当該楽曲の再生速度よりも一時的に速くする再生速度制御ステップを備える、楽曲演奏方法。
【請求項１６】
楽曲を構成する各音の音高情報および再生タイミング情報を含む楽曲データを再生することによって当該楽曲の演奏を行う楽曲演奏システムであって、
任意の音量で前記楽曲データを再生する機能を有する楽曲データ再生ライブラリを利用して、音量０で前記楽曲データを再生する無音再生処理を開始する無音再生開始手段、
前記無音再生処理中に、前記楽曲を構成する各音が無音で再生される毎に、当該無音で再生された音に関する音情報を音情報記憶領域に順次格納する音情報格納手段、
前記無音再生処理が開始された後に前記楽曲データを有音で再生する有音再生処理を、前記無音再生処理と並列に再生するように開始する有音再生開始手段、
前記有音再生処理中に、前記音情報記憶領域に記憶されている前記音情報を利用した情報処理を行う音情報利用手段、および、
前記有音再生処理が開始される前の期間において、前記無音再生処理における前記楽曲の再生速度を、前記有音再生処理における当該楽曲の再生速度よりも一時的に速くする再生速度制御手段を備える、楽曲演奏システム。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、楽曲演奏プログラム、楽曲演奏装置、楽曲演奏方法、および楽曲演奏システムに関し、より特定的には、楽曲を構成する各音の音高情報および再生タイミング情報を含む楽曲データを再生することによって当該楽曲の演奏を行うための楽曲演奏プログラム、楽曲演奏装置、楽曲演奏方法、および楽曲演奏システムに関する。
【背景技術】
【０００２】
特許文献１に記載されている楽曲演出ゲーム機は、予め用意された楽曲に合わせてプレイヤが鍵盤キーやスライドディスクを用いて演出操作を行うためのゲーム機である。この楽曲演出ゲーム機では、再生される楽曲の演奏用データとして、操作タイミングデータ及び自動演奏タイミングデータが用意されている。操作タイミングデータは、鍵盤キーやスライドディスクの操作タイミングを定義したデータであり、自動演奏タイミングデータは、鍵盤キーやスライドディスクの操作がなくても演出効果音を所定のタイミングで発生させるためのデータである。モニタには、プレイヤが鍵盤キーやスライドディスクを操作するタイミングを指示するためのインジケータが表示される。このインジケータは、操作タイミングデータに基づいて生成されるものであり、現在の演奏位置から一定範囲の楽曲部分に対応する操作タイミングを示している。
【特許文献１】特開２０００−３５０８６１号公報
【発明の開示】
【発明が解決しようとする課題】
【０００３】
上述の楽曲演出ゲーム機では、自動演奏タイミングデータにより演出効果音が発生している中を、画面上に提示された操作タイミングでプレイヤが鍵盤キーやスライドディスクの操作を行う。その為、当該楽曲演出ゲーム機では、楽曲演出ゲーム機用に特別に作成された操作タイミングデータ及び自動演奏タイミングデータを用いる必要があるので、汎用的な楽曲データをそのまま当該楽曲演出ゲーム機で利用することはできなかった。また、操作タイミングデータと自動演奏タイミングデータには、お互いに重複するデータが含まれており、データ容量の面で無駄があった。
【０００４】
それゆえに本発明は、汎用的な楽曲データを単に楽曲を演奏するためだけに利用するのではなく、その他の種々の用途にも容易に流用可能な楽曲演奏プログラム、楽曲演奏装置、楽曲演奏方法、および楽曲演奏システムを提供することを目的とする。
【課題を解決するための手段】
【０００５】
上記目的を達成するために、本発明は以下のように構成される。なお、括弧内の参照符号は、本発明の理解を助けるために図面との対応関係の一例を示したものであって、本発明の範囲を何ら限定するものではない。
【０００６】
本発明の楽曲演奏プログラム（１２１）は、楽曲を構成する各音の音高情報および再生タイミング情報を含む楽曲データ（１２６）を再生することによって当該楽曲の演奏を行う楽曲演奏装置（３）において実行される楽曲演奏プログラム（１２１）である。当該楽曲演奏プログラムは、楽曲演奏装置のコンピュータ（１０）に、無音再生開始ステップ（Ｓ１１）、音情報格納ステップ（Ｓ１２、Ｓ１８）、有音再生開始ステップ（Ｓ１７）、および、音情報利用ステップ（Ｓ１９、Ｓ７９）を実行させる。無音再生開始ステップは、楽曲データを無音で再生する無音再生処理を開始するステップである。音情報格納ステップは、無音再生処理中に、楽曲を構成する各音が無音で再生される毎に、当該無音で再生された音に関する音情報を音情報記憶領域（１２３）に順次格納するステップである。有音再生開始ステップは、無音再生処理が開始された後に楽曲データを有音で再生する有音再生処理を、無音再生処理と並列に再生するように開始するステップである。音情報利用ステップは、有音再生処理中に、音情報記憶領域に記憶されている音情報を利用した情報処理を行うステップである。
【０００７】
楽曲演奏プログラムは、前記有音再生処理が開始される前の期間において、無音再生処理における楽曲の再生速度を、有音再生処理における当該楽曲の再生速度よりも一時的に速くする再生速度制御ステップ（Ｓ１１）をさらにコンピュータに実行させてもよい。これにより、楽曲の演奏（有音再生）が開始されるまでの待ち時間を減らすことができる。
【０００８】
再生速度制御ステップでは、当該無音再生処理が開始されてから有音再生処理が開始されるまでの間は、無音再生処理における楽曲の再生速度を有音再生処理における当該楽曲の再生速度よりも速くし（Ｓ１１）、有音再生処理が開始された後は、無音再生処理における楽曲の再生速度を有音再生処理における当該楽曲の再生速度と同じ再生速度にしてもよい（Ｓ１６）。これにより、楽曲の演奏（有音再生）が開始されるまでの待ち時間を減らすことができ、かつ音情報記憶領域の記憶容量を節約することができる。
【０００９】
無音再生処理は、任意の音量で楽曲データを再生する機能を有する楽曲データ再生ライブラリ（１２２）を利用して、音量０で楽曲データを再生する処理であってもよい。これにより、既存の楽曲データ再生ライブラリを流用して音情報を容易に取得することができる。
【００１０】
音情報記憶領域は、記憶装置（１２）の中に設定された一定容量の記憶領域であり、音情報格納ステップでは、音情報記憶領域が満杯のときに当該音情報記憶領域に音情報を先入れ先出し方式で格納してもよい。これにより、音情報記憶領域の記憶容量を節約することができる。
【００１１】
音情報記憶領域は、リングバッファであってもよい。これにより、音情報記憶領域における音情報の管理（例えば、新規に生成された音情報を最も古い音情報に上書きする等の処理）が容易となる。
【００１２】
楽曲演奏プログラムは、無音再生処理が開始された後、有音再生処理が開始される前に無音再生処理を一時停止する一時停止ステップ（Ｓ１４）、および、有音再生処理が開始されたときに無音再生処理を再開する再開ステップ（Ｓ１６）をコンピュータにさらに実行させてもよい。これにより、有音再生の開始タイミングを制御することができる。
【００１３】
楽曲データは、ＭＩＤＩデータ（１２６）であってもよい。
【００１４】
楽曲演奏プログラムは、無音再生処理中に、ＭＩＤＩデータにおいて規定されているいずれかのトラックにおいて複数の音が同時に出力されたときに、当該同時に出力された複数の音を１つのグループとして関連付ける和音データを生成して和音データ記憶領域（１２４）に格納する和音データ格納ステップ（Ｓ３６）をコンピュータにさらに実行させてもよい。これにより、音情報利用ステップにおいて音情報が利用しやすくなる。
【００１５】
楽曲演奏プログラムは、和音データ記憶領域に記憶されている和音データのうち、各トラックにおける最新の和音データをトラックデータ（１２５）として記憶する最新和音記憶ステップ（Ｓ３８）、無音再生処理においていずれかの音が再生される毎に、当該再生された音と同一トラックかつ同一の再生タイミングの和音データがトラックデータとして記憶されているか否かを判断する最新和音判断ステップ（Ｓ３４）、および、最新和音判断ステップにおける判断結果が肯定である場合に、再生された音を再生された音と同一トラックかつ同一の再生タイミングの和音データに関連づける和音関連付けステップ（Ｓ３７）をコンピュータにさらに実行させてもよい。
【００１６】
楽曲演奏装置は、表示装置（２）を備え、音情報利用ステップでは、有音再生処理中に、音情報記憶領域に記憶されている音情報に基づいて譜面の画像を生成して表示装置に出力してもよい。
【００１７】
楽曲演奏装置は、入力装置（７）を備え、楽曲演奏プログラムは、有音再生処理中に入力装置からの入力を検知する入力検知ステップ（Ｓ９０）をコンピュータにさらに実行させ、音情報利用ステップは、入力検知ステップで検知した入力装置からの入力のタイミングと楽曲データに基づく理想の入力タイミングとのズレ幅を計算するズレ幅計算ステップ（Ｓ９１）、および、ズレ幅計算ステップで計算されたズレ幅に基づいて音情報記憶領域に記憶されている音情報の一部または全てを変更する音情報変更ステップ（Ｓ９２）を含み、有音再生ステップは、変更された音情報に基づいて音を発生させる音発生ステップ（Ｓ９５）を含んでいてもよい。これにより、例えば音の再生タイミングや音高や音長をリアルタイムに変えながら楽曲を演奏することが容易となる。
【００１８】
音情報には、再生タイミング情報が少なくとも含まれており、音情報変更ステップでは、計算されたズレ幅に基づいて、音情報記憶領域に記憶されている音情報に含まれる再生タイミング情報を変更してもよい。
【００１９】
音情報変更ステップでは、計算されたズレ幅が大きいほど音情報の変化量を大きくしてもよい。
【００２０】
楽曲演奏装置は、操作強度検出機能（７０１）を有する入力装置（７）を備え、音情報には、各音の音長情報が少なくとも含まれており、楽曲演奏プログラムは、有音再生処理中に入力装置に対する操作強度を検知する操作強度検知ステップをコンピュータにさらに実行させ、音情報利用ステップでは、操作強度検知ステップで検知した入力装置に対する操作強度に基づいて、音情報記憶領域に記憶されている音情報に含まれる音長情報を変更してもよい。
【００２１】
本発明の楽曲演奏装置（３）は、楽曲を構成する各音の音高情報および再生タイミング情報を含む楽曲データ（１２６）を再生することによって当該楽曲の演奏を行う装置であって、無音再生開始手段（１０、Ｓ１１）、音情報格納手段（１０、Ｓ１２、Ｓ１８）、有音再生開始手段（１０、Ｓ１７）、および、音情報利用手段（１０、Ｓ１９、Ｓ７９）を備える。無音再生開始手段は、楽曲データを無音で再生する無音再生処理を開始する手段である。音情報格納手段は、無音再生処理中に、楽曲を構成する各音が無音で再生される毎に、当該無音で再生された音に関する音情報を音情報記憶領域（１２３）に順次格納する手段である。有音再生開始手段は、無音再生処理が開始された後に楽曲データを有音で再生する有音再生処理を、無音再生処理と並列に再生するように開始する手段である。音情報利用手段は、有音再生処理中に、音情報記憶領域に記憶されている音情報を利用した情報処理を行う手段（１０、Ｓ１９、Ｓ７９）である。
【発明の効果】
【００２２】
本発明によれば、汎用的な楽曲データを単に楽曲を演奏するためだけに利用するのではなく、その他の種々の用途にも容易に流用することができる。
【発明を実施するための最良の形態】
【００２３】
以下、図面を参照して、本発明の種々の実施形態について説明する。
【００２４】
まず、本発明を実施するためのハードウェア構成の一例を説明する。ここでは、本発明をゲームシステムに適用した例を説明する。
【００２５】
（ゲームシステムの全体構成）
図１を参照して、本発明の一実施形態に係るゲーム装置を含むゲームシステム１について説明する。図１は、ゲームシステム１の外観図である。以下、据置型のゲーム装置を一例にして、本実施形態のゲーム装置およびゲームプログラムについて説明する。図１において、ゲームシステム１は、テレビジョン受像器（以下、単に「テレビ」と記載する）２、ゲーム装置３、光ディスク４、マーカ部６、およびコントローラ７を含む。本システムは、コントローラ７を用いたゲーム操作に基づいてゲーム装置３でゲーム処理を実行するものである。
【００２６】
ゲーム装置３には、当該ゲーム装置３に対して交換可能に用いられる情報記憶媒体の一例である光ディスク４が脱着可能に挿入される。光ディスク４には、ゲーム装置３において実行されるためのゲームプログラムが記憶されている。ゲーム装置３の前面には光ディスク４の挿入口が設けられている。ゲーム装置３は、挿入口に挿入された光ディスク４に記憶されたゲームプログラムを読み出して実行することによってゲーム処理を実行する。
【００２７】
ゲーム装置３には、表示装置の一例であるテレビ２が接続コードを介して接続される。テレビ２は、ゲーム装置３において実行されるゲーム処理の結果得られるゲーム画像を表示する。また、テレビ２の画面の周辺（図１では画面の上側）には、マーカ部６が設置される。マーカ部６は、その両端に２つのマーカ６Ｒおよび６Ｌを備えている。マーカ６Ｒ（マーカ６Ｌも同様）は、具体的には１以上の赤外ＬＥＤであり、テレビ２の前方に向かって赤外光を出力する。マーカ部６はゲーム装置３に接続されており、ゲーム装置３はマーカ部６が備える各赤外ＬＥＤの点灯を制御することが可能である。
【００２８】
コントローラ７は、自機に対して行われた操作の内容を示す操作データをゲーム装置３に与える入力装置である。コントローラ７とゲーム装置３とは無線通信によって接続される。本実施形態では、コントローラ７とゲーム装置３との間の無線通信には例えばＢｌｕｅｔｏｏｔｈ（ブルートゥース）（登録商標）の技術が用いられる。なお、他の実施形態においてはコントローラ７とゲーム装置３とは有線で接続されてもよい。
【００２９】
（ゲーム装置３の内部構成）
次に、図２を参照して、ゲーム装置３の内部構成について説明する。図２は、ゲーム装置３の構成を示すブロック図である。ゲーム装置３は、ＣＰＵ１０、システムＬＳＩ１１、外部メインメモリ１２、ＲＯＭ／ＲＴＣ１３、ディスクドライブ１４、およびＡＶ−ＩＣ１５等を有する。
【００３０】
ＣＰＵ１０は、光ディスク４に記憶されたゲームプログラムを実行することによってゲーム処理を実行するものであり、ゲームプロセッサとして機能する。ＣＰＵ１０は、システムＬＳＩ１１に接続される。システムＬＳＩ１１には、ＣＰＵ１０の他、外部メインメモリ１２、ＲＯＭ／ＲＴＣ１３、ディスクドライブ１４およびＡＶ−ＩＣ１５が接続される。システムＬＳＩ１１は、それに接続される各構成要素間のデータ転送の制御、表示すべき画像の生成、外部装置からのデータの取得等の処理を行う。システムＬＳＩの内部構成について後述する。揮発性の外部メインメモリ１２は、光ディスク４から読み出されたゲームプログラムや、フラッシュメモリ１７から読み出されたゲームプログラム等のプログラムを記憶したり、各種データを記憶したりするものであり、ＣＰＵ１０のワーク領域やバッファ領域として用いられる。ＲＯＭ／ＲＴＣ１３は、ゲーム装置３の起動用のプログラムが組み込まれるＲＯＭ（いわゆるブートＲＯＭ）と、時間をカウントするクロック回路（ＲＴＣ：Ｒｅａｌ  Ｔｉｍｅ  Ｃｌｏｃｋ）とを有する。ディスクドライブ１４は、光ディスク４からプログラムデータやテクスチャデータ等を読み出し、後述する内部メインメモリ１１ｅまたは外部メインメモリ１２に読み出したデータを書き込む。
【００３１】
また、システムＬＳＩ１１には、入出力プロセッサ（Ｉ／Ｏプロセッサ）１１ａ、ＧＰＵ（Ｇｒａｐｈｉｃｓ  Ｐｒｏｃｅｓｓｏｒ  Ｕｎｉｔ）１１ｂ、ＤＳＰ（Ｄｉｇｉｔａｌ  Ｓｉｇｎａｌ  Ｐｒｏｃｅｓｓｏｒ）１１ｃ、ＶＲＡＭ１１ｄ、および内部メインメモリ１１ｅが設けられる。図示は省略するが、これらの構成要素１１ａ〜１１ｅは内部バスによって互いに接続される。
【００３２】
ＧＰＵ１１ｂは、描画手段の一部を形成し、ＣＰＵ１０からのグラフィクスコマンド（作画命令）に従って画像を生成する。ＶＲＡＭ１１ｄは、ＧＰＵ１１ｂがグラフィクスコマンドを実行するために必要なデータ（ポリゴンデータやテクスチャデータ等のデータ）を記憶する。画像が生成される際には、ＧＰＵ１１ｂは、ＶＲＡＭ１１ｄに記憶されたデータを用いて画像データを作成する。
【００３３】
ＤＳＰ１１ｃは、オーディオプロセッサとして機能し、内部メインメモリ１１ｅや外部メインメモリ１２に記憶されるサウンドデータや音波形（音色）データを用いて、音声データを生成する。
【００３４】
上述のように生成された画像データおよび音声データは、ＡＶ−ＩＣ１５によって読み出される。ＡＶ−ＩＣ１５は、読み出した画像データをＡＶコネクタ１６を介してテレビ２に出力するとともに、読み出した音声データを、テレビ２に内蔵されるスピーカ２ａに出力する。これによって、画像がテレビ２に表示されるとともに音がスピーカ２ａから出力される。
【００３５】
入出力プロセッサ１１ａは、それに接続される構成要素との間でデータの送受信を実行したり、外部装置からのデータのダウンロードを実行したりする。入出力プロセッサ１１ａは、フラッシュメモリ１７、無線通信モジュール１８、無線コントローラモジュール１９、拡張コネクタ２０、およびメモリカード用コネクタ２１に接続される。無線通信モジュール１８にはアンテナ２２が接続され、無線コントローラモジュール１９にはアンテナ２３が接続される。
【００３６】
入出力プロセッサ１１ａは、無線通信モジュール１８およびアンテナ２２を介してネットワークに接続し、ネットワークに接続される他のゲーム装置や各種サーバと通信することができる。入出力プロセッサ１１ａは、定期的にフラッシュメモリ１７にアクセスし、ネットワークへ送信する必要があるデータの有無を検出し、当該データが有る場合には、無線通信モジュール１８およびアンテナ２２を介してネットワークに送信する。また、入出力プロセッサ１１ａは、他のゲーム装置から送信されてくるデータやダウンロードサーバからダウンロードしたデータを、ネットワーク、アンテナ２２および無線通信モジュール１８を介して受信し、受信したデータをフラッシュメモリ１７に記憶する。ＣＰＵ１０はゲームプログラムを実行することにより、フラッシュメモリ１７に記憶されたデータを読み出してゲームプログラムで利用する。フラッシュメモリ１７には、ゲーム装置３と他のゲーム装置や各種サーバとの間で送受信されるデータの他、ゲーム装置３を利用してプレイしたゲームのセーブデータ（ゲームの結果データまたは途中データ）が記憶されてもよい。
【００３７】
また、入出力プロセッサ１１ａは、コントローラ７から送信される操作データをアンテナ２３および無線コントローラモジュール１９を介して受信し、内部メインメモリ１１ｅまたは外部メインメモリ１２のバッファ領域に記憶（一時記憶）する。
【００３８】
さらに、入出力プロセッサ１１ａには、拡張コネクタ２０およびメモリカード用コネクタ２１が接続される。拡張コネクタ２０は、ＵＳＢやＳＣＳＩのようなインターフェースのためのコネクタであり、外部記憶媒体のようなメディアを接続したり、他のコントローラのような周辺機器を接続したり、有線の通信用コネクタを接続することによって無線通信モジュール１８に替えてネットワークとの通信を行ったりすることができる。メモリカード用コネクタ２１は、メモリカードのような外部記憶媒体を接続するためのコネクタである。例えば、入出力プロセッサ１１ａは、拡張コネクタ２０やメモリカード用コネクタ２１を介して、外部記憶媒体にアクセスし、データを保存したり、データを読み出したりすることができる。
【００３９】
ゲーム装置３には、電源ボタン２４、リセットボタン２５、およびイジェクトボタン２６が設けられる。電源ボタン２４およびリセットボタン２５は、システムＬＳＩ１１に接続される。電源ボタン２４がオンされると、ゲーム装置３の各構成要素に対して、図示しないＡＣアダプタを経て電源が供給される。リセットボタン２５が押されると、システムＬＳＩ１１は、ゲーム装置３の起動プログラムを再起動する。イジェクトボタン２６は、ディスクドライブ１４に接続される。イジェクトボタン２６が押されると、ディスクドライブ１４から光ディスク４が排出される。
【００４０】
図３および図４を参照して、コントローラ７について説明する。なお、図３は、コントローラ７の上面後方から見た斜視図である。図４は、コントローラ７を下面前方から見た斜視図である。
【００４１】
図３および図４において、コントローラ７は、例えばプラスチック成型によって形成されたハウジング７１を有しており、当該ハウジング７１に複数の操作部７２が設けられている。ハウジング７１は、その前後方向を長手方向とした略直方体形状を有しており、全体として大人や子供の片手で把持可能な大きさである。
【００４２】
ハウジング７１上面の中央前面側に、十字キー７２ａが設けられる。この十字キー７２ａは、十字型の４方向プッシュスイッチであり、４つの方向（前後左右）に対応する操作部分が十字の突出片にそれぞれ９０°間隔で配置される。プレイヤが十字キー７２ａのいずれかの操作部分を押下することによって前後左右いずれかの方向を選択される。例えばプレイヤが十字キー７２ａを操作することによって、仮想ゲーム世界に登場するプレイヤキャラクタ等の移動方向を指示したり、複数の選択肢から選択指示したりすることができる。
【００４３】
なお、十字キー７２ａは、上述したプレイヤの方向入力操作に応じて操作信号を出力する操作部であるが、他の態様の操作部でもかまわない。例えば、十字方向に４つのプッシュスイッチを配設し、プレイヤによって押下されたプッシュスイッチに応じて操作信号を出力する操作部を設けてもかまわない。さらに、上記４つのプッシュスイッチとは別に、上記十字方向が交わる位置にセンタスイッチを配設し、４つのプッシュスイッチとセンタスイッチとを複合した操作部を設けてもかまわない。また、ハウジング７１上面から突出した傾倒可能なスティック（いわゆる、ジョイスティック）を倒すことによって、傾倒方向に応じて操作信号を出力する操作部を上記十字キー７２ａの代わりに設けてもかまわない。さらに、水平移動可能な円盤状部材をスライドさせることによって、当該スライド方向に応じた操作信号を出力する操作部を、上記十字キー７２ａの代わりに設けてもかまわない。また、タッチパッドを、上記十字キー７２ａの代わりに設けてもかまわない。
【００４４】
ハウジング７１上面の十字キー７２ａより後面側に、複数の操作ボタン７２ｂ〜７２ｇが設けられる。操作ボタン７２ｂ〜７２ｇは、プレイヤがボタン頭部を押下することによって、それぞれの操作ボタン７２ｂ〜７２ｇに割り当てられた操作信号を出力する操作部である。例えば、操作ボタン７２ｂ〜７２ｄには、１番ボタン、２番ボタン、およびＡボタン等としての機能が割り当てられる。また、操作ボタン７２ｅ〜７２ｇには、マイナスボタン、ホームボタン、およびプラスボタン等としての機能が割り当てられる。これら操作ボタン７２ａ〜７２ｇは、ゲーム装置３が実行するゲームプログラムに応じてそれぞれの操作機能が割り当てられる。なお、図３に示した配置例では、操作ボタン７２ｂ〜７２ｄは、ハウジング７１上面の中央前後方向に沿って並設されている。また、操作ボタン７２ｅ〜７２ｇは、ハウジング７１上面の左右方向に沿って操作ボタン７２ｂおよび７２ｄの間に並設されている。そして、操作ボタン７２ｆは、その上面がハウジング７１の上面に埋没しており、プレイヤが不意に誤って押下することのないタイプのボタンである。
【００４５】
また、ハウジング７１上面の十字キー７２ａより前面側に、操作ボタン７２ｈが設けられる。操作ボタン７２ｈは、遠隔からゲーム装置３の電源をオン／オフする電源スイッチである。この操作ボタン７２ｈも、その上面がハウジング７１の上面に埋没しており、プレイヤが不意に誤って押下することのないタイプのボタンである。
【００４６】
また、ハウジング７１上面の操作ボタン７２ｃより後面側に、複数のＬＥＤ７０２が設けられる。ここで、コントローラ７は、他のコントローラ７と区別するためにコントローラ種別（番号）が設けられている。例えば、ＬＥＤ７０２は、コントローラ７に現在設定されている上記コントローラ種別をプレイヤに通知するために用いられる。具体的には、コントローラ７から無線通信モジュール１８へ送信データを送信する際、上記コントローラ種別に応じて複数のＬＥＤ７０２のうち、種別に対応するＬＥＤが点灯する。
【００４７】
また、ハウジング７１上面には、操作ボタン７２ｂおよび操作ボタン７２ｅ〜７２ｇの間に後述するスピーカ（図５のスピーカ７０６）からの音を外部に放出するための音抜き孔が形成されている。
【００４８】
一方、ハウジング７１下面には、凹部が形成されている。ハウジング７１下面の凹部は、プレイヤがコントローラ７の前面をマーカ６Ｌおよび６Ｒに向けて片手で把持したときに、当該プレイヤの人差し指や中指が位置するような位置に形成される。そして、上記凹部の後面側傾斜面には、操作ボタン７２ｉが設けられる。操作ボタン７２ｉは、例えばＢボタンとして機能する操作部である。
【００４９】
また、ハウジング７１前面には、撮像情報演算部７４の一部を構成する撮像素子７４３が設けられる。ここで、撮像情報演算部７４は、コントローラ７が撮像した画像データを解析してその中で輝度が高い場所を判別してその場所の重心位置やサイズなどを検出するためのシステムであり、例えば、最大２００フレーム／秒程度のサンプリング周期であるため比較的高速なコントローラ７の動きでも追跡して解析することができる。この撮像情報演算部７４の詳細な構成については、後述する。また、ハウジング７１の後面には、コネクタ７３が設けられている。コネクタ７３は、例えばエッジコネクタであり、例えば接続ケーブルと嵌合して接続するために利用される。
【００５０】
ここで、以下の説明を具体的にするために、コントローラ７に対して設定する座標系について定義する。図３および図４に示すように、互いに直交するＸＹＺ軸をコントローラ７に対して定義する。具体的には、コントローラ７の前後方向となるハウジング７１の長手方向をＺ軸とし、コントローラ７の前面（撮像情報演算部７４が設けられている面）方向をＺ軸正方向とする。また、コントローラ７の上下方向をＹ軸とし、ハウジング７１の下面（操作ボタン７２ｉが設けられた面）方向をＹ軸正方向とする。さらに、コントローラ７の左右方向をＸ軸とし、ハウジング７１の左側面（図３では表されずに図４で表されている側面）方向をＸ軸正方向とする。
【００５１】
次に、図５および図６を参照して、コントローラ７の内部構造について説明する。なお、図５は、コントローラ７の上筐体（ハウジング７１の一部）を外した状態を後面側から見た斜視図である。図６は、コントローラ７の下筐体（ハウジング７１の一部）を外した状態を前面側から見た斜視図である。ここで、図６に示す基板７００は、図５に示す基板７００の裏面から見た斜視図となっている。
【００５２】
図５において、ハウジング７１の内部には基板７００が固設されており、当該基板７００の上主面上に操作ボタン７２ａ〜７２ｈ、加速度センサ７０１、ＬＥＤ７０２、およびアンテナ７５４等が設けられる。そして、これらは、基板７００等に形成された配線（図示せず）によってマイコン７５１等（図６、図７参照）に接続される。また、無線モジュール７５３（図７参照）およびアンテナ７５４によって、コントローラ７がワイヤレスコントローラとして機能する。なお、ハウジング７１内部には図示しない水晶振動子７０３が設けられており、後述するマイコン７５１の基本クロックを生成する。また、基板７００の上主面上に、スピーカ７０６およびアンプ７０８が設けられる。また、加速度センサ７０１は、操作ボタン７２ｄの左側の基板７００上（つまり、基板７００の中央部ではなく周辺部）に設けられる。したがって、加速度センサ７０１は、コントローラ７の長手方向を軸とした回転に応じて、重力加速度の方向変化に加え、遠心力による成分の含まれる加速度を検出することができるので、所定の演算により、検出される加速度データからコントローラ７の回転を良好な感度でゲーム装置３等が判定することができる。
【００５３】
一方、図６において、基板７００の下主面上の前端縁に撮像情報演算部７４が設けられる。撮像情報演算部７４は、コントローラ７の前方から順に赤外線フィルタ７４１、レンズ７４２、撮像素子７４３、および画像処理回路７４４によって構成されており、それぞれ基板７００の下主面に取り付けられる。また、基板７００の下主面上の後端縁にコネクタ７３が取り付けられる。さらに、基板７００の下主面上にサウンドＩＣ７０７およびマイコン７５１が設けられている。サウンドＩＣ７０７は、基板７００等に形成された配線によってマイコン７５１およびアンプ７０８と接続され、ゲーム装置３から送信されたサウンドデータに応じてアンプ７０８を介してスピーカ７０６に音声信号を出力する。
【００５４】
そして、基板７００の下主面上には、バイブレータ７０４が取り付けられる。バイブレータ７０４は、例えば振動モータやソレノイドである。バイブレータ７０４は、基板７００等に形成された配線によってマイコン７５１と接続され、ゲーム装置３から送信された振動データに応じてその作動をオン／オフする。バイブレータ７０４が作動することによってコントローラ７に振動が発生するので、それを把持しているプレイヤの手にその振動が伝達され、いわゆる振動対応ゲームが実現できる。ここで、バイブレータ７０４は、ハウジング７１のやや前方寄りに配置されるため、プレイヤが把持している状態において、ハウジング７１が大きく振動することになり、振動を感じやすくなる。
【００５５】
次に、図７を参照して、コントローラ７の内部構成について説明する。なお、図７は、コントローラ７の構成を示すブロック図である。
【００５６】
図７において、コントローラ７は、上述した操作部７２、撮像情報演算部７４、加速度センサ７０１、バイブレータ７０４、スピーカ７０６、サウンドＩＣ７０７、およびアンプ７０８の他に、その内部に通信部７５を備えている。
【００５７】
撮像情報演算部７４は、赤外線フィルタ７４１、レンズ７４２、撮像素子７４３、および画像処理回路７４４を含んでいる。赤外線フィルタ７４１は、コントローラ７の前方から入射する光から赤外線のみを通過させる。レンズ７４２は、赤外線フィルタ７４１を透過した赤外線を集光して撮像素子７４３へ出射する。撮像素子７４３は、例えばＣＭＯＳセンサやあるいはＣＣＤのような固体撮像素子であり、レンズ７４２が集光した赤外線を撮像する。したがって、撮像素子７４３は、赤外線フィルタ７４１を通過した赤外線だけを撮像して画像データを生成する。撮像素子７４３で生成された画像データは、画像処理回路７４４で処理される。具体的には、画像処理回路７４４は、撮像素子７４３から得られた画像データを処理して高輝度部分を検知し、それらの位置座標や面積を検出した結果を示す処理結果データを通信部７５へ出力する。なお、これらの撮像情報演算部７４は、コントローラ７のハウジング７１に固設されており、ハウジング７１自体の方向を変えることによってその撮像方向を変更することができる。
【００５８】
コントローラ７は、３軸（Ｘ、Ｙ、Ｚ軸）の加速度センサ７０１を備えていることが好ましい。この３軸の加速度センサ７０１は、３方向、すなわち、上下方向（図３に示すＹ軸）、左右方向（図３に示すＸ軸）、および前後方向（図３に示すＺ軸）で直線加速度を検知する。
【００５９】
通信部７５は、マイクロコンピュータ（Ｍｉｃｒｏ  Ｃｏｍｐｕｔｅｒ：マイコン）７５１、メモリ７５２、無線モジュール７５３、およびアンテナ７５４を含んでいる。マイコン７５１は、処理の際にメモリ７５２を記憶領域として用いながら、送信データを無線送信する無線モジュール７５３を制御する。また、マイコン７５１は、アンテナ７５４を介して無線モジュール７５３が受信したゲーム装置３からのデータに応じて、サウンドＩＣ７０７およびバイブレータ７０４の動作を制御する。サウンドＩＣ７０７は、通信部７５を介してゲーム装置３から送信されたサウンドデータ等を処理する。また、マイコン７５１は、通信部７５を介してゲーム装置３から送信された振動データ（例えば、バイブレータ７０４をＯＮまたはＯＦＦする信号）等に応じて、バイブレータ７０４を作動させる。
【００６０】
コントローラ７に設けられた操作部７２からの操作信号（キーデータ）、加速度センサ７０１からの３軸方向の加速度信号（Ｘ、Ｙ、およびＺ軸方向加速度データ）、および撮像情報演算部７４からの処理結果データは、マイコン７５１に出力される。マイコン７５１は、入力した各データ（キーデータ、Ｘ、Ｙ、およびＺ軸方向加速度データ、処理結果データ）を無線通信モジュール１８へ送信する送信データとして一時的にメモリ７５２に格納する。ここで、通信部７５から無線通信モジュール１８への無線送信は、所定の周期毎に行われるが、ゲームの処理は１／６０秒を単位として行われることが一般的であるので、それよりも短い周期で送信を行うことが必要となる。具体的には、ゲームの処理単位は１６．７ｍｓ（１／６０秒）であり、ブルートゥース（登録商標）で構成される通信部７５の送信間隔は５ｍｓである。マイコン７５１は、無線通信モジュール１８への送信タイミングが到来すると、メモリ７５２に格納されている送信データを一連の操作情報として出力し、無線モジュール７５３へ出力する。そして、無線モジュール７５３は、例えばＢｌｕｅｔｏｏｔｈ（ブルートゥース；登録商標）の技術を用いて、所定周波数の搬送波を用いて操作情報をその電波信号としてアンテナ７５４から放射する。つまり、コントローラ７に設けられた操作部７２からのキーデータ、加速度センサ７０１からのＸ、Ｙ、およびＺ軸方向加速度データ、および撮像情報演算部７４からの処理結果データがコントローラ７から送信される。そして、ゲーム装置３の無線通信モジュール１８でその電波信号を受信し、ゲーム装置３で当該電波信号を復調や復号することによって、一連の操作情報（キーデータ、Ｘ、Ｙ、およびＺ軸方向加速度データ、および処理結果データ）を取得する。そして、ゲーム装置３のＣＰＵ１０は、取得した操作情報とゲームプログラムとに基づいて、ゲーム処理を行う。なお、Ｂｌｕｅｔｏｏｔｈ（登録商標）の技術を用いて通信部７５を構成する場合、通信部７５は、他のデバイスから無線送信された送信データを受信する機能も備えることができる。
【００６１】
なお、上記のようなハードウェア構成は単なる一例に過ぎず、本発明は任意のコンピュータシステムに適用可能である。
【００６２】
次に、本実施形態において実行される楽曲演奏処理の概要を説明する。
【００６３】
本実施形態では、光ディスク４等から外部メインメモリ１２（または内部メインメモリ１１ｅ）にロードされた楽曲演奏プログラムをＣＰＵ１０が実行することによって、楽曲演奏処理が行われる。外部メインメモリ１２のメモリマップの一例を図８に示す。図８のメモリマップで示されるプログラムやデータの詳細は、以下の説明により明らかになる。
【００６４】
本実施形態では、ＭＩＤＩ（Musical Instruments Digital Interface）規格に則った楽曲データ（ここでは単にＭＩＤＩデータと称す）に基づいて楽曲の演奏が行われる。なお、標準的なＭＩＤＩデータの例として、ＳＭＦ（標準ＭＩＤＩファイル）がある。
【００６５】
（ＭＩＤＩデータ）
以下、ＭＩＤＩデータ１２６について簡単に説明する。ＭＩＤＩデータ１２６では、楽曲に含まれる複数の音が１以上のトラック（譜面に相当する）で管理されている。つまり、楽曲に含まれる各音は、いずれかのトラックに所属する。トラックの数は、ここでは最大で１６とする。
【００６６】
ＭＩＤＩデータ１２６は、複数のＭＩＤＩイベントの集合体として表現される。ＭＩＤＩイベントには、音を鳴らすための「ノートイベント」や、トラック単位で音のボリュームや音色を変えたりするための「コントロールチェンジイベント」をはじめ、「ピッチベンドイベント」、「プログラムチェンジイベント」など、種々のＭＩＤＩイベントが存在する。
【００６７】
図９は、ＭＩＤＩデータ１２６の一例を示している。なお図９では、説明を簡単にするために、ＭＩＤＩイベントのうちのノートイベントだけを示しているが、実際には上述したように、ＭＩＤＩデータ１２６にはノートイベント以外のＭＩＤＩイベントも含まれている。図９における各行が１つのノートイベントに相当する。図９のＭＩＤＩデータ１２６は、図１０の譜面に対応している。「所属トラック」は、そのノートイベントによって鳴らされる音が、どのトラックに含まれる音かを示す情報である。「再生タイミング」は、音を鳴らすタイミングを示す情報であって、ティック（tick）という単位で表される。本実施形態では、１ティックは４分音符の長さの４８分の１に相当する長さであるものとする。「ノート長（デュレーション）」は、音の長さを示す情報であり、ティックで表される。「音高（ノートナンバー）」は、文字通り、音の高さである音高を示す情報である。図１１は、ＭＩＤＩデータ１２６における音高の値とピアノの鍵盤との対応関係を示している。「ベロシティ」は、音を鳴らす強さを示す情報である。なお、ノートイベントには、図９に示したパラメータ以外の情報が含まれていても良い。
【００６８】
ＭＩＤＩデータ１２６は、ＭＩＤＩプレイヤーと呼ばれるアプリケーションソフトウェアを用いて再生することができる。ＭＩＤＩプレイヤーは、一般的に、ＭＩＤＩデータ１２６に含まれるＭＩＤＩイベントを先頭から順番に処理することによって楽曲を再生する。なお、ＭＩＤＩプレイヤーとしての機能を有する既存のプログラムライブラリ（ここでは、楽曲データ再生ライブラリと称す）を利用すれば、ＭＩＤＩデータ１２６を再生するためのコンピュータプログラムを一から生成することなしに、ＭＩＤＩデータ１２６に基づいて簡単に楽曲を再生することが可能となる。本実施形態でも、このような楽曲データ再生ライブラリ１２２を利用して楽曲を再生する。
【００６９】
（本実施形態における楽曲演奏処理の概要）
ところで、楽曲データ再生ライブラリ１２２を用いてＭＩＤＩデータ１２６に基づいて楽曲を再生しているときに、現在鳴っている音よりも後に鳴る音（すなわち未来に鳴る音）に関する情報に基づいて、表示画像や出力音やゲーム内容等を変化させたいという要望がある。例えば、ＭＩＤＩデータ１２６に基づいて楽曲を再生している最中に、現在の演奏位置から２小節先までの部分の譜面を画面に表示したいという要望がある。前述のように、ノートイベントは音の音高、長さ、再生タイミング等の情報を含むため、譜面の画像を別途用意することなく、ＭＩＤＩデータ１２６に基づいて譜面の画像を生成することが可能である。しかしながら、現在の演奏位置から２小節先までの部分の譜面の画像を生成するためには、現在の演奏位置から２小節先までの部分に対応するノートイベントをＭＩＤＩデータから随時抽出して、抽出したノートイベントに基づいて譜面の画像を生成する必要がある。本実施形態では、このような複雑な処理を、非常に簡単なコンピュータプログラム（楽曲演奏プログラム１２１）によって実現している。
【００７０】
本実施形態では、ＭＩＤＩデータ１２６の有音での再生に先行して、楽曲データ再生ライブラリ１２２を用いて同一のＭＩＤＩデータ１２６を無音で再生し、この無音再生において発生したノートイベントに基づいてノートデータ（詳細は後述）を生成し、生成したノートデータを記憶領域に一時的に保持しておく。ここでは、前者の再生処理（有音での再生）を「本番再生」と称し、後者の再生処理（無音での再生）を「先読み再生」と称する。また、ノートデータを一時的に保持しておくための記憶領域を「ノートプール」と称する。ノートプール１２３は、例えば外部メインメモリ１２に設定された一定容量の記憶領域であって、ノートデータを先入れ先出し方式で記憶する。
【００７１】
図１２〜図１４を参照して、本番再生における現在の再生位置と、その時点においてノートプール１２３に格納されているノートデータとの対応関係を説明する。ここでは、時刻Ｔ０に先読み再生が開始され、時刻Ｔ１に本番再生が開始されるものとする。
【００７２】
まず、時刻Ｔ０で先読み再生が開始される。これは、楽曲データ再生ライブラリ１２２に対して、ＭＩＤＩデータ１２６の再生を開始するように指示するとともに、音量を０にするように指示することによって行われる。先読み再生が開始されると、ノートイベントを含むＭＩＤＩイベントが順次発生するので、ノートイベントが発生する毎に、このノートイベントに基づいてノートデータを生成してノートプール１２３に順次記憶する。
【００７３】
時刻Ｔ１では、本番再生が開始される。時刻Ｔ１においてノートプール１２３に格納されているノートデータを図１２に示す。時刻Ｔ１では、小節Ａ〜小節Ｂに関連するノートデータがノートプール１２３に保持されているので、これらのノートデータに基づいて、まだ本番再生されていない小節Ａ〜小節Ｂの譜面の画像を生成して、テレビ２の画面に表示することができる。
【００７４】
時刻Ｔ１以降は、本番再生と先読み再生が同じ速度で併行して行われる。したがって、本番再生よりも常に２小節分だけ先行して先読み再生が行われることになる。
【００７５】
時刻Ｔ２では、小節Ｂの本番再生が開始される。時刻Ｔ２においてノートプール１２３に格納されているノートデータを図１３に示す。時刻Ｔ２では、小節Ｂ〜小節Ｃに関連するノートデータがノートプール１２３に保持されているので、これらのノートデータに基づいて、まだ本番再生されていない小節Ｂ〜小節Ｃの譜面の画像を生成して、テレビ２の画面に表示することができる。なお、時刻Ｔ２では小節Ａに関連するノートデータはノートプール１２３からすでに削除されていても構わない。
【００７６】
時刻Ｔ３では、小節Ｃの本番再生が開始される。時刻Ｔ３においてノートプール１２３に格納されているノートデータを図１４に示す。時刻Ｔ３では、小節Ｃ〜小節Ｄに関連するノートデータがノートプール１２３に保持されているので、これらのノートデータに基づいて、まだ本番再生されていない小節Ｃ〜小節Ｄの譜面の画像を生成して、テレビ２の画面に表示することができる。なお、時刻Ｔ３では小節Ｂに関連するノートデータはノートプール１２３からすでに削除されていても構わない。
【００７７】
このように、本実施形態によれば、ＭＩＤＩデータ１２６を本番再生している間、ノートプール１２３には常に現在の再生位置（本番再生における再生位置）から少なくとも２小節先までのノートイベントに関連するノートデータが保持されているので、現在鳴っている音よりも後に鳴る音（すなわち未来に鳴る音）に関する情報に基づいて、表示画像や出力音やゲーム内容等を変化させることができる。特に、楽曲データ再生ライブラリ１２２を用いてＭＩＤＩデータ１２６を無音で再生し、この無音再生において発生したノートイベントに基づいてノートデータを生成しているので、現在の再生位置から少なくとも２小節先までのノートイベントをＭＩＤＩデータ１２６から随時抽出するためのコンピュータプログラムを一から作成する必要が無く、コンピュータプログラムの作成効率が向上する。また、ノートプール１２３には、現在の再生位置（本番再生における再生位置）から２小節先までのノートイベントに関連するノートデータを記憶できる容量さえあればよいので、ＭＩＤＩデータ１２６に含まれる全てのノートイベントを予め抽出して記憶する場合と比較して、必要となる記憶領域は少なくて済む。
【００７８】
なお、上記の例では、本番再生よりも２小節分だけ先行して先読み再生を行っているが、どれだけ先行して先読み再生すべきかは目的に応じて適宜に決定すべきである。
【００７９】
ところで、図１２において、時刻Ｔ０（先読み再生の開始時刻）から時刻Ｔ１（本番再生の開始時刻）までの間は、ＭＩＤＩデータ１２６に基づく音（有音）を鳴らすことができない。つまり、本実施形態の手法では、ＭＩＤＩデータ１２６の再生開始指示が行われたときから一定期間（時刻Ｔ０〜Ｔ１の期間）はＭＩＤＩデータ１２６の本番再生を開始することができない。そこで、このような待ち時間をできるだけ少なくするために、図１５に示すように、本番再生が開始されるまでの間、先読み再生を通常よりも高速（例えば１００倍など）で再生するのが好ましい。これは、先読み再生の開始時に、楽曲データ再生ライブラリ１２２に対して高速再生を指示することによって行われる。なお、この場合でも、本番再生の開始後はノートプール１２３が溢れないように本番再生と先読み再生を同じ速度で併行して行う必要があるため、本番再生の開始時に、先読み再生の再生速度を通常速度（より正確には本番再生と同じ速度）に戻す必要がある。
【００８０】
なお、本番再生を特定のタイミング（例えば、プレイヤがコントローラ７に設けられた特定のスイッチを押したときなど）に開始したい場合には、図１６に示すように、その特定のタイミング（Ｔ５）よりも十分に前もって先読み再生を開始し、小節ＡおよびＢの先読み再生が完了した時点（Ｔ４）で先読み再生を一時停止し、その後、特定のタイミングが到来した時点で一時停止を解除すればよい。これは、小節ＡおよびＢの先読み再生が完了した時点で、楽曲データ再生ライブラリ１２２に対して先読み再生の一時停止を指示し、その後、本番再生を開始する時点で一時停止を解除（すなわち先読み再生の再開）を指示することによって行われる。これにより、ノートプール１２３が溢れるのを防止しつつ、特定のタイミングで本番再生を開始することができる。
【００８１】
（ノートデータ）
次に、図１７を参照して、ノートデータの詳細を説明する。ノートデータは、個々の音（ノート）に関するデータである。ノートデータには、ノートイベントと同様に、「所属トラック」、「再生タイミング」、「ノート長」、「音高」、「ベロシティ」（図示省略）などの情報が含まれている。なお、図１７の「ノート番号」は、後述の説明を分かりやすくするために便宜上記載したものである。ノートデータには、必要に応じて、トラック毎のボリュームを示す「トラックボリューム」や、トラック内での相対的なボリュームを示す「エクスプレッション」や、リバーブなどのエフェクトのかかり具合を示す「エフェクトセンド」など、ノートイベントに含まれていない情報（他のＭＩＤＩイベントによって指定される情報）がさらに含まれていてもよい。また、ノートデータには、そのノートデータに対応する音がどの和音を構成しているかを示す「所属和音」の情報も含まれている。「所属和音」の実体は、後述する和音データへのポインタである。なお、本実施形態では、各トラックにおいてほぼ同時に発音される１以上の音の集まりを「和音」として扱う。すなわち、他のいずれの音ともほぼ同時に発音されないような音も、便宜上、１つの「和音」として扱う。例えば、図１７の例では、ノートＮ１とノートＮ２が和音Ｗ１を構成しており、ノートＮ３が単独で和音Ｗ２を構成している。
【００８２】
本実施形態では、「和音」が連なったものとして楽曲を扱うことによって、例えば、現在鳴っている音（「和音」）の次に鳴る音（「和音」）の音高を取得したり、現在鳴っている音（「和音」）の２つ後になる音（「和音」）の音長を取得したりといった処理を容易にしている。「和音」に関する情報は、和音データとして記憶される。和音データの詳細は後述する。
【００８３】
ノートデータは前述のようにノートプール１２３に一時的に記憶される。本実施形態ではノートプール１２３はリングバッファとなっており、ノートプール１２３においてノートデータが満杯になると、その後、新たなノートデータを記憶するときには、最も古いノートデータを削除して空き領域を確保した上で、その空き領域に新たなノートデータが記憶される。
【００８４】
上記のように、先読み再生において発生した音に関する情報は、ノートデータとして、ある程度の時間保持される。よって、例えば現在の演奏位置から２小節先までの期間に鳴る音の情報を得ようとするときに、ＭＩＤＩデータ１２６に含まれる複数のノートイベントの中から、それらの音に対応するノートイベントを再生タイミングに基づいて抽出するといった煩雑な処理を随時行う必要はなく、単にノートプール１２３からノートデータを読み出すだけでよい。
【００８５】
（和音データ）
次に、図１８を参照して、和音データの詳細を説明する。和音データは、ノートデータと併行して生成され、ノートデータと同様に記憶領域に一時的に保持される。和音データを一時的に保持しておくための領域を「和音プール」と称する。和音プール１２４は、ノートプール１２３と同様に、例えば外部メインメモリ１２に設定された一定容量の記憶領域であって、和音データを先入れ先出し方式で記憶する。和音プール１２４がリングバッファである点も、ノートプール１２３と同様である。
【００８６】
和音データには、「所属トラック」、「再生タイミング」、「次の和音」、「前の和音」、「構成ノート」などの情報が含まれている。なお、図１８の「和音番号」は、後述の説明を分かりやすくするために便宜上記載したものである。和音データには、必要に応じて、その和音を構成しているノートの数を示す「構成ノート数」などの他の情報がさらに含まれていてもよい。「所属トラック」は、その和音が所属しているトラックを示す。「再生タイミング」は、その和音の発音タイミングを示す。「次の和音」は、同一トラックにおいて、その和音の直後に発音される和音を示している。なお、「次の和音」に対応する和音データが和音プール１２４に存在しない場合には、「次の和音」の値はＮＵＬＬとなる。「前の和音」は、同一トラックにおいて、その和音の直前に発音される和音を示している。なお、「前の和音」に対応する和音データが和音プール１２４に存在しない場合には、「前の和音」の値はＮＵＬＬとなる。「次の和音」および「前の和音」の実体は、対応する和音データへのポインタである。「構成ノート」は、その和音を構成している１つまたは複数のノートを示している。「構成ノート」の実体は、対応するノートデータへのポインタである。
【００８７】
図１８に示すような和音データを和音プール１２４に一時的に保持しておくことにより、例えば、本番再生の開始から５ティックが経過した時点で、トラック０において次に鳴る「和音」は和音Ｗ５であり、その次に鳴る「和音」は和音Ｗ８である、というようなことを簡単に知ることができる。また、和音データにおける「構成ノート」の情報に基づいてノートプール１２３内の対応するノートデータを参照することにより、例えば、和音Ｗ８を構成する各ノート（ここではノートＮ９およびノートＮ１０）の音高やノート長などの情報を簡単に取得することができる。
【００８８】
（トラックデータ）
本実施形態では、和音データを生成するために、図１９に示すように、トラック毎の「最新和音」を、トラックデータ１２５として記憶するようにしている。「最新和音」は、先読み再生において無音再生された和音のうち、最も新しい和音（すなわち一番最後に無音再生された和音）を示す。「最新和音」の実体は、対応する和音データへのポインタである。なお、図１９の例は、先読み再生において図１０の譜面に対応する楽曲の部分を再生し終えた直後のトラックデータ１２５を示している。トラックデータの具体的な利用方法については後述する。
【００８９】
以上のように、本実施形態によれば、本番再生における現在の演奏位置よりも後に発生する音に関する情報を容易に得られるので、例えば、本番再生において、現在鳴らすべき音の音色を次に鳴る音の音高に応じて変化させたり、現在鳴らすべき音の長さを次の音までの時間間隔に応じて変化させたりというように、従来は困難だった処理も容易に可能となる。以下、本実施形態における楽曲演奏処理の種々の応用例について説明する。
【００９０】
（応用例１）
応用例１は、ＭＩＤＩデータ１２６に基づいて楽曲を再生している最中に、現在の演奏位置から２小節先までの部分の譜面を画面に表示する例である。以下、図２０〜図２４を参照して、応用例１における楽曲演奏プログラム１２１に基づくＣＰＵ１０の処理の流れを説明する。
【００９１】
図２０において、応用例１のメイン処理が開始されると、ステップＳ１０でＣＰＵ１０は初期化処理を行う。具体的には、ノートプール１２３のクリア、和音プール１２４のクリアおよびトラックデータ１２５のクリアを行う。
【００９２】
ステップＳ１１ではＣＰＵ１０は、高速テンポ（例えば通常テンポの１０倍）でＭＩＤＩデータ１２６の先読み再生を開始する。先読み再生は無音で（すなわち音量０で）行われる。
【００９３】
ステップＳ１２ではＣＰＵ１０は、音情報格納処理を行う。音情報格納処理とは、先読み再生においてノートイベントが発生する毎に、このノートイベントに対応するノートデータをノートプール１２３に追加する処理である。以下、図２１を参照して、この音情報格納処理の詳細を説明する。
【００９４】
図２１において、音情報格納処理が開始されると、ステップＳ３０でＣＰＵ１０は、先読み再生においてノートイベントが発生したかどうかを判断し、ノートイベントが発生した場合にはステップＳ３１に進み、そうでない場合には音情報格納処理を終了する。
【００９５】
ステップＳ３１ではＣＰＵ１０は、発生したノートイベントに基づいてノートデータを生成する。
【００９６】
ステップＳ３２ではＣＰＵ１０は、ノートデータ格納処理を行う。ノートデータ格納処理とは、新規に生成したノートデータをノートプール１２３に格納するための処理である。以下、図２２を参照して、このノートデータ格納処理の詳細を説明する。
【００９７】
図２２において、ノートデータ格納処理が開始されると、ステップＳ４０でＣＰＵ１０は、ノートプール１２３が満杯かどうかを判断し、満杯である場合はステップＳ４１に進み、そうでない場合はステップＳ４５に進む。
【００９８】
ステップＳ４１ではＣＰＵ１０は、ノートプール１２３に格納されているノートデータのうち最も古いノートデータに対応する和音データを削除対象和音データとして選択する。前述のように、本実施形態ではノートプール１２３はリングバッファであるので、新規に生成されたノートデータを書き込もうとしている領域に格納されているノートデータが最も古いノートデータということになる。その最も古いノートデータの「所属和音」で示されている和音データが、削除対象和音データとして選択される。
【００９９】
ステップＳ４２ではＣＰＵ１０は、削除対象和音データに関連する他の和音データを更新する。具体的には、削除対象和音データの「次の和音」に示されている和音データの「前の和音」の値をＮＵＬＬに変更する。例えば、図１８において、削除対象和音データに対応する和音が和音Ｗ１である場合には、和音Ｗ１の次の和音である和音Ｗ５に対応する和音データにおける「前の和音」の値を「Ｗ１」からＮＵＬＬへと変更する。
【０１００】
ステップＳ４３ではＣＰＵ１０は、削除対象和音データに関連するノートデータをノートプール１２３から削除する。具体的には、削除対象和音データの「構成ノート」に示されているノートデータをノートプール１２３から削除する。例えば、図１８において、削除対象和音データに対応する和音が和音Ｗ１である場合には、和音Ｗ１を構成しているノートＮ１およびノートＮ２に対応するノートデータをノートプール１２３から削除する。
【０１０１】
ステップＳ４４ではＣＰＵ１０は、和音プール１２４から削除対象和音データを削除する。
【０１０２】
ステップＳ４５ではＣＰＵ１０は、新規に生成されたノートデータ（すなわちステップＳ３１で生成されたノートデータ）をノートプール１２３に格納し、ノートデータ格納処理を終了する。
【０１０３】
図２１に戻り、ステップＳ３２のノートデータ格納処理が終了すると、ステップＳ３３に進む。
【０１０４】
ステップＳ３３ではＣＰＵ１０は、トラックデータ１２５として記憶されている、ノートプール１２３に新規に格納されたノートデータ（すなわちステップＳ３１で生成されたノートデータ）と同一トラックの「最新和音」を参照する。
【０１０５】
ステップＳ３４ではＣＰＵ１０は、ノートプール１２３に新規に格納されたノートデータ（すなわちステップＳ３１で生成されたノートデータ）の再生タイミングと、当該ノートデータと同一トラックの「最新和音」が示す和音データの再生タイミングとが同一かどうかを判断し、異なる場合はステップＳ３５に進み、同一である場合はステップＳ３８に進む。なお、これらの再生タイミングが僅かしか違わない場合（すなわち再生タイミングの差が所定ティック以下の場合）は、これらの再生タイミングを同一と見なしてもよい。
【０１０６】
ステップＳ３５ではＣＰＵ１０は、ノートプール１２３に新規に格納されたノートデータ（すなわちステップＳ３１で生成されたノートデータ）に対応する和音データ（すなわち当該ノートデータに対応するノートを「構成ノート」とした和音データ）を新規に生成する。
【０１０７】
ステップＳ３６ではＣＰＵ１０は、和音データ格納処理を行う。和音データ格納処理とは、新規に生成した和音データを和音プール１２４に格納するための処理である。以下、図２３を参照して、この和音データ格納処理の詳細を説明する。
【０１０８】
図２３において、和音データ格納処理が開始されると、ステップＳ５０でＣＰＵ１０は、和音プール１２４が満杯かどうかを判断し、満杯である場合はステップＳ５１に進み、そうでない場合はステップＳ５５に進む。
【０１０９】
ステップＳ５１ではＣＰＵ１０は、和音プール１２４に格納されている和音データのうち最も古い和音データを削除対象和音データとして選択する。前述のように、本実施形態では和音プール１２４はリングバッファであるので、新規に生成された和音データを書き込もうとしている領域に格納されている和音データが最も古い和音データということになる。
【０１１０】
ステップＳ５２ではＣＰＵ１０は、削除対象和音データに関連する他の和音データを更新する。この処理は、前述の図２２のステップＳ４２と同じ処理である。
【０１１１】
ステップＳ５３ではＣＰＵ１０は、削除対象和音データに関連するノートデータをノートプール１２３から削除する。この処理は、前述の図２２のステップＳ４３と同じ処理である。
【０１１２】
ステップＳ５４ではＣＰＵ１０は、和音プール１２４から削除対象和音データを削除する。この処理は、前述の図２２のステップＳ４４と同じ処理である。
【０１１３】
ステップＳ５５ではＣＰＵ１０は、新規に生成された和音データ（すなわちステップＳ３５で生成された和音データ）を和音プール１２４に格納し、和音データ格納処理を終了する。
【０１１４】
図２１に戻り、ステップＳ３６の和音データ格納処理が終了すると、ステップＳ３７に進む。
【０１１５】
ステップＳ３７ではＣＰＵ１０は、トラックデータ１２５において、新規に生成された和音データ（すなわちステップＳ３５で生成された和音データ）と同一トラックの「最新和音」を更新する。具体的には、新規に生成された和音データと同一トラックの「最新和音」が当該新規に生成された和音データを示すように、当該「最新和音」の値を変更する。そして、音情報格納処理を終了する。
【０１１６】
ステップＳ３８ではＣＰＵ１０は、トラックデータ１２５において、新規に生成されたノートデータ（すなわちステップＳ３１で生成されたノートデータ）と同一トラックの「最新和音」が示す和音データを更新する。具体的には、新規に生成されたノートデータと同一トラックの「最新和音」が示す和音データの「構成ノート」が当該新規に生成されたノートデータを示すように、当該「構成ノート」の値を更新する。そして、音情報格納処理を終了する。
【０１１７】
図２０に戻り、ステップＳ１２の音情報格納処理が終了すると、ステップＳ１３に進む。
【０１１８】
ステップＳ１３ではＣＰＵ１０は、先読み再生において２小節が経過したかどうかを判断し、２小節が経過した場合にはステップＳ１４に進み、そうでない場合にはステップＳ１２に戻る。
【０１１９】
ステップＳ１４ではＣＰＵ１０は、先読み再生を一時停止する。なお、ここでは先読み再生において２小節が経過した時点で先読み再生を一時停止しているが、記憶容量に余裕がある場合には、２小節よりも多くの時間（例えば３小節）が経過してから先読み再生を一時停止するようにしてもよい。さらには、ノートプール１２３または和音プール１２４が満杯になった時点で先読み再生を一時停止するようにしてもよい。
【０１２０】
ステップＳ１５ではＣＰＵ１０は、本番再生を開始すべきかどうかを判断し、本番再生を開始すべき場合はステップＳ１６に進み、そうでない場合は、本番生成を開始すべきタイミングが来るまで待機する。ここで、「本番生成を開始すべきタイミング」とは、あらかじめ定められた条件を満たしたときであって、例えば、プレイヤがコントローラ７に設けられた特定のスイッチを押したときなどである。
【０１２１】
ステップＳ１６ではＣＰＵ１０は、一時停止中であったＭＩＤＩデータ１２６の先読み再生を、通常テンポ（すなわち本番再生と同じテンポ）で再開する。
【０１２２】
ステップＳ１７ではＣＰＵ１０は、ＭＩＤＩデータ１２６の本番再生を開始する。これにより、ＭＩＤＩデータ１２６の先読み再生と本番再生とが併行して行われる。
【０１２３】
ステップＳ１８ではＣＰＵ１０は、音情報格納処理を行う。この処理は、前述のステップＳ１２と同じ処理である。
【０１２４】
ステップＳ１９ではＣＰＵ１０は、音情報利用処理を行う。音情報利用処理とは、和音プール１２４に記憶されている和音データおよびノートプール１２３に記憶されているノートデータを利用して所定の処理（ここでは譜面を表示する処理）を行うことである。以下、図２４を参照して、応用例１の音情報利用処理の詳細を説明する。
【０１２５】
図２４において、音情報利用処理が開始されると、ステップＳ６０でＣＰＵ１０は、本番再生における現在の演奏位置から２小節先までの範囲に含まれる和音に対応する和音データを和音プール１２４から抽出する。該当する和音データは、和音データの「再生タイミング」を参照することによって抽出することができる。
【０１２６】
ステップＳ６１ではＣＰＵ１０は、抽出した和音データに関連するノートデータを参照して譜面の画像を生成する。具体的には、抽出した和音データの「構成ノート」が示すノートに対応するノートデータを参照して、譜面の画像を生成する。
【０１２７】
ステップＳ６２ではＣＰＵ１０は、生成した譜面の画像をテレビ２の画面に出力し、音情報利用処理を終了する。
【０１２８】
図２０に戻り、ステップＳ１９の音情報利用処理が終了すると、ステップＳ２０に進む。
【０１２９】
ステップＳ２０ではＣＰＵ１０は、本番再生が終了したかどうかを判断し、本番再生が終了した場合には応用例１のメイン処理を終了し、そうでない場合にはステップＳ１８に戻る。なお、先読み再生は、本番再生が終了するよりも先に終了する。
【０１３０】
このように、応用例１によれば、楽譜の画像を生成するための特別なデータを用意することなく、ＭＩＤＩデータに基づいて譜面の画像を生成することが可能である。
【０１３１】
（応用例２）
応用例２は、ＭＩＤＩデータ１２６に基づいて楽曲を再生するときに、プレイヤに一定のタイミング（ここでは小節の区切り）でコントローラ７上の所定のスイッチを押下させ、プレイヤが正しいタイミングでスイッチを押下できたときには楽曲を正常に再生し、プレイヤが正しいタイミングでスイッチを押下できなかった場合にはトラック間で互いにずらして楽曲を再生する例である。以下、図２５〜図２８を参照して、応用例２における楽曲演奏プログラム１２１に基づくＣＰＵ１０の処理の流れを説明する。
【０１３２】
図２５において、ステップＳ７０〜Ｓ７６の処理は、応用例１の図２０のステップＳ１０〜Ｓ１６の処理と同じであるため、説明は省略する。
【０１３３】
ステップＳ７７ではＣＰＵ１０は、ＭＩＤＩデータ１２６の本番再生を開始する。ただし、ここでは先読み再生と同様に本番再生も音量０で行われる。応用例２では、後述する図２６のステップＳ９５において音が発生される。
【０１３４】
ステップＳ７８ではＣＰＵ１０は、音情報格処理を行う。この処理は、ステップＳ７２と同じ（すなわち応用例１の図２０のステップＳ１２と同じ）処理である。
【０１３５】
ステップＳ７９ではＣＰＵ１０は、音情報利用処理を行う。音情報利用処理とは、和音プール１２４に記憶されている和音データおよびノートプール１２３に記憶されているノートデータを利用して所定の処理（ここではトラック毎に再生タイミングをずらして音を鳴らす処理）を行うことである。以下、図２６を参照して、応用例２の音情報利用処理の詳細を説明する。
【０１３６】
図２６において、音情報利用処理が開始されると、ステップＳ９０でＣＰＵ１０は、コントローラ７から所定の信号（例えば、コントローラ７上の所定のスイッチが押下されたことを示す信号、またはコントローラ７が振られたことを示す信号）の入力があったかどうかを判断し、所定の信号の入力があった場合にはステップＳ９１に進み、そうでない場合にはステップＳ９３に進む。
【０１３７】
ステップＳ９１ではＣＰＵ１０は、理想の入力タイミング（ここでは、小節の区切り）と実際の入力タイミングのズレ幅（例えばティック数）を計算する。
【０１３８】
ステップＳ９２ではＣＰＵ１０は、本番再生における現在の演奏位置よりも後ろの小節に対応する和音データおよびノートデータの「再生タイミング」を、計算されたズレ幅に応じて変更する。以下、「再生タイミング」の変更方法の一例を図２７および図２８を参照して説明する。
【０１３９】
図２７は、理想の入力タイミングを示している。応用例２では、プレイヤは、小節の区切りの位置（図における「第Ｎ入力タイミング」、「第（Ｎ＋１）入力タイミング」および「第（Ｎ＋２）入力タイミング」）でタイミング良く所定の操作（例えば、コントローラ７上の所定のスイッチを押す操作）を行うという課題を課せられている。例えば、プレイヤが第Ｎ小節の先頭の位置（すなわち第Ｎ入力タイミング）またはその周辺で所定の操作を行った場合には、理想の入力タイミングである第Ｎ入力タイミングと実際の入力タイミングとのズレ幅が計算され、このズレ幅に応じて、第（Ｎ＋１）小節の各音の再生タイミングが図２８に示すようにトラック単位で前方または後方にずらされる。
【０１４０】
なお、再生タイミングが早められるか遅められるかは、トラック毎においてランダムに決定される。また、再生タイミングの変化量（絶対値）の上限値は、理想の入力タイミングと実際の入力タイミングとのズレ幅に応じて大きくなるように決定され、実際の変化量はトラック毎においてランダムに決定される。すなわち、第Ｎ入力タイミングとこれに対応する実際の入力タイミングとが完全に一致している場合には、第（Ｎ＋１）小節が楽譜通りに正常に（すなわちトラック間で第（Ｎ＋１）小節の再生タイミングが互いにずれることなく）演奏されるが、第Ｎ入力タイミングとこれに対応する実際の入力タイミングとのズレ幅が大きいほど、第（Ｎ＋１）小節が変に（すなわちトラック間で第（Ｎ＋１）小節の再生タイミングが互いに大きくずれて）演奏されることになる。
【０１４１】
他の小節についても同様である。例えば、第（Ｎ＋１）入力タイミングとこれに対応する実際の入力タイミングとのズレ幅に応じて、第（Ｎ＋２）小節の各音の再生タイミングが変更される。
【０１４２】
ステップＳ９３ではＣＰＵ１０は、和音プール１２４において、本番再生（無音）における現在の演奏位置（ティック数で示される）に対応する和音データ（すなわち「再生タイミング」が現在の演奏位置に一致している和音データ）が存在するかどうかを判断し、現在の演奏位置に対応する和音データが存在する場合にはステップＳ９４に進み、そうでない場合には応用例２の音情報利用処理を終了する。
【０１４３】
ステップＳ９４ではＣＰＵ１０は、現在の演奏位置に対応する和音データ（１つまたは複数）に関連するノートデータをノートプール１２３から取得（すなわち抽出）する。具体的には、該当する和音データの「構成ノート」に示されているノートデータをノートプール１２３から取得する。
【０１４４】
ステップＳ９５ではＣＰＵ１０は、取得したノートデータに基づいて音を発生させ、応用例２の音情報利用処理を終了する。ここで発生される音は、ステップＳ９２において必要に応じて「再生タイミング」の変更されたノートデータに基づく音である。
【０１４５】
図２５に戻り、ステップＳ７９の音情報利用処理が終了すると、ステップＳ８０に進む。
【０１４６】
ステップＳ８０ではＣＰＵ１０は、本番再生が終了したかどうかを判断し、本番再生が終了した場合には応用例２のメイン処理を終了し、そうでない場合にはステップＳ７８に戻る。なお、先読み再生は、本番再生が終了するよりも先に終了する。
【０１４７】
以上のように、応用例２では、プレイヤの操作等に応じて楽曲に含まれる各音の再生タイミングを変化させることができる。特に、従来技術においては、ＭＩＤＩデータを再生するときに、一部のトラックの音だけを本来の再生タイミングよりも早いタイミングで鳴らすというようなことは非常に困難であったが、本実施形態によれば、上記のような処理によって簡単に可能となる。
【０１４８】
なお、応用例２においては、理想の入力タイミングと実際の入力タイミングとのズレ幅に応じて再生タイミングをずらしているが、変形例として、理想の入力タイミングと実際の入力タイミングとのズレ幅に応じて再生タイミング以外の楽曲パラメータ（例えば音高や音色など）を変更するようにしてもよい。さらなる変形例として、複数のプレイヤで遊ぶ場合には、プレイヤ間の入力タイミングのズレ幅に応じて再生タイミング等を変化させるようにしてもよい。
【０１４９】
また、応用例２においては、理想の入力タイミングと実際の入力タイミングとのズレ幅に応じて、楽曲の一部（１小節分）の再生タイミングをずらしているが、変形例として、ある時点における理想の入力タイミングと実際の入力タイミングとのズレ幅に応じて、それ以降の楽曲の残り全ての部分の音情報を変更する（すなわち、その時点ではまだノートプール１２３や和音プール１２４に格納されていないノートデータや和音データについては、それらのデータがノートプール１２３や和音プール１２４に格納された時点で随時変更する）ようにしてもよい。
【０１５０】
（応用例３）
応用例３は、ＭＩＤＩデータ１２６に基づく楽曲の演奏中に、プレイヤがコントローラ７を振る強さに応じて、楽曲の各音の長さを変化させる例である。例えば、プレイヤがコントローラ７を比較的強く振っている場合には、各音の長さを「（（その音の次の音の再生タイミング）−（その音の再生タイミング））×０．３」に変更し、比較的弱く振っている場合には、各音の長さを「（（その音の次の音の再生タイミング）−（その音の再生タイミング））×０．６」に変更する。この場合も、本実施形態では「次の音の再生タイミング」をノートプール１２３および和音プール１２４を参照して簡単に取得することが可能である。
【０１５１】
なお、コントローラ７を振る強さについては、例えばコントローラ７に設けられた加速度センサ７０１の出力信号に基づいて検知することができる。コントローラ７を振る強さの替わりに、プレイヤによるコントローラ７の操作強度を示す他のパラメータ（例えば、コントローラを回す速さや、特定のスイッチを押す強さなど）を用いても構わない。
【０１５２】
（応用例４）
応用例４は、ＭＩＤＩデータ１２６に基づく楽曲の演奏中に、プレイヤがコントローラ７上の所定のボタンを任意のタイミングで押したときに、直前に鳴った音と、次に鳴る音との中間の音高の音を発生させる例である。この場合も、本実施形態では「次に鳴る音の音高」をノートプール１２３および和音プール１２４を参照して簡単に取得することが可能である。
【０１５３】
なお、本実施形態ではＭＩＤＩデータ１２６に基づいて楽曲を演奏する例を説明したが、本発明はこれに限らず、ＭＩＤＩデータ１２６と類似した性質を有する他のフォーマットの楽曲データにも本発明を応用できることは言うまでもない。
【０１５４】
また、本実施形態では先読み再生において発生したノートイベントに基づいて生成されたノートデータをノートプール１２３に記憶する例を説明したが、本発明はこれに限らず、先読み再生において発生したノートイベントをそのままノートプール１２３に格納するようにしても構わない。また、本実施形態では和音データを和音プール１２４に記憶する例を説明したが、本発明において、和音データを記憶することは必須ではない。
【０１５５】
また、本実施形態ではノートプール１２３および和音プール１２４がリングバッファである例を説明したが、本発明はこれに限らない。
【０１５６】
また、本実施形態では、異なるトラックのノートデータを同一のリングバッファ（ノートプール１２３）に格納する例を説明したが、本発明はこれに限らず、トラック毎にリングバッファを設けてもよい。ただし、楽曲に含まれる音の個数はトラック間で異なるため、トラック毎にリングバッファを設けた場合には、一部のリングバッファについてのみノートデータの追加頻度が極端に低いというような状況が生じ易く、記憶領域の利用効率が悪くなるという問題がある。したがって、記憶領域の利用効率を高めるという点では、本実施形態のように異なるトラックのノートデータを同一のリングバッファに格納するのが好ましい。和音プール１２４についても同様である。
【図面の簡単な説明】
【０１５７】
【図１】本発明の一実施形態に係るゲームシステム１の外観図
【図２】ゲーム装置３の構成を示すブロック図
【図３】コントローラ７の上面後方から見た斜視図
【図４】コントローラ７を下面後方から見た斜視図
【図５】コントローラ７の上筐体を外した状態を示す斜視図
【図６】コントローラ７の下筐体を外した状態を示す斜視図
【図７】コントローラ７の構成を示すブロック図
【図８】外部メインメモリ１２のメモリマップ
【図９】ＭＩＤＩデータ１２６のデータ構造
【図１０】ＭＩＤＩデータ１２６に対応する譜面
【図１１】ＭＩＤＩデータ１２６における「音高」とピアノの鍵盤との対応関係
【図１２】本実施形態の処理の概要を示す図
【図１３】本実施形態の処理の概要を示す図
【図１４】本実施形態の処理の概要を示す図
【図１５】本実施形態の処理の概要を示す図
【図１６】本実施形態の処理の概要を示す図
【図１７】ノートプール１２３の内容
【図１８】和音プール１２４の内容
【図１９】トラックデータ１２５の内容
【図２０】応用例１のメイン処理の流れを示すフローチャート
【図２１】音情報格納処理の詳細を示すフローチャート
【図２２】ノートデータ格納処理の詳細を示すフローチャート
【図２３】和音データ格納処理の詳細を示すフローチャート
【図２４】応用例１の音情報利用処理の詳細を示すフローチャート
【図２５】応用例２のメイン処理の流れを示すフローチャート
【図２６】応用例２の音情報利用処理の詳細を示すフローチャート
【図２７】応用例２の処理を説明するための図
【図２８】応用例２の処理を説明するための図
【符号の説明】
【０１５８】
１    ゲームシステム
２    テレビジョン受像器（テレビ）
２ａ    スピーカ
３    ゲーム装置
４    光ディスク
６    マーカ部
６Ｒ，６Ｌ    マーカ
７    コントローラ
１０    ＣＰＵ
１１    システムＬＳＩ
１１ａ    入出力プロセッサ
１１ｂ    ＧＰＵ
１１ｃ    ＤＳＰ
１１ｄ    ＶＲＡＭ
１１ｅ    内部メインメモリ
１２    外部メインメモリ
１２１    楽曲演奏プログラム
１２２    楽曲データ再生ライブラリ
１２３    ノートプール
１２４    和音プール
１２５    トラックデータ
１２６    ＭＩＤＩデータ
１３    ＲＯＭ／ＲＴＣ
１４    ディスクドライブ
１５    ＡＶ−ＩＣ
１６    ＡＶコネクタ
１７    フラッシュメモリ
１８    無線通信モジュール
１９    無線コントローラモジュール
２０    拡張コネクタ
２１    メモリカード用コネクタ
２２    アンテナ
２３    アンテナ
２４    電源ボタン
２５    リセットボタン
２６    イジェクトボタン
３０    高さマップ
３１    移動オブジェクト
４０    画像処理プログラム
４１    ベースモデルデータ
４２    ベーステクスチャ画像
４３    シェルモデルデータ
４４    移動オブジェクトデータ
７１    ハウジング
７２    操作部
７３    コネクタ
７４    撮像情報演算部
７５    通信部
７００    基板
７０１    加速度センサ
７０２    ＬＥＤ
７０３    水晶振動子
７０４    バイブレータ
７０５    電池
７０６    スピーカ
７０７    サウンドＩＣ
７０８    アンプ
７４１    赤外線フィルタ
７４２    レンズ
７４３    撮像素子
７４４    画像処理回路
７５１    マイコン
７５２    メモリ
７５３    無線モジュール
７５４    アンテナ
【図１】
0005441205.tif 000002
【図２】
0005441205.tif 000003
【図３】
0005441205.tif 000004
【図４】
0005441205.tif 000005
【図５】
0005441205.tif 000006
【図６】
0005441205.tif 000007
【図７】
0005441205.tif 000008
【図８】
0005441205.tif 000009
【図９】
0005441205.tif 000010
【図１０】
0005441205.tif 000011
【図１１】
0005441205.tif 000012
【図１２】
0005441205.tif 000013
【図１３】
0005441205.tif 000014
【図１４】
0005441205.tif 000015
【図１５】
0005441205.tif 000016
【図１６】
0005441205.tif 000017
【図１７】
0005441205.tif 000018
【図１８】
0005441205.tif 000019
【図１９】
0005441205.tif 000020
【図２０】
0005441205.tif 000021
【図２１】
0005441205.tif 000022
【図２２】
0005441205.tif 000023
【図２３】
0005441205.tif 000024
【図２４】
0005441205.tif 000025
【図２５】
0005441205.tif 000026
【図２６】
0005441205.tif 000027
【図２７】
0005441205.tif 000028
【図２８】
0005441205.tif 000029