本発明の実施の形態について図面を参照しながら説明する。以下の説明においては、図1に示すように、情報処理装置がその一例として、家庭用のゲーム機本体1であり、コントローラ2は、このゲーム機本体1に有線または無線にて接続されている場合を例として説明する。
ゲーム機本体1は、図2に示すように、制御部11と、記憶部12と、表示制御部13と、外部インタフェース部14と、ディスクドライブ15と、コントローラ通信部16とを含んで構成されている。
また、コントローラ2は、図3に示すように、制御部21と、記憶部22と、音声処理部23と、ウーファスピーカ24と、ツイータースピーカ25と、バッテリ26と、通信部27とを内蔵し、操作ボタン群である第1、第2の操作部31,32と、アナログ操作部33とを備えて構成されている。
ゲーム機本体1の制御部11は、例えばプロセッサチップであり、ディスクドライブ15にセットされた外部記憶媒体から読み出されるプログラム(例えばパーソナルコンピュータによって実行されるアプリケーションや、ゲームプログラムなど)を記憶部12に格納して実行する。本実施の形態の制御部11の動作の内容の例については、後に詳しく述べる。
記憶部12は、RAM(Random Access Memory)等の記憶素子を含んで構成され、制御部11によって実行されるプログラムを保持する。また、この記憶部12は、制御部11が処理を行うときに必要となるデータを保持するワークメモリとしても動作する。
表示制御部13は、グラフィックス処理ボード等であり、制御部11から入力される指示に従って、画像を描画し、当該描画した画像の情報を外部に接続されているディスプレイ(テレビ受像機等)に出力して、表示させる。
外部インタフェース部14は、いわゆるブリッジチップであり、制御部11と、ディスクドライブ15と、コントローラ通信部16とに接続されている。この外部インタフェース部14は、制御部11から入力される指示に従って、制御部11が出力する信号(出力信号)の出力先を選択し、当該選択した出力先に対して、制御部11の出力信号を選択的に出力する。また、外部インタフェース部14は、ディスクドライブ15やコントローラ通信部16から入力される信号を制御部11に出力する。
ディスクドライブ15は、例えばBlu-ray Discや、DVD等のディスクから、記録されている情報を読み取って、外部インタフェース部14を介して制御部11に出力する。
コントローラ通信部16は、コントローラ2との間で無線または有線にて通信可能に接続され、コントローラ2から入力される利用者の操作の内容を表す情報を制御部11に出力する。また、このコントローラ通信部16は、制御部11から入力される指示に従って鳴動するべき音声を表すデータ等をコントローラ2へ送出する。このコントローラ通信部16は、後に示すように、各コントローラ2との間で定期的に通信を行なう。また各コントローラ2に対する信号の送出タイミングを時間的にずらして、時分割多重方式にて複数のコントローラ2との間の通信を行なうこととしている。
コントローラ2は、例えば図4に示すような外観をなし、把持部30R,30Lを有している。ユーザは、これら把持部30をそれぞれ左右の手で把持することになる。ユーザが把持部30を把持した状態で、各親指にて操作可能な位置には、第1,第2の操作部31,32と、アナログ操作部33R,33Lとがそれぞれ設けられている。
ここで第1の操作部31には、上方向指示キー31a、下方向指示キー31b、右方向指示キー31c及び左方向指示キー31dが設けられている。ユーザはこれらの指示キー31a、31b、31c及び31dを利用して、例えば画面上の操作対象を特定する。また、第2の操作部32には、三角(「△」)形状の刻印が設けられた三角ボタン32aと、X字(「×」)状の刻印が設けられたXボタン32bと、O字(「○」)状の刻印が設けられたOボタン32cと、矩形(「□」)形状の刻印が設けられた矩形ボタン32dとが設けられている。これらのボタン32a,32b,32c及び32dは、例えば、指示キー31a,31b,31c及び31dにて特定された操作対象に応じて、夫々操作内容が割り当てられる。これによりユーザは、適切なボタン32a,32b,32c及び32dを選択し押下することで指示キー31a,31b,31c及び31dにて特定された操作対象に対する操作を行うことができることになる。
アナログ操作部33R,33Lは、傾倒操作が可能となっており、また、傾倒させた状態で、この回転操作が可能となっている。このアナログ操作部33R,33Lは、非傾倒操作時には、起立した状態(傾きのない状態)でそのポジションが保持されるようになっている(基準ポジション)。そして、アナログ操作部33R或いはアナログ操作部33Lを押圧操作しながら傾倒操作すると、上記基準ポジションに対する傾き量と傾き方向に応じたxy座標上の座標値(x,y)が検出され、この座標値が操作出力として制御部21に出力される。
また、このコントローラ2には、ゲーム機本体1に対してゲームプログラムの実行を指示するためのスタートボタン34や、各種モードを切替える指示などを行うためのセレクトボタン35等を有する。
さらに、このコントローラ2には、各把持部30R,30Lを左右の手で把持した状態において例えば各手の人差し指等で操作可能な位置に、右ボタン38及び左ボタン39が設けられている。この各ボタン38,39は、それぞれコントローラの厚さ方向に並設された、第1,第2の右ボタン38R1,38R2、及び第1,第2の左ボタン39L1,39L2を有する。
コントローラ2の制御部21は、マイクロコンピュータ等であり、記憶部22に格納されているプログラムに従って動作する。この制御部21は、ゲーム機本体1側の電源が投入されたとき(ゲーム機本体1との通信を開始するとき)など所定のタイミングにおいて、予め記憶部22に格納されるコントローラ種別情報をゲーム機本体1に送出する。また、この制御部21は、操作ボタン群である第1、第2の操作部31,32やアナログ操作部33に対する利用者の操作内容を受けて、当該操作内容を表す情報を、通信部27を介してゲーム機本体1側に送信出力する。
また、この制御部21は、ゲーム機本体1側から通信部27を介して受信される指示に従ってウーファスピーカ24やツイータースピーカ25を鳴動制御する。この鳴動制御の処理については後に詳しく述べる。
記憶部22は、RAMやROMを含んで構成され、例えばROM内部に制御部21によって実行されるプログラムを保持している。また、この記憶部22は、制御部21のワークメモリとしても動作する。また、この記憶部22には、コントローラ2の種別を表すコントローラ種別情報が格納される。
音声処理部23は、D/A変換器(DAC)や、フィルタ(アナログフィルタ)、アンプ等を含んで構成され、制御部21から入力されるデータに基づいて音声信号を生成し、ウーファスピーカ24と、ツイータースピーカ25との少なくとも一方に、生成した音声信号を出力する。
ウーファスピーカ24は、本発明の第1スピーカに相当し、音声処理部23が出力する音声信号のうち比較的低周波数領域の音声信号を鳴動する。このウーファスピーカ24は、例えば図3に示すように、2つの弾性体41a、41bによってその両側を支持された錘42を備え、この錘を弾性体41の弾性力の方向に沿って電磁気的な作用などによって音声信号に従って移動制御するものであってもよい。この図3に示す構成のウーファスピーカによると、小型化を図りつつ低周波数領域の再現特性を向上できる。
ツイータースピーカ25は、本発明の第2スピーカに相当し、音声処理部23が出力する音声信号のうち、ウーファスピーカ24よりも比較的高い周波数領域の音声信号を鳴動する。バッテリ26は、コントローラ2が無線にて接続される際に、各部に電源を供給する。このバッテリ26は、例えば二次電池であってもよい。
通信部27は、有線または無線にてゲーム機本体1との間で通信し、ゲーム機本体1から音声信号など、コントローラ2側で鳴動するべき音声に関する指示を受信してバッファに保持し、制御部21から入力される指示に従ってバッファから制御部21に出力する。また、この通信部27は、利用者の操作内容に係る情報の入力を制御部21から受けて、ゲーム機本体1へ送信出力する。
このコントローラ2において音声を鳴動させるゲーム機本体1の機能的な構成は、図5に示すように、ゲーム等のアプリケーションプログラム実行部51と、ドライバプログラム実行部52とを含み、ドライバプログラム実行部52には、鳴動コマンド受入部55と、音声データ生成部56と、エンコーダ57とを含んで構成される。
また、コントローラ2は、機能的には、図6に示すように、データ受入部61と、鳴動制御部62と、鳴動部63とを含む。鳴動部63は、ウーファスピーカ24とツイータースピーカ25とのそれぞれに対応して、フィルタF及びアンプAを含むアナログ回路を備えてなる。
ここでゲーム機本体1側のアプリケーションプログラム実行部51は、ゲームプログラム等を実行するものである。このアプリケーションプログラム実行部51は、コントローラ2から受信されるコントローラ種別情報を参照し、コントローラ2が鳴動デバイスを備えているか否かを調べる。例えば図7に示すように、受信され得るコントローラ種別情報ごとに、備えている鳴動デバイスの種別を特定するデバイス種別情報を関連づけたデバイス種別テーブルを記憶部12に格納しておき、このデバイス種別テーブルを参照して、コントローラ2から受信されるコントローラ種別情報に少なくとも一つのデバイス種別情報が関連づけられているか否かによって特定されるコントローラ2が鳴動デバイスを備えているか否かを調べてもよい。
なお、受信されているコントローラ種別情報を取得する方法としては、制御部11がシステムの処理として、コントローラ2から受信されるコントローラ種別情報を記憶部12の所定の領域に予め格納しておき、ゲームプログラムが当該格納されているコントローラ種別情報を参照する特定のシステム命令(API)を呼び出した場合に、制御部11がアプリケーションプログラム実行部51に対して、当該コントローラ種別情報を記憶部12から読み出して出力するようにしておけばよい。
ここで鳴動デバイスを備えていると判断したときにはアプリケーションプログラム実行部51は、受信されたコントローラ種別情報に関連づけられているデバイス種別情報をエンコーダ57に出力する。
またこのアプリケーションプログラム実行部51は、ゲームプログラムの指示に従い、コントローラ2が鳴動デバイスを備えていると判断される場合に鳴動コマンドの出力するよう指示があればコントローラ2側で鳴動させるべき音声を指示する鳴動コマンドをドライバプログラム実行部52に出力する。ここで鳴動コマンドでは、例えば低音音声波形データと、高温音声波形データとを指定する。一方で、アプリケーションプログラム実行部51は、ゲームプログラムの指示に従い、コントローラ2が鳴動デバイスを備えていないと判断される場合に鳴動コマンドの出力指示がなければ、鳴動コマンドの出力を行なわない。このように、アプリケーションプログラム実行部51は、コントローラ2が鳴動デバイスを備えているか否かの判断の結果により、鳴動コマンドを出力するか否かを制御する。
ドライバプログラム実行部52の鳴動コマンド受入部55は、アプリケーションプログラム実行部51から入力される音声コマンドを受け入れて、音声データ生成部56に出力する。音声データ生成部56は、入力される音声コマンドによって指定される低音音声波形データと、高温音声波形データとを合成して、合成波形データを生成する。ここで合成は、各波形データを加算してミキシングする処理でもよい。
エンコーダ57は、アプリケーションプログラム実行部51から入力される鳴動デバイスの種類を表すデバイス種別情報を参照し、音声データ生成部56にて生成された合成波形データを符号化して出力する。このエンコーダ57は、例えば、合成波形データの所定のサンプリングタイミングごとの周波数値を数値としてエンコードして出力するものである。本実施の形態においては、ゲーム機本体1の記憶部12は、デバイス種別情報ごとに、鳴動コマンドに応じた駆動パラメータ情報を図8に示すようなテーブルとして保持しておく。ここでは鳴動コマンドは、エンコーダ57が合成波形データの各サンプリングタイミングにおいて取得した、鳴動するべき音声の周波数である。そして、エンコーダ57は、予め取得されている種別情報に対応するテーブルを参照して、各サンプリングタイミングにおける周波数に対応する駆動パラメータ情報としての数値を取得する。エンコーダ57は、こうして生成した駆動パラメータ情報を、コントローラ通信部16を介してコントローラ2側へ送信する。
このようにしてゲーム機本体1の制御部11は、コントローラ2から受信される鳴動デバイスのデバイス種別情報を取得し、以下、鳴動コマンドを受け入れたときに、当該鳴動コマンドと、上記取得したデバイス種別情報とに基づき、鳴動デバイスを駆動するための駆動パラメータ情報を生成する。
一方、コントローラ2のデータ受入部61は、ゲーム機本体1側から受信される、駆動パラメータ情報を鳴動制御部62に出力する。
鳴動制御部62は、データ受入部61にて受け入れた駆動パラメータ情報から、合成波形データを復号するデコーダを備える。鳴動制御部62は、このデコーダにて合成波形データを復号する。すなわち、鳴動制御部62は、サンプリングタイミングごとの周波数値である駆動パラメータ情報から、鳴動デバイスであるウーファスピーカ24とツイータースピーカ25とのそれぞれに共通に出力するべきパルス信号を生成して鳴動部63に出力する(鳴動制御)。
なお、このデコーダとしての復号の処理は、制御部21によって行うこととしてもよいし、制御部21とは別に音声処理部23においてハードウエア的に行ってもよい。
鳴動部63は、音声処理部23の機能として実現される。この鳴動部63は、鳴動制御部62が出力するパルス信号を共通の信号源として、ウーファスピーカ24とツイータースピーカ25とのそれぞれに対応して設けられたアナログ回路に、それぞれ出力する。ここでウーファスピーカ24に対応して設けられたアナログ回路においては、鳴動制御部62が出力するパルス信号から所定のカットオフ周波数を越える周波数成分を除去する第1フィルタF1と、当該第1フィルタF1を通過した信号を増幅してウーファスピーカ24に出力する第1アンプA1とを含む。
また、ツイータースピーカ25に対応して設けられたアナログ回路においては、鳴動制御部62が出力するパルス信号から少なくとも所定の周波数帯域を通過させる第2フィルタF2と、当該第2フィルタF2を通過した信号を増幅してツイータースピーカ25に出力する第2アンプA2とを含む。
ここで第1フィルタF1のカットオフ周波数f1と、第2フィルタF2が通過させる帯域の下限周波数f2とは、f1≦f2となるように設定されてもよい。これにより、所定の周波数未満の音声については専らウーファスピーカ24を鳴動させ、ツイータースピーカ25の鳴動を抑制できる。
そして、この鳴動部63の第1アンプA1及び第2アンプA2によりそれぞれ増幅された信号により、ウーファスピーカ24とツイータースピーカ25とが鳴動される。
本実施の形態において特徴的なことの一つは、同じ周波数のパルス信号が入力された場合であっても、ウーファスピーカ24やツイータースピーカ25の種類によっては異なる音程(周波数)の音声が鳴動される場合があることに配慮して、各鳴動デバイスの種別に応じたパルス信号が生成されるよう、情報処理装置としてのゲーム機本体1側において駆動パラメータ情報を予め調整して出力するようにしていることである。これにより、多様な鳴動デバイスに対応して、鳴動させる音声の周波数を統一することができる。
本実施の形態ではゲーム機本体1とコントローラ2との間は、図9に示すように周期的に下り(ゲーム機本体1からコントローラ2へ)の信号と上り(コントローラ2からゲーム機本体1へ)の信号とを含むデータパケットを送受することで行なわれる。ここで下り信号に含まれるデータは、通信部27のレジスタに取り込まれて保持される。そして通信部27は制御部21に対して読み出しの要求を発行する(S1)。制御部21は、通信部27のレジスタから音声データを取得してワークメモリに取り込む(S2)。そしてこの取り込んだ音声データから通信周期の間、鳴動させ続けるに十分な音声データ部分を音声処理部23に出力する(S3)。
一方、操作部31、32や、アナログ操作部33に対する利用者の操作に係るデータは、制御部21のワークメモリに取り込まれ(S4)、このワークメモリから所定のタイミングで、通信部27のバッファに書込まれる(S5)。通信部27は、次の上り信号の通信タイミングで、この信号をゲーム機本体1側へ送出する(S6)。
なお、本実施の形態では、ゲーム機本体1側は、この通信周期を超える期間に亘り鳴動させ続けるに十分な音声データを送出してもよい。この場合、コントローラ2は、当該音声データを記憶部22などに保持しておく。そして、ゲーム機本体1側からの通信において音声データが到達しない場合(何らかの理由により下りの信号が受信されない場合、または他のデータ量が多く、十分な量の音声データが受信できない場合)には、この記憶部22に格納されている音声データを利用して音声の鳴動再生を継続する。
コントローラ2に内蔵される各部は、その例を図10(a)から(c)に示すように、把持部30の一方にウーファスピーカ24を配置し、制御部21や記憶部22等を実装したプリント基板と、バッテリ26とをコントローラ2の中央部に配置し、ツイータースピーカ25を、コントローラ2の中央部手前側に配置することとしてもよい(図10(a))。また、この配置に代えて、バッテリ26をウーファスピーカ24とは反対側の把持部30に収納してもよい(図10(b))。図10(b)では、バッテリ26がコントローラ2の右側の把持部30Rに内蔵される例を示しているが、左右を逆にしてもよい。つまり、バッテリ26がコントローラ2の左側の把持部30Lに内蔵されてもよい。さらに、図10(a)においてバッテリ26とウーファスピーカ24の配置位置を交換してもよい(図10(c))。なお、図10は、図4に例示したコントローラ2を平面視した状態において、内部を透視した場合の概要を表す概要図である。
[音声信号の変形例]
なお、ここまでの説明では、ゲーム機本体1側においてアプリケーションプログラム実行部51側で音声波形信号を生成ないし指示して、これを符号化して送信することとしたが、ゲーム機本体1からコントローラ2へと送信される音声の鳴動指示(鳴動パラメータ情報)はこれに限られるものではない。
例えばゲーム機本体1側において、予め複数の波形データをそれぞれ固有の波形識別子に関連づけて記憶部12などに保持させておき、アプリケーションプログラム実行部51から指定される波形識別子に関連づけて保持している波形データを、符号化して送信してもよい。この場合にも、アプリケーションプログラム実行部51から音声波形信号の入力を受けてもよく、そのときには波形データによって表される波形信号を、音声波形信号にミキシングして合成し、その後に符号化すればよい。
さらにこの波形データは符号化済みの波形データであってもよい。この場合は、アプリケーションプログラム実行部51から指定される波形識別子に関連づけて保持している波形データの符号を送信すればよい。この場合においてコントローラ2の鳴動デバイスの種別に対応する符号とするためには、ゲーム機本体1の記憶部12に、図8に示したテーブルに代えて、入力される符号に応じて出力するべき駆動パラメータ情報を関連づけるテーブルを保持しておく。そしてこのテーブルを参照して、波形データの符号を、駆動パラメータ情報に変換し、この変換後の駆動パラメータ情報をコントローラ2に送信する。
また、さらにアプリケーションプログラム実行部51から音声波形信号の入力を受けている場合は、このアプリケーションプログラム実行部51から入力される音声波形信号を符号化した上で、符号化済みの波形データを多重化して送信する。このように多重化されている場合は、コントローラ2側では、当該多重化されたデータから、符号化済みの波形データと、符号化された音声波形信号を分離し、それぞれを復号してから合成することになる。
このように予め波形データを用意しておくと、例えばゲームにおいてゲームキャラクタの動作と同期して出力するべき音声(足音や銃撃音等)について、アプリケーションプログラム実行部51からデバイスドライバまでに音声波形信号そのものを出力する必要がないので、同期制御が容易となる。また利用頻度の高い効果音などをここでの波形データとして用意しておくことで、アプリケーションプログラムの開発を容易にできる。なお、ここでの波形データは、ウーファスピーカ24にて主として鳴動させるべき音声に係るもの(第1フィルタF1を通過し、第2フィルタF2に阻止される周波数成分を主として含むもの)や、ツイータースピーカ25にて主として鳴動させるべき音声に係るもの(第1フィルタF1にて阻止され、第2フィルタF2を通過する周波数成分を主として含むもの)など、コントローラ2に設けられたスピーカーごとに対応した周波数特性を有するデータとしておいてもよい。
さらに、ゲーム機本体1からコントローラ2へと送信される音声のデータは、ステレオ音声など、複数チャネルのデータであってもよい。例えば左チャネル(Lch)と、右チャネル(Rch)とのそれぞれの信号を含んでもよい。
この場合において、ウーファスピーカ24とツイータースピーカ25とのそれぞれで鳴動させるべき音声を、互いに異なるチャネルの信号としてもよい。すなわちこの例では、互いに異なるチャネルの音声信号がそれぞれ、ウーファスピーカ24とツイータースピーカ25との各々に対する信号源となる。このようにするときには、コントローラ2の鳴動部63では、予めウーファスピーカ24のための信号として定められたチャネルの音声信号(例えばLchの音声信号)を、第1フィルタF1、第1アンプA1を介して濾過、増幅し、ウーファスピーカ24に出力する。同様に、予めツイータースピーカ25のための信号として定められたチャネルの音声信号(例えばRchの音声信号)を、第2フィルタF2、第2アンプA2を介して濾過、増幅し、ツイータースピーカ25に出力する。この例によると、例えば低音部(ウーファスピーカ24)だけを鳴動させてコントローラ2の筐体を響かせたり、中・高音部(ツイータースピーカ25)だけを鳴動させて軽い音声を鳴動させるなどの演出効果を得ることができる。
また、複数の鳴動デバイスがある場合は、各鳴動デバイスに対して出力するべき駆動パラメータ情報を個別に出力してもよい。すなわちゲーム機本体1とコントローラ2との間で送受されるデータが、例えば8ビットずつのデータ要素の列であり、このデータ要素の列によりコマンドとパラメータ群とを記述している場合、コマンドが、例えば「42H」(末尾のHは16進数であることを表す)であれば、引き続く所定個数のデータ要素を駆動パラメータ情報として、ゲーム機本体1とコントローラ2とが送受信し、コントローラ2において、各鳴動デバイスについて、対応する駆動パラメータ情報を用いて鳴動制御を行なうようにしてもよい。また、例えば「49H」であれば、引き続く1つのデータ要素を鳴動パラメータ情報とするなどとして定めておき、この場合はコントローラ2は、各鳴動デバイスに対して共通の鳴動パラメータ情報に基づく鳴動制御を行なうこととしてもよい。
このようにコントローラ2に含まれる複数のスピーカを選択的に鳴動させるための構成としては、このように複数チャネルの音声信号を用いる方法や、複数の駆動パラメータ情報を連続的に送信する方法のほか、次のような方法も考えられる。
すなわち、ゲーム機本体1側の制御部21が、鳴動させるべきスピーカを特定する鳴動スピーカ特定情報をコントローラ2側へ送信し、コントローラ2の音声処理部23が、当該鳴動スピーカ特定情報によって特定されるスピーカに対してのみ、音声信号を出力する。例えば、ゲーム機本体1側の制御部21が、ウーファスピーカ24を特定する鳴動スピーカ特定情報を送信したとする。このとき、コントローラ2の制御部21は、当該鳴動スピーカ特定情報を音声処理部23に出力する。音声処理部23は、入力された鳴動スピーカ特定情報によって特定されるスピーカ(ここではウーファスピーカ24)に対し、ゲーム機本体1側から受信される音声信号を出力する。つまり、ここでは音声信号は、第1フィルタF1と第1アンプA1とを介してウーファスピーカ24には出力されるが、第2フィルタF2には出力されず、従ってツイータースピーカ25は鳴動しないよう制御される。
さらに、コントローラ2の音声処理部23は、例えばMIDI(Musical Instruments Digital Interface)の規格に定められた音楽信号(音程、音長、音の強度、音の種類、音色効果などの情報を含む音楽の演奏情報)に基づいて音声信号を生成する機能(シンセサイザ)を備えてもよい。具体例としてMIDIの音楽信号としては、SMF(Standard
MIDI File)などが知られている。コントローラ2の音声処理部23では、この演奏情報に基づいてシンセサイザを鳴動させる。このようなシンセサイザは、例えば携帯電話機の着信音を鳴動させるためのチップとして広く知られたものを利用して実現できる。
このシンセサイザを備えた音声処理部23では、ゲーム機本体1側が送信した音声信号に、このシンセサイザで合成した音声信号をミキシングして、ウーファスピーカ24やツイータースピーカ25に接続されたアナログ回路へそれぞれ出力する。なお、選択的に鳴動させる場合は、指示されたスピーカに対応するアナログ回路へ出力する。
コントローラ2においては、さらに予め複数の波形データをそれぞれ固有の波形識別子に関連づけて記憶部22などに保持させておいてもよい。ゲーム機本体1側では、鳴動させたい波形データに対応する波形識別子をコントローラ2へ伝達する。コントローラ2の制御部21は、ゲーム機本体1から受信される音声データに、この波形データを合成(ミキシング)して、音声処理部23に出力する。
以上のように本実施の形態では、
(1)ゲーム機本体1側において符号化されていない音声波形データを、アプリケーションプログラム実行部51にて生成ないし保持しておき、これを符号化して送信する。
(2)ゲーム機本体1側において符号化されていない音声波形データを予めデバイスドライバが利用可能なように保持させておき、アプリケーションプログラム実行部51からは、デバイスドライバに対して保持している音声波形データを鳴動させる指示(複数ある場合には鳴動の対象となる音声波形データを特定する情報を含む)を出力し、デバイスドライバにて、これを符号化して送信する。
(3)ゲーム機本体1側において符号化された音声波形データを予めデバイスドライバが利用可能なように保持させておき、アプリケーションプログラム実行部51からは、デバイスドライバに対して保持している音声波形データを鳴動させる指示(複数ある場合には鳴動の対象となる音声波形データを特定する情報を含む)を出力し、デバイスドライバが当該指示に従って音声波形データを送信する。
(4)コントローラ2側においてMIDI信号等、音楽信号に基づく音声信号を生成する構成を備えておき、ゲーム機本体1側からは音楽信号を送信し、コントローラ2において当該ゲーム機本体1側から受信される音楽信号に基づいて音声信号を生成する。
(5)ゲーム機本体1側において符号化されていない音声波形データを保持しておき、ゲーム機本体1は、当該コントローラ2で保持している音声波形データを鳴動させる指示(複数ある場合には鳴動の対象となる音声波形データを特定する情報を含む)を出力し、コントローラ2にて、当該音声波形データに基づく音声信号を出力する。
などの種々の構成を採用し得る。なお、これらを適宜組み合わせて、例えば符号化前のデータ同士はデータ値どうしを加算するなどの処理により、また、音声信号はアナログミキサなどによりミキシングして合成した音声を鳴動させるようにしてもよい。
なお、例えばMIDI信号のみを用いる場合は、コントローラ2側においてD/A変換器は必ずしも必要でない。
[振動コマンドの変換]
さらに従来、内部に振動デバイスを備えたコントローラを想定したゲームなどのアプリケーションプログラムもある。そこで、本実施の形態のゲーム機本体1においては、コントローラ2が出力するコントローラ種別情報に、少なくとも一つの鳴動デバイスに係るデバイス種別情報が関連づけられていれば、こうした振動デバイスに対する振動コマンドを、音声信号に変換して、例えばコントローラ2のウーファスピーカ24を介して鳴動させるようにしてもよい。これにより、振動モーターがあることを前提に開発されたアプリケーションプログラムの振動コマンドに応答できるようになる。
この場合のゲーム機本体1の機能的な構成は、図11に示すように、ゲーム等のアプリケーションプログラム実行部51と、振動変換部53と、ドライバプログラム実行部52とを含んで構成される。ここで図5に示したものと同様の構成となる部分については、同じ符号を付して詳細な説明を省略する。
この例では、アプリケーションプログラム実行部51は、実行の対象となったアプリケーションプログラムに含まれる指示に従い、振動デバイスに対する振動指示コマンドを発行する。そしてアプリケーションプログラム実行部51は、コントローラ2が出力するコントローラ種別情報に、少なくとも一つの鳴動デバイスに係るデバイス種別情報が関連づけられているか否かを判断し、関連づけられていなければ、当該振動指示コマンドをそのままコントローラ2に送信出力する。
一方、コントローラ2が出力するコントローラ種別情報に、少なくとも一つの鳴動デバイスに係るデバイス種別情報が関連づけられていれば、発行した振動指示コマンドを振動変換部53に出力する。
このようにコントローラ2の種別に応じて、コントローラ2に出力するコマンドを異ならせる(ここでは振動コマンドと鳴動コマンドとを選択的に出力する)ことで、コントローラ2が備えているデバイスに対応した指示を出力できる。
振動変換部53は、制御部11の処理として実現できる。具体的な例としてこの振動変換部53は図11に示すように、振動コマンド解析部71と、音声データ生成部72とを含んで構成されている。振動コマンド解析部71は、アプリケーションプログラム実行部51が発行した振動コマンドを受信して、当該振動コマンドによって指定される振動モード(振動オン/オフや、振動強度など)の情報を取り出し、音声データ生成部72に出力する。
音声データ生成部72は、振動コマンド解析部71が出力する振動モードの情報に基づいて、音声データを生成する。ここで音声データは、例えば振動モードによって示される振動態様に従った波形データである。
振動変換部53は、この生成した音声データをドライバプログラム実行部52に出力する。そしてドライバプログラム実行部52のエンコーダ57にて、この音声データが符号化されてコントローラ2へ送出される。この際も、エンコーダ57は、音声データの所定のサンプリングタイミングごとの周波数値を、鳴動コマンドとして取得する。そして、エンコーダ57は、予め取得されている種別情報に対応する、図8に示したテーブルを参照して、各サンプリングタイミングにおける周波数に対応する駆動パラメータ情報としての数値を取得する。エンコーダ57は、こうして生成した駆動パラメータ情報を、コントローラ通信部16を介してコントローラ2側へ送信する。
そして当該送出された駆動パラメータ情報がコントローラ2にて復号され、アナログの駆動信号(パルス信号)に変換されて、周波数帯域濾過され、増幅されてからウーファスピーカ24やツイータースピーカ25に出力される。ここで振動の周波数は、一般に低周波数領域にあるので、ツイータースピーカ25に対応して設けられるアナログ回路では当該周波数の信号は通過阻止され、ツイータースピーカ25の鳴動音量は小さくなる。
また、振動変換部53の音声データ生成部72は、振動コマンドによって示された振動の期間が終了してから(振動を停止する制御がされた時点から)、その後予め定められた残響期間に亘り、音声信号の鳴動を継続させるよう音声データを生成して出力する。この残響期間においては、音声信号は振動指示コマンドにより示される振動期間における音声信号よりも音量を小さくする。また、この残響期間に亘り、音量を漸減させてもよい。
例えば振動デバイスを備えたコントローラに対して、振動コマンドに基づく振動制御を1/60秒ごとに行なっていた場合、慣性の影響により、振動制御の開始時点での立ち上がりは遅く、振動制御の終了(振動期間終了時点)において直ちに立ち下がらずに振動を継続することになる。すなわち、振動変換部53は、振動コマンドに基づいて従来行なわれていた振動制御の時間変化に基づいて音声信号の音量を変化させる。
例えば制御部11は、振動コマンドによる振動の開始の時点からの経過時間を1/60秒で除して振動がオンとなってから振動制御が行なわれた回数を求める。そしてこの回数に対応する音量を演算して、または予め定められたテーブルを参照して決定する。そして当該決定した音量の音声信号を生成する。
また制御部11は、振動コマンドによる振動の終了の時点からの経過時間(振動がオフとなってからの時間)を求める。そしてこの時間に対応する音量を演算して、または予め定められたテーブルを参照して決定する。そして当該決定した音量の音声信号を生成する。
これにより、振動デバイスが慣性によって振動停止指示後に振動を継続する様子を模式的に再現できる。
また、回数に代えて、制御部11は、過去n回(nは、予め定めた整数)分の振動コマンドの受け入れ履歴を保持し、このn回の履歴の情報に基づいて予め定めたテーブルなどを参照しつつ、音量を決定し、当該決定した音量の音声信号を生成してもよい。例えばn=3の場合、振動コマンドの有無について、「なし、なし、あり」の場合と、「なし、あり、あり」の場合と、「あり、あり、あり」の場合とでこの順に大きい音量となるようにテーブルを設定しておく。同様に、振動の終了の場合について、「あり、あり、なし」の場合や、「あり、なし、なし」の場合についてこの順に小さい音量となるようテーブルを設定する。さらに、「なし、あり、なし」や「あり、なし、あり」など、周期的に振動がオン/オフされる場合についても対応する音量を予め定めておくことができる。
さらにここでは、例えば1/60秒ごとに入力され得る振動コマンドについて、毎回(1/60秒ごとに)処理を実行することとしているが、例えば1/30秒など、間欠的に処理を実行してもよい。この場合、例えば入力される振動コマンドをΔt秒ごとにサンプリングして取得し、当該取得した振動コマンドに基づいて、連続m回(Δt/(1/60秒)=m回)分、つまりΔt秒分の振動コマンドに対応する音声信号を生成する。また、サンプリングしない期間については、前回サンプリングした振動コマンドに基づいて生成した音声信号の出力を継続させることとしてもよい。
なお、ここでは振動コマンドに基づく音声信号の生成をゲーム機本体1側にて行なう例について述べたが、コントローラ2にて振動コマンドに基づく音声信号の生成を行なってもよい。この場合、ゲーム機本体1側ではアプリケーションプログラム実行部51の処理として、実行の対象となったアプリケーションプログラムに含まれる指示に従い、振動デバイスに対する振動コマンドを発行し、コントローラ2へ送信する。
コントローラ2の制御部21は、上記振動変換部53と同様の処理により、ゲーム機本体1から受信される振動コマンドに基づいて音声信号を生成する。この制御部21もまた、振動コマンドによって示された振動の期間が終了してから(振動を停止する制御がされた時点から)、その後予め定められた残響期間に亘り、音声信号の鳴動を継続させるよう音声データを生成して出力してもよい。この残響期間においては、音声信号は振動コマンドにより示される振動期間における音声信号よりも音量を小さくする。また、この残響期間に亘り、音量を漸減させてもよい。
例えば振動デバイスを備えたコントローラに対して、振動コマンドに基づく振動制御を1/60秒ごとに行なっていた場合、慣性の影響により、振動制御の開始時点での立ち上がりは遅く、振動制御の終了(振動期間終了時点)において直ちに立ち下がらずに振動を継続することになる。すなわち制御部21は、振動コマンドに基づいて従来行なわれていた振動制御の時間変化に基づいて音声信号の音量を変化させる。
例えば制御部21は、振動コマンドによる振動の開始の時点からの経過時間を1/60秒で除して振動がオンとなってから振動制御が行なわれた回数を求める。そしてこの回数に対応する音量を演算して、または予め定められたテーブルを参照して決定する。そして当該決定した音量の音声信号を生成する。
また制御部21は、振動コマンドによる振動の終了の時点からの経過時間(振動がオフとなってからの時間)を求める。そしてこの時間に対応する音量を演算して、または予め定められたテーブルを参照して決定する。そして当該決定した音量の音声信号を生成する。
これにより、振動デバイスが慣性によって振動停止指示後に振動を継続する様子を模式的に再現できる。
なお、この場合も回数に代えて、制御部21は、過去n回(nは、予め定めた整数)分の振動コマンドの受け入れ履歴を保持し、このn回の履歴の情報に基づいて予め定めたテーブルなどを参照しつつ、音量を決定し、当該決定した音量の音声信号を生成してもよい。
さらに、例えば1/60秒ごとに入力され得る振動コマンドについて、毎回(1/60秒ごとに)処理を実行することせず、例えば1/30秒など、間欠的に処理を実行してもよい。この場合、例えば入力される振動コマンドをΔt秒ごとにサンプリングして取得し、当該取得した振動コマンドに基づいて、連続m回(Δt/(1/60秒)=m回)分、つまりΔt秒分の振動コマンドに対応する音声信号を生成する。また、サンプリングしない期間については、前回サンプリングした振動コマンドに基づいて生成した音声信号の出力を継続させることとしてもよい。
このように本実施の形態によると、各コントローラ2において音声を鳴動させることができ、プレイヤごとに臨場感のある音声を伝達することができる。
なお、このようにコントローラ2側において受信した振動コマンドから音声信号を生成して各鳴動デバイスを鳴動制御する場合は、ゲーム機本体1側のエンコーダ57にて、コントローラ2の備える鳴動デバイスの特性に合わせた駆動パラメータ情報を生成するのではなく、コントローラ2側において、制御部21が予め定められている基準鳴動デバイスとコントローラ2自身の備える鳴動デバイスとの相違に基づいて予め定められたパラメータ変換テーブルを参照して、音声信号の各周波数値を駆動パラメータ情報(入力パラメータ情報)として、この入力パラメータ情報を変換し、変換後の駆動パラメータ情報(出力パラメータ情報)に基づいて鳴動制御を行なうこととしてもよい。
この場合は、コントローラ2の記憶部22に、図12に示すように、入力される駆動パラメータ情報(入力パラメータ情報)を変換後の駆動パラメータ情報(出力パラメータ情報)に関連づけるテーブル(パラメータ変換テーブル)を記憶させておく。そしてコントローラ2の制御部21が、生成した音声データを所定のサンプリングタイミングごとにサンプリングして得た周波数値を、入力パラメータ情報として、この入力パラメータ情報に対応する出力パラメータ情報を、パラメータ変換テーブルを参照して取得する。そして当該出力パラメータ情報に基づいて、各鳴動デバイスを鳴動制御する。
なお、振動コマンドに関する場合のみならず、効果音などの鳴動コマンドにおける場合でも、ゲーム機本体1側で鳴動コマンドに基づいて符号化された音声データを生成する際に、コントローラ2の備える鳴動デバイスの特性に合わせた駆動パラメータ情報を生成するのではなくコントローラ2において、コントローラ2自身が備える鳴動デバイスに応じた駆動パラメータ情報を生成してもよい。
すなわち、ゲーム機本体1側では、鳴動コマンドに基づいて、予め定められた基準鳴動デバイスに対する駆動パラメータ情報を生成して出力する。またコントローラ2の記憶部22には、予め入力される駆動パラメータ情報(入力パラメータ情報)を変換後の駆動パラメータ情報(出力パラメータ情報)に関連づけるテーブル(パラメータ変換テーブル)を格納しておく。制御部21は、ゲーム機本体1から受信した駆動パラメータ情報に基づいて生成した音声データを所定のサンプリングタイミングごとにサンプリングする。そしてこのサンプリングによって得た周波数値を、入力パラメータ情報として、この入力パラメータ情報に対応する出力パラメータ情報を、パラメータ変換テーブルを参照して取得する。そして当該出力パラメータ情報に基づいて、各鳴動デバイスを鳴動制御する。
なお、ここではコントロールデバイス2がウーファスピーカ24と、ツイータースピーカ25とを備える場合について説明したが、3つ以上のスピーカを備えてもよい。さらに備えるスピーカの組み合わせはこれに限られず、フルレンジ、スーパーウーファ、ウーファ、スコーカ、ツイーター、スーパーツイーター等種々の周波数特性を備えたスピーカを任意に組み合わせてもよい。
また、コントロールデバイス2において、ウーファスピーカ24やツイータースピーカ25など備えているスピーカごとに、オン/オフ、ないしボリュームを制御するスイッチや、可変抵抗器などを備えても構わない。
さらに、ここまでの説明ではコントローラ2が鳴動デバイスを備えている場合を例として記載したが、コントローラ2が鳴動デバイスを備えず、振動デバイスを備えている場合は、ゲーム機本体1からは鳴動コマンドに代えて振動コマンドが出力されることとなり、コントローラ2の振動デバイスは、当該振動コマンドに基づいて駆動されることとなる。
また、ここではコントローラ種別情報に対して鳴動デバイスの種別を表すデバイス種別情報を関連づけて保持し、コントローラ側から受信されるコントローラ種別情報をキーとしてデバイス種別情報を取得することとしたが、これに代えて、コントローラ2の記憶部22に、コントローラ2が備えている鳴動デバイスの種別、例えばウーファスピーカ24及びツイータースピーカー25の種別を特定するデバイス種別情報を格納しておき、ゲーム機本体1の電源投入時(コントローラ2とゲーム機本体1との通信が開始されるとき)などの所定のタイミングで、制御部21が、コントローラ種別情報に併せて、あるいはコントローラ種別情報に代えて、デバイス種別情報を送出するようにしてもよい。この場合は、ゲーム機本体1側のアプリケーションプログラム実行部51が当該コントローラ2から受信されるデバイス種別情報を参照して、コントローラ2が鳴動デバイスを備えているか否かを判断し、また、当該デバイス種別情報をエンコーダ57に出力すればよい。
1 ゲーム機本体、2 コントローラ、11,21 制御部、12,22 記憶部、13 表示制御部、14 外部インタフェース部、15 ディスクドライブ、16 コントローラ通信部、23 音声処理部、24 ウーファスピーカ、25 ツイータースピーカ、26 バッテリ、27 通信部、30 把持部、31 第1操作部、32 第2操作部、33 アナログ操作部、34 スタートボタン、35 セレクトボタン、41 弾性体、42 錘、51 アプリケーションプログラム実行部、52 ドライバプログラム実行部、55 鳴動コマンド受入部、56 音声データ生成部、57 エンコーダ、61 データ受入部、62 鳴動制御部、63 鳴動部、71 振動コマンド解析部、72 音声データ生成部。