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