(57)【要約】      （修正有）【課題】ゲーム装置の使用態様に応じて振動波形を調整し、使用態様が異なる場合であっても同様に振動を知覚させることができる振動制御システムを提供する。【解決手段】ゲーム装置１０は、振動制御装置として機能する本体装置１０ａおよびこの本体装置に着脱可能な第１コントローラ１４および第２コントローラ１６を含む。ゲーム装置は、２つのコントローラを本体装置に装着した第１態様、２つのコントローラを本体装置から分離した状態で個別に使用する第２態様、２つのコントローラを本体装置から離脱した状態で一体的に連結して使用する第３態様または２つのコントローラとは異なる第３コントローラを使用する第４態様で使用される。各コントローラには同じ種類の振動モータ１４ｃ、１６ｃが使用され、本体装置に内蔵されるＣＰＵはゲーム装置の使用態様に応じて振動波形を調整する。【選択図】図１
2018102610.tif 000002
【特許請求の範囲】
【請求項１】
振動データを発生する振動データ発生部と、
前記振動データ発生部が発生した振動データに基づいて、第１の装置を振動させ、前記振動データに対応する振動波形を前記第１の装置の特性とは異なる第２の装置の特性に応じて調整して当該第２の装置を振動させる振動制御部とを備える、振動制御システム。
【請求項２】
前記振動データ発生部が発生する振動データは、当該振動データに対応する振動波形の周波数を示す値と振幅を示す値のデータである、請求項１記載の振動制御システム。
【請求項３】
前記振動制御部は、前記振動波形の振幅を周波数帯毎に調整する、請求項２記載の振動制御システム。
【請求項４】
前記振動データは、前記振動波形の周波数と振幅の値の組についてのデータであり、
前記振動制御部は、前記周波数帯毎に、各組の前記振幅に係数を掛けることにより前記振動波形を調整する、請求項３記載の振動制御システム。
【請求項５】
前記振動制御部は、前記第１の装置と前記第２の装置を同時に振動させる、請求項１ないし４のいずれかに記載の振動制御システム。
【請求項６】
前記振動データ発生部は、前記第１の装置および前記第２の装置とは別の本体装置に含まれる、請求項１ないし５のいずれかに記載の振動制御システム。
【請求項７】
前記本体装置には、前記第１の装置および前記第２の装置の少なくとも一方が接続され、
前記振動制御部は、接続された前記第１の装置および前記第２の装置の少なくとも一方から取得した種別情報に基づいて、対応する前記第１の装置および前記第２の装置の少なくとも一方の振動波形を調整する、請求項６記載の振動制御システム。
【請求項８】
前記本体装置はアプリケーションプログラムを実行するアプリケーション実行部を備え、
前記振動制御部は、前記アプケーション実行部によって実行されるアプリケーションプログラムから通知される前記第１の装置または前記第２の装置の接続態様に応じて、当該第１の装置または当該第２の装置の振動波形を調整する、請求項６記載の振動制御システム。
【請求項９】
振動データを発生する振動データ発生部と、
前記振動データ発生部が発生した振動データに基づいて、第１の装置を振動させ、前記振動データに対応する振動波形を前記第１の装置の特性とは異なる第２の装置の特性に応じて調整して当該第２の装置を振動させる振動制御部とを備える、振動制御装置。
【請求項１０】
コンピュータによって実行される振動制御プログラムであって、
前記コンピュータに、
振動データを発生する振動データ発生ステップと、
前記振動データ発生ステップにおいて発生した振動データに基づいて、第１の装置を振動させ、前記振動データに対応する振動波形を前記第１の装置の特性とは異なる第２の装置の特性に応じて調整して当該第２の装置を振動させる振動制御ステップを実行させる、振動制御プログラム。
【請求項１１】
振動制御方法であって、
（ａ）振動データを発生するステップと、
（ｂ）前記ステップ（ａ）において発生した振動データに基づいて、第１の装置を振動させ、前記振動データに対応する振動波形を前記第１の装置の特性とは異なる第２の装置の特性に応じて調整して当該第２の装置を振動させるステップとを含む、振動制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は振動制御システム、振動制御装置、振動制御プログラムおよび振動制御方法に関し、特にたとえば、特性の異なる複数の装置の振動を制御する、振動制御システム、振動制御装置、振動制御プログラムおよび振動制御方法に関する。
【背景技術】
【０００２】
背景技術の一例が特許文献１に開示される。この特許文献１には、グリップ部の内部に、情報処理装置（ゲーム装置）からの制御信号に基づいて振動を発生させる振動部が配置されているコントローラの構成が開示される。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２０１３−２３６９０９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
特許文献１のゲームシステムでは、種類の異なるコントローラをゲーム装置と通信可能に接続することが可能である。同じ振動波形で各コントローラの振動部が振動を発生させると、コントローラの種類によってプレイヤが知覚する振動が異なる場合がある。つまり、同じゲームをプレイした場合であっても、使用するコントローラの種類が異なることにより、プレイヤが感じる振動は別のものになる。そのため、ゲームの製作者は、プレイヤがどのような特性のコントローラを使用するかまで想定してゲーム中の振動表現を考える必要があった。
【０００５】
それゆえに、この発明の主たる目的は、新規な、振動制御システム、振動制御装置、振動制御プログラムおよび振動制御方法を提供することである。
【０００６】
また、この発明の他の目的は、特性の異なる装置であっても同様に振動を知覚させることができる、振動制御システム、振動制御装置、振動制御プログラムおよび振動制御方法を提供することである。
【０００７】
さらに、この発明のその他の目的は、アプリケーションの開発にかかる労力を軽減することができる、振動制御システム、振動制御装置、振動制御プログラムおよび振動制御方法を提供することである。
【課題を解決するための手段】
【０００８】
第１の発明は、振動データ発生部と、振動制御部とを備える、振動制御システムである。振動データ発生部は、振動データを発生する。振動制御部は、振動データ発生部が発生した振動データに基づいて、第１の装置を振動させ、振動データに対応する振動波形を第１の装置の特性とは異なる第２の装置の特性に応じて調整して当該第２の装置を振動させる。
【０００９】
第１の発明によれば、第２の装置を振動させる場合の振動波形を調整するので、第１の装置と第２の装置との特性が異なる場合であっても、アプリケーションの製作者に装置の特性に応じた振動表現を考えさせること無く、同様の振動を知覚させることができる。このため、アプリケーションの開発にかかる労力を軽減することができる。
【００１０】
第２の発明は、第１の発明に従属し、振動データ発生部が発生する振動データは、当該振動データに対応する振動波形の周波数を示す値と振幅を示す値のデータである。
【００１１】
第２の発明によれば、振動波形の周波数と振幅を指定することによって、第１の装置および第２の装置を振動させることができる。
【００１２】
第３の発明は、第２の発明に従属し、振動制御部は、振動波形の振幅を周波数帯毎に調整する。
【００１３】
第３の発明によれば、周波数帯毎に振幅を調整するので、振動波形の全部を調整するよりも簡単に調整することができる。
【００１４】
第４の発明は、第３の発明に従属し、振動データは、振動波形の周波数と振幅の値の組についてのデータであり、振動制御部は、周波数帯毎に、各組の振幅に係数を掛けることにより振動波形を調整する。
【００１５】
第４の発明によれば、振動波形の周波数および振幅のうち、振幅を調整するので、振動の大きさを調整して、第１の装置または第２の装置を使用しても、同様の振動を知覚させることができる。
【００１６】
第５の発明は、第１ないし第４の発明のいずれかに従属し、振動制御部は、第１の装置と第２の装置を同時に振動させる。
【００１７】
第５の発明によれば、第１の装置または第２の装置を使用しても、同様の振動を知覚させることができる。
【００１８】
第６の発明は、第１ないし第５の発明のいずれかに従属し、振動データ発生部は、第１の装置および第２の装置とは別の本体装置に含まれる。
【００１９】
第６の発明によれば、本体装置で振動データを発生させるので、第１の装置および第２の装置は本体装置に装着しても良いし、本体装置から分離してもよい。
【００２０】
第７の発明は、第６の発明に従属し、本体装置には、第１の装置および第２の装置の少なくとも一方が接続される。振動制御部は、接続された第１の装置および第２の装置の少なくとも一方から取得した種別情報に基づいて、対応する第１の装置および第２の装置の少なくとも一方の振動波形を調整する。
【００２１】
第７の発明によれば、第１の装置および第２の装置の接続態様に応じて第１の装置および第２の装置を振動させることができる。
【００２２】
第８の発明は、第６の発明に従属し、本体装置はアプリケーションプログラムを実行するアプリケーション実行部を備える。振動制御部は、アプケーション実行部によって実行されるアプリケーションプログラムから通知される第１の装置または第２の装置の接続態様に応じて、当該第１の装置または当該第２の装置の振動波形を調整する。
【００２３】
第８の発明によれば、アプリケーションプログラムから第１の装置および第２の装置の接続態様を取得して第１の装置および第２の装置を振動させることもできる。
【００２４】
第９の発明は、振動データを発生する振動データ発生部と、振動データ発生部が発生した振動データに基づいて、第１の装置を振動させ、振動データに対応する振動波形を第１の装置の特性とは異なる第２の装置の特性に応じて調整して当該第２の装置を振動させる振動制御部とを備える、振動制御装置である。
【００２５】
第１０の発明は、コンピュータによって実行される振動制御プログラムであって、コンピュータに、振動データを発生する振動データ発生ステップと、振動データ発生ステップにおいて発生した振動データに基づいて、第１の装置を振動させ、振動データに対応する振動波形を第１の装置の特性とは異なる第２の装置の特性に応じて調整して当該第２の装置を振動させる振動制御ステップを実行させる、振動制御プログラムである。
【００２６】
第１１の発明は、振動制御方法であって、（ａ）振動データを発生するステップと、（ｂ）ステップ（ａ）において発生した振動データに基づいて、第１の装置を振動させ、振動データに対応する振動波形を第１の装置の特性とは異なる第２の装置の特性に応じて調整して当該第２の装置を振動させるステップとを含む、振動制御方法である。
【００２７】
第９ないし第１１の発明においても、第１の発明と同様に、第１の装置と第２の装置との特性が異なる場合であっても、同様の振動を知覚させることができるとともに、アプリケーションの開発にかかる労力を軽減することができる。
【発明の効果】
【００２８】
この発明によれば、装置の特性に応じて振動波形を調整するので、第１の装置と第２の装置との特性が異なる場合であっても、アプリケーションの製作者に装置の特性に応じた振動表現を考えさせること無く、同様の振動を知覚させることができる。このため、アプリケーションの開発にかかる労力を軽減することができる。
【００２９】
この発明の上述の目的，その他の目的，特徴および利点は、図面を参照して行う以下の実施例の詳細な説明から一層明らかとなろう。
【図面の簡単な説明】
【００３０】
【図１】図１はゲーム装置の外観構成の限定しない一例を示す図解図である。
【図２】図２は図１に示すゲーム装置において本体装置からコントローラを分離した状態の限定しない一例を示す図解図である。
【図３】図３は図１および図２に示すゲーム装置の電気的な構成の限定しない一例を示すブロック図である。
【図４】図４は図１ないし図３に示す第１コントローラの電気的な構成の限定しない一例を示すブロック図である。
【図５】図５は図１ないし図３に示す第２コントローラの電気的な構成の限定しない一例を示すブロック図である。
【図６】図６は図１に示すゲーム装置の使用態様の限定しない一例を示す図解図である。
【図７】図７は図１に示すゲーム装置の使用態様の他の例を示す図解図である。
【図８】図８は図１に示すゲーム装置の使用態様のその他の例を示す図解図である。
【図９】図９は図１に示すゲーム装置の使用態様のさらに他の例を示す図解図である。
【図１０】図１０は図９に示す第３コントローラの電気的な構成の限定しない一例を示すブロック図である。
【図１１】図１１は各コントローラに内蔵される振動モータに所定の印加電圧を印加した場合において周波数に対する振動加速度の変化を示すグラフの一例を示す図解図である。
【図１２】図１２は第１−第３使用態様においてゲーム装置に含まれるコントローラに内蔵される振動モータに印加する印加電圧の周波数に対する変化を示すグラフである。
【図１３】図１３は第４使用態様においてゲーム装置に含まれるコントローラとは別のコントローラに内蔵される振動モータに印加する印加電圧の周波数に対する変化を示すグラフである。
【図１４】図１４はこの実施例のゲームシステムの限定しない一例を示す図解図である。
【図１５】図１５は図３に示すゲーム装置のＲＡＭのメモリマップの限定しない一例を示す図解図である。
【図１６】図１６は使用態様等に応じた係数データの内容を説明するための図解図である。
【図１７】図１７は図３に示すＣＰＵの使用態様判別処理の限定しない一例の一部を示すフロー図である。
【図１８】図１８は図３に示すＣＰＵの使用態様判別処理の他の一部であって、図１７に後続するフロー図である。
【図１９】図１９は図３に示すＣＰＵの振動制御処理の限定しない一例を示すフロー図である。
【発明を実施するための形態】
【００３１】
図１を参照して、限定しない一例のゲーム装置１０は本体装置１０ａを含む。本体装置１０ａは、振動制御装置としても機能する。この本体装置１０ａには、表示装置１２が設けられる。表示装置１２は、ＬＣＤであるが、有機ＥＬを用いたディスプレイであってもよい。また、ゲーム装置１０は、第１コントローラ１４および第２コントローラ１６を含み、図２からも分かるように、第１コントローラ（左コントローラ）１４は本体装置１０ａの左側に着脱可能に設けられ、第２コントローラ（右コントローラ）１６は本体装置１０ａの右側に着脱可能に設けられる。
【００３２】
なお、この実施例では、情報処理装置の一例としてゲーム装置１０について説明するが、本体装置１０ａは、スマートフォンおよびタブレット端末などを用いることができる。ただし、スマートフォンおよびタブレット端末を用いる場合には第１コントローラ１４および第２コントローラ１６を着脱可能な構成を別途設ける必要がある。
【００３３】
詳細は後述するが、第１コントローラ１４および第２コントローラ１６は、本体装置１０ａに装着した状態で使用することができ、また、本体装置１０ａから分離（離脱）した状態で使用することもできる。第１コントローラ１４および第２コントローラ１６を本体装置１０ａから分離した場合には、一人のプレイヤ（または、ユーザ）が第１コントローラ１４および第２コントローラ１６の両方を使用することができる。
【００３４】
なお、この実施例では、第１コントローラ１４および第２コントローラ１６は、共に本体装置１０ａに装着され、共に本体装置１０ａから分離されるものとする。
【００３５】
第１コントローラ１４には、各種の操作ボタン１４ａが設けられるとともに、アナログスティック１４ｂが設けられる。詳細な説明は省略するが、操作ボタン１４ａおよびアナログスティック１４ｂは、第１コントローラ１４の筐体のうち、本体装置１０ａに装着される面以外のいずれかの面に設けることができる。操作ボタン１４ａは、本体装置１０ａで実行される各種プログラムに応じた指示を行うために設けられる。アナログスティック１４ｂは、傾倒することにより方向を指示することができる。ただし、アナログスティック１４ｂに代えてスライドスティックが設けられてもよい。また、アナログスティック１４ｂは、押圧することにより、操作ボタンとしても機能するようにしてもよい。また、第１コントローラ１４の筐体内には、この第１コントローラ１４（本体装置１０ａに装着される場合も含む）を把持するプレイヤに振動を提示するための振動モータ（振動子）１４ｃが設けられる。これらのことは、後述する第２コントローラ１６についても同じである。
【００３６】
第１コントローラ１４と同様に、第２コントローラ１６には、各種の操作ボタン１６ａが設けられるとともに、アナログスティック１６ｂが設けられる。さらに、第２コントローラ１６の筐体内には、振動モータ１６ｃが設けられる。
【００３７】
また、図示は省略するが、本体装置１０ａの底面には、充電台５０と接続するためのコネクタおよびスピーカ３８（図３参照）の音を放出すための放音孔が設けられる。ただし、本体装置１０ａの底面は、表示装置１２の表示面に垂直な面であり、図１において、下側に位置する面である。たとえば、図１に示すゲーム装置１０をプレイヤが使用する場合には、上記のコネクタおよび放音孔は、プレイヤ側を向く。
【００３８】
さらに、図２に示すように、本体装置１０ａの左側面にはレール部材１０ｂが設けられ、本体装置１０ａの右側面にはレール部材１０ｃが設けられる。一方、第１コントローラ１４の筐体の長手方向の一方側面（図２では右側面）にはスライダ１４ｄが設けられ、第２コントローラ１６の筐体の長手方向の一方側面（図２では左側面）にはスライダ１６ｄが設けられる。
【００３９】
レール部材１０ｂはスライダ１４ｄと係合可能に構成され、レール部材１０ｃはスライダ１６ｄと係合可能に構成される。つまり、レール部材１０ｂとスライダ１４ｄによってスライド機構が形成され、レール部材１０ｃとスライダ１６ｄによってスライド機構が形成される。このため、第１コントローラ１４および第２コントローラ１６は、それぞれ、本体装置１０ａにスライド可能であり、着脱可能に設けられる。
【００４０】
なお、レール部材（１０ｂ，１０ｃ）をコントローラ（１４，１６）側に設けて、スライダ（１４ｄ，１６ｄ）を本体装置１０ａ側に設けるようにしてもよい。また、本体装置１０ａに第１コントローラ１４および第２コントローラ１６を着脱する機構は他の機構が採用されてもよい。たとえば、他の機構としては、本体装置１０ａに設けた凹部（または、凸部）に嵌合する凸部（または、凹部）を、第１コントローラ１４および第２コントローラ１６の筐体のそれぞれに設けるようにしてもよい。
【００４１】
図３は図１および図２に示したゲーム装置１０の電気的な構成を示すブロック図である。図３に示すように、ゲーム装置１０は、ＣＰＵ２０を含み、ＣＰＵ２０には、ＲＡＭ２２、フラッシュメモリ２４、コントローラ通信部２６、左側端子２８、右側端子３０、表示ドライバ３２、ディジタル・アナログ（Ｄ／Ａ）変換器３４および下側端子３６が接続される。また、表示ドライバ３２には表示装置１２が接続され、Ｄ／Ａ変換器３４にはスピーカ３８が接続される。これらのコンポーネントが本体装置１０ａの内部に設けられる。ただし、左側端子２８、右側端子３０および下側端子３６の接続部（接続端子）は、本体装置１０ａから露出するように設けられる。
【００４２】
上述したように、ゲーム装置１０は、第１コントローラ１４および第２コントローラ１６を含み、これらが本体装置１０ａに装着されている場合には、第１コントローラ１４は左側端子２８と電気的に接続され、第２コントローラ１６は右側端子３０と電気に接続される。
【００４３】
また、ゲーム装置１０が充電台（クレードル）５０に載置される場合には、下側端子３６は、充電台５０に設けられた接続プラグ（図示せず）と接続される。この場合、充電台５０から下側端子３６を介してゲーム装置１０に電力が供給され、本体装置１０ａに内蔵されたバッテリが充電されるとともに、本体装置１０ａと接続される第１コントローラ１４および第２コントローラ１６に内蔵されたバッテリが充電される。
【００４４】
ただし、後述するように、充電台５０はテレビジョン受像機６０に接続可能であり（図１４参照）、この場合、本体装置１０ａから下側端子３６を介して出力されるＡＶ（音声および画像（映像））データは、充電台５０を介してテレビジョン受像機６０に与えられる。したがって、テレビジョン受像機６０の表示部（モニタ）にゲーム画面が表示されるとともに、テレビジョン受像機６０のスピーカから音声または／および音楽が出力される。
【００４５】
ＣＰＵ２０は、ゲーム装置１０の全体的な制御を司る。ＲＡＭ２２は、揮発性の記憶装置であり、ＣＰＵ２０のワーキング領域およびバッファ領域として使用される。フラッシュメモリ２４は、不揮発性の記憶装置であり、ゲーム装置１０で実行される各種プログラム（情報処理プログラム）およびセーブデータなどを記憶する。
【００４６】
なお、上記の情報処理プログラムは、一例として、ゲームのアプリケーションプログラムであるが、これに限定される必要は無い。アプリケーションプログラムは、文書作成プログラム、電子メールプログラム、お絵描きプログラム、文字練習プログラム、語学トレーニングプログラム、学習プログラムなどの他のプログラムでもよい。
【００４７】
以下において、本体装置１０ａが、第１コントローラ１４および第２コントローラ１６との間の通信を行う構成について説明する。
【００４８】
この実施例において、第１コントローラ１４および第２コントローラ１６が本体装置１０ａと分離状態にある場合には、本体装置１０ａは、第１コントローラ１４および第２コントローラ１６と無線通信を行う。一方、第１コントローラ１４および第２コントローラ１６が本体装置１０ａに装着されている場合には、本体装置１０ａは、第１コントローラ１４および第２コントローラ１６と有線通信を行う。
【００４９】
コントローラ通信部２６は、第１コントローラ１４および第２コントローラ１６と無線通信を行う。本体装置１０ａと各コントローラ（１４，１６）との通信方式は任意の方式を採用することができるが、この実施例では、Ｂｌｕｅｔｏｏｔｈ（登録商標）の規格に従う通信方式が採用される。
【００５０】
左側端子２８は、第１コントローラ１４が本体装置１０ａに装着されている場合に、ＣＰＵ２０と第１コントローラ１４で有線通信を行うための端子であり、ＣＰＵ２０は、左側端子２８を介して第１コントローラ１４との間でデータを送受信する。
【００５１】
右側端子３０は、第２コントローラ１６が本体装置１０ａに装着されている場合に、ＣＰＵ２０と第２コントローラ１６で有線通信を行うための端子であり、ＣＰＵ２０は、右側端子３０を介して第２コントローラ１６との間でデータを送受信する。
【００５２】
この実施例において、ＣＰＵ２０から各コントローラ（１４，１６）に送信されるのは、各コントローラ（１４，１６）を振動させるための振動データである。振動データは、ＣＰＵ２０が、振動データを生成するプログラムを実行したり、保存された振動データを読み出したりして生成される。振動データは、振動波形（アナログ信号の波形）を示すデータであり、振動波形そのものの信号（振動信号）でも良いし、振動波形をデジタル化したものでも良いし、周波数を示す値と振幅を示す値の組でも良い。一方、各コントローラ（１４，１６）から送信されるのは、当該各コントローラ（１４，１６）に設けられた各操作ボタン（１４ａ，１６ａ）およびアナログスティック（１４ｂ，１６ｂ）を操作した場合の操作データである。ただし、ＣＰＵ２０と各コントローラ（１４，１６）の間で、各種制御信号等の他のデータを送受信するようにしても良い。
【００５３】
このように、本体装置１０ａは、第１コントローラ１４および第２コントローラ１６との間で、有線通信および無線通信を行うことができる。
【００５４】
なお、図示は省略するが、左側端子２８は、充電台５０からの電源を供給するための電源ラインを第１コントローラ１４に内蔵されるバッテリの充電回路に接続する。このことは、右側端子３０についても同様である。
【００５５】
表示ドライバ３２は、ＧＰＵおよびＶＲＡＭを含み、ＣＰＵ２０の指示の下、表示装置１２に表示するゲーム画面（ゲーム画像）についての画像データをＶＲＡＭ上に生成し、表示装置１２に出力する。Ｄ／Ａ変換器３４は、ＣＰＵ２０から出力される音声データをアナログの音声信号に変換してスピーカ３８に出力する。
【００５６】
なお、上述したように、テレビジョン受像機６０のモニタにゲーム画面を表示するとともに、テレビジョン受像機６０のスピーカから音声を出力する場合には、ＣＰＵ２０は、ＡＶデータを下側端子３６および充電台５０を介してテレビジョン受像機６０に送信する。
【００５７】
下側端子３６は、充電台５０と接続するための端子であり、充電台５０に内蔵される電力供給回路からの電源ラインをゲーム装置１０（本体装置１０ａ）に内蔵されるバッテリを充電するための充電回路に接続するための端子である。また、下側端子３６は、充電台５０との間で有線通信するための端子でもある。
【００５８】
なお、図３に示すゲーム装置１０の電気的な構成は一例であり、限定されるべきでない。たとえば、入力手段として、タッチパネルをさらに設けてもよい。この場合、タッチパネルは、表示装置１２上に設けられる。または、タッチパネルが表示装置１２と一体的に構成されたタッチディスプレイが設けられてもよい。また、ゲーム装置１０の向き（姿勢）または／および動きを検出するための慣性センサ（加速度センサまたは／およびジャイロセンサ）が設けられてもよい。
【００５９】
図４は、図１ないし図３に示した第１コントローラ１４の電気的な構成を示すブロック図である。図４に示すように、第１コントローラ１４は、コントローラ制御部７０を含み、コントローラ制御部７０には、端子７２、通信モジュール７４、メモリ７６、操作ボタン群７８、アナログスティック８０および振動部８２が接続される。
【００６０】
コントローラ制御部７０は、たとえば、マイクロコンピュータで構成され、第１コントローラ１４を全体制御する。端子７２は、第１コントローラ１４が本体装置１０ａに装着されている場合に、本体装置１０ａの左側端子２８と電気的に接続するために設けられる。通信モジュール７４は、第１コントローラ１４が本体装置１０ａから分離されている場合に、本体装置１０ａと通信可能に接続するために設けられる。上述したように、本体装置１０ａに設けられるコントローラ通信部２６は、Ｂｌｕｅｔｏｏｔｈ（登録商標）の規格に従う無線通信方式を採用するため、通信モジュール７４も、Ｂｌｕｅｔｏｏｔｈ（登録商標）の規格に従う無線通信方式を採用する。
【００６１】
したがって、コントローラ制御部７０は、第１コントローラ１４が本体装置１０ａに装着されている場合には、操作ボタン群７８または／およびアナログスティック８０の操作データを受け付けて、受け付けた操作データを端子７２から出力する。一方、コントローラ制御部７０は、第１コントローラ１４が本体装置１０ａから分離されている場合には、上記のような操作データを受け付けて、受け付けた操作データを通信モジュール７４から上記の無線通信方式に従って本体装置１０ａに送信する。
【００６２】
また、コントローラ制御部７０は、第１コントローラ１４が本体装置１０ａに装着されている場合には、端子７２から入力される振動データを受信（取得）する。一方、コントローラ制御部７０は、第１コントローラ１４が本体装置１０ａから分離されている場合には、上記のような振動データを通信モジュール７４で受信し、取得する。
【００６３】
メモリ７６は、たとえば、フラッシュメモリ等の不揮発性の記憶装置であり、ファームウェアおよび第１コントローラ１４の識別情報（コントローラＩＤ）を記憶する。コントローラ制御部７０は、メモリ７６に記憶されるファームウェアを実行することによって各種の処理を実行する。また、コントローラ制御部７０は、第１コントローラ１４を本体装置１０ａと無線通信可能に接続したとき、コントローラＩＤを本体装置１０ａに通知する。
【００６４】
操作ボタン群７８は、上述した各種の操作ボタン１４ａに相当し、アナログスティック８０は、上述したアナログスティック１４ｂに相当する。操作ボタン群７８およびアナログスティック８０に対して行なわれた操作に関する情報（操作データ）は、所定周期でコントローラ制御部７０に繰り返し出力される。
【００６５】
振動部８２は、モータドライバ８２ａおよび振動モータ８２ｂを含み、モータドライバ８２ａがコントローラ制御部７０によって制御される。コントローラ制御部７０は、本体装置１０ａから送信される振動データに従って振動モータ８２ｂを制御する。すなわち、コントローラ制御部７０は、本体装置１０ａから振動データを受信（取得）すると、取得した振動データをモータドライバ８２ａに出力する。モータドライバ８２ａは、コントローラ制御部７０からの振動データから振動モータ８２ｂを振動させるための駆動信号を生成し、生成した駆動信号を振動モータ８２ｂに与える。このため、振動モータ８２ｂは、本体装置１０ａからの振動データに従って動作する。
【００６６】
たとえば、振動モータ８２ｂは、リニアモータであり、音声信号のようなアナログ信号（振動信号）の入力波形（振動波形）に応じたパターンで出力（振動）する。ただし、この実施例では、振動データは、アナログ信号（振動信号）の各時点の信号値（周波数および振幅）に対応する、周波数の値と振幅に対応する電圧値の組についてのデータである。振動モータ８２ｂとしてのリニアモータは、振動信号の各時点での信号値に応じて、振動データが示す電圧値を、振動データが示す周波数で増減するように印加することで、内部の錘の位置を変えることにより、入力波形に応じたパターンで出力する。
【００６７】
なお、この実施例では、振動モータ８２ｂとして、リニアモータを用いるようにしてあるが、これに限定される必要は無く、たとえば、圧電素子またはボイスコイルを用いることもできる。
【００６８】
また、図４に示す第１コントローラ１４の電気的な構成は一例であり、限定されるべきでない。たとえば、第１コントローラ１４の向き（姿勢）または／および動きを検出するための慣性センサ（加速度センサまたは／およびジャイロセンサ）が設けられてもよい。
【００６９】
図５は、図１ないし図３に示した第２コントローラ１６の電気的な構成を示すブロック図である。図５に示すように、第２コントローラ１６は、コントローラ制御部９０を含み、コントローラ制御部９０には、端子９２、通信モジュール９４、メモリ９６、操作ボタン群９８、アナログスティック１００および振動部１０２が接続される。
【００７０】
図５に示すように、この実施例では、第２コントローラ１６の電気的な構成は、図４に示した第１コントローラ１４の電気的な構成と同じであるため、各コンポーネントについての説明は省略する。
【００７１】
なお、この実施例では、第１コントローラ１４および第２コントローラ１６の電気的な構成を同じにしてあるが、同じである必要はない。
【００７２】
図６はゲーム装置１０の使用態様の一例（第１態様）を示す図解図である。図６に示すように、第１態様のゲーム装置１０では、第１コントローラ１４および第２コントローラ１６は、本体装置１０ａに装着された状態で使用される。この場合、プレイヤは両手でゲーム装置１０を把持し、左手で第１コントローラ１４を操作するとともに、右手で第２コントローラ１６を操作する。つまり、ゲーム装置１０は携帯型のゲーム装置として機能する。
【００７３】
したがって、第１コントローラ１４が操作されると、操作データがコントローラ制御部７０から端子７２および左側端子２８を介してＣＰＵ２０に入力される。同様に、第２コントローラ１６が操作されると、操作データがコントローラ制御部９０から端子９２および右側端子３０を介してＣＰＵ２０に入力される。
【００７４】
また、ＣＰＵ２０からの振動データは、左側端子２８および第１コントローラ１４の端子７２を介してコントローラ制御部７０に入力される。同様に、ＣＰＵ２０からの振動データは、右側端子３０および第２コントローラ１６の端子９２を介してコントローラ制御部９０に入力される。
【００７５】
第１コントローラ１４では、コントローラ制御部７０はモータドライバ８２ａに振動データを入力し、モータドライバ８２ａは振動データに従って振動モータ８２ｂを駆動する。また、第２コントローラ１６では、コントローラ制御部９０はモータドライバ１０２ａに振動データを入力し、モータドライバ１０２ａは振動データに従って振動モータ１０２ｂを駆動する。
【００７６】
第１コントローラ１４に設けられた振動モータ８２ｂが駆動すると、振動モータ８２ｂによって発生される振動がゲーム装置１０を把持する両手に伝達される。また、第２コントローラ１６に設けられた振動モータ１０２ｂが駆動すると、振動モータ１０２ｂによって発生される振動がゲーム装置１０を把持する両手に伝達される。つまり、プレイヤは、振動を両手で知覚する。
【００７７】
なお、振動モータ８２ｂと振動モータ１０２ｂは、同時に駆動されてもよいし、別々に振動されてもよい。また、振動モータ８２ｂと振動モータ１０２ｂには、同じ内容（周波数および電圧値）の振動データが入力されてもよいし、異なる内容の振動データが入力されてもよい。これらのことは後述する第２態様および第３態様についても同じである。
【００７８】
図７はゲーム装置１０の使用態様の他の例（第２態様）を示す図解図である。図７に示すように、第２態様のゲーム装置１０では、第１コントローラ１４および第２コントローラ１６は、本体装置１０ａから分離された状態で使用される。この場合、プレイヤは、左手で第１コントローラ１４を把持し、右手で第２コントローラ１６を把持し、本体装置１０ａは机または台の上に立てた状態で載置される。ただし、本体装置１０ａを立てた状態とは、本体装置１０ａに設けられた表示装置１２の表示面が水平面に対して垂直な状態または垂直から少し傾斜した状態を意味する。たとえば、本体装置１０ａを充電台５０に載置することにより、本体装置１０ａを立てた状態にすることができる。
【００７９】
第２態様において、第１コントローラ１４が操作されると、コントローラ制御部７０からの操作データが通信モジュール７４から送信され、コントローラ通信部２６で受信され、ＣＰＵ２０に入力される。同様に、第２コントローラ１６が操作されると、コントローラ制御部９０からの操作データが通信モジュール９４から送信され、コントローラ通信部２６で受信され、ＣＰＵ２０に入力される。
【００８０】
また、ＣＰＵ２０からの振動データは、コントローラ通信部２６から送信され、第１コントローラ１４の通信モジュール７４で受信され、コントローラ制御部７０に入力される。同様に、ＣＰＵ２０からの振動データは、コントローラ通信部２６から送信され、第２コントローラ１６の通信モジュール９４で受信され、コントローラ制御部９０に入力される。
【００８１】
第１態様で説明したように、第１コントローラ１４の振動モータ８２ｂはコントローラ制御部７０からの振動データに従って駆動され、第２コントローラ１６の振動モータ１０２ｂはコントローラ制御部９０からの振動データに従って駆動される。
【００８２】
第１コントローラ１４に設けられた振動モータ８２ｂが駆動すると、振動モータ８２ｂによって発生される振動が第１コントローラ１４を把持する左手に伝達され、第２コントローラ１６に設けられた振動モータ１０２ｂが駆動すると、振動モータ１０２ｂによって発生される振動が第２コントローラ１６を把持する右手に伝達される。つまり、プレイヤは、振動を左手および右手のそれぞれで知覚する。
【００８３】
なお、第１コントローラ１４および第２コントローラ１６を本体装置１０ａから分離して使用する場合には、無線通信可能に接続する必要がある。この実施例では、Ｂｌｕｅｔｏｏｔｈ（登録商標）の規格に従って無線通信を行うため、ゲーム装置１０（本体装置１０ａ）の電源をオンしたとき、または、ゲームのようなアプリケーションを開始するときに、本体装置１０ａはコントローラ（１４，１６など）と接続する（ペアリング）。
【００８４】
この場合、本体装置１０ａ（親機）はコントローラ（１４，１６などの子機）を検索可能なモード（ペアリングモード）に設定され、一方、コントローラ（１４，１６など）も所定の操作ボタン（１４ａ，１６ａなど）を操作することにより、本体装置１０ａを検索可能なペアリングモードに設定される。本体装置１０ａは、所定の信号を発信しているコントローラ（１４，１６など）を検索し、コントローラ（１４，１６など）を検出すると、接続を実行する。接続が完了すると、本体装置１０ａは、接続されたコントローラ（１４，１６など）の識別情報（コントローラＩＤ）を登録する。後述する第３コントローラ１２０などの別のコントローラが無線通信可能に本体装置１０ａに接続される場合についても同様である。
【００８５】
図８はゲーム装置１０の使用態様のその他の例（第３態様）を示す図解図である。図８に示すように、第３態様のゲーム装置１０では、第２態様の場合と同様に、第１コントローラ１４および第２コントローラ１６は、本体装置１０ａから分離された状態で使用される。ただし、第３態様では、第１コントローラ１４および第２コントローラ１６は、接続部材１８を用いて連結され、第１コントローラ１４および第２コントローラ１６が一体的に設けられた１つのコントローラ（以下、「コントローラ１１０」と呼ぶことがある）として使用される。
【００８６】
詳細な説明は省略するが、接続部材１８は、四角柱の形状または中空の六面体の形状に形成されており、レール部材１０ｂと同じレール部材が第１コントローラ１４を着脱する面（第１の側面）に設けられるとともに、レール部材１０ｃと同じレール部材が第２コントローラ１６を着脱する面（第２の側面）に設けられる。ただし、第１の側面は、第２の側面と反対側の面である。
【００８７】
第３態様では、プレイヤは、コントローラ１１０を両手で把持し、左手で第１コントローラ１４を操作するとともに、右手で第２コントローラ１６を操作する。また、第２態様と同様に、本体装置１０ａは机または台の上に立てた状態で載置される。
【００８８】
したがって、第１コントローラ１４が操作されると、コントローラ制御部７０からの操作データが通信モジュール７４から送信され、コントローラ通信部２６で受信され、ＣＰＵ２０に入力される。同様に、第２コントローラ１６が操作されると、コントローラ制御部９０からの操作データが通信モジュール９４から送信され、コントローラ通信部２６で受信され、ＣＰＵ２０に入力される。
【００８９】
また、ＣＰＵ２０からの振動データは、コントローラ通信部２６から送信され、第１コントローラ１４の通信モジュール７４で受信され、コントローラ制御部７０に入力される。同様に、ＣＰＵ２０からの振動データは、コントローラ通信部２６から送信され、第２コントローラ１６の通信モジュール９４で受信され、コントローラ制御部９０に入力される。
【００９０】
この場合にも、第１態様で説明したように、第１コントローラ１４の振動モータ８２ｂはコントローラ制御部７０からの振動データに従って駆動され、第２コントローラ１６の振動モータ１０２ｂはコントローラ制御部９０からの振動データに従って駆動される。
【００９１】
第１コントローラ１４に設けられた振動モータ８２ｂが駆動すると、振動モータ８２ｂによって発生される振動がコントローラ１１０を把持する両手に伝達される。また、第２コントローラ１６に設けられた振動モータ１０２ｂが駆動すると、振動モータ１０２ｂによって発生される振動がコントローラ１１０を把持する両手に伝達される。つまり、プレイヤは、振動を両手で知覚する。
【００９２】
図９はゲーム装置１０の使用態様のさらに他の例（第４態様）を示す図解図である。図９に示すように、第４態様のゲーム装置１０では、第１コントローラ１４および第２コントローラ１６に代えて、第３コントローラ１２０が使用される。この場合、本体装置１０ａと第３コントローラ１２０によってゲーム装置１０が構成される。
【００９３】
なお、図９に示す例では、第１コントローラ１４および第２コントローラ１６を本体装置１０ａから分離してあるが、第１コントローラ１４および第２コントローラ１６を使用しない場合には、これらは本体装置１０ａに装着された状態であってもよい。
【００９４】
第４態様では、プレイヤは、第３コントローラ１２０を両手で把持して操作する。また、第２態様および第３態様と同様に、本体装置１０ａは机または台の上に立てた状態で載置される。
【００９５】
第３コントローラ１２０は、各種の操作ボタン１２０ａおよび左右２つのアナログスティック（左側アナログスティック１５８および右側アナログスティック１６０）１２０ｂを備える。また、第３コントローラ１２０は、左右２つのグリップ部のそれぞれの内部に振動モータ（振動モータ１６２ｂおよび振動モータ１６４ｂ）１２０ｃが設けられる。このような構成の第３コントローラ１２０は、操作する機能および振動を知覚させる機能については、第３態様のコントローラ１１０と同様であるが、このコントローラ１１０よりも把持し易いコントローラと言える。
【００９６】
図１０は、第３コントローラ１２０の電気的な構成を示すブロック図である。図１０に示すように、第３コントローラ１２０は、コントローラ制御部１５０を含み、コントローラ制御部１５０には、通信モジュール１５２、メモリ１５４、操作ボタン群１５６、左側アナログスティック１５８、右側アナログスティック１６０、左側振動部１６２および右側振動部１６４が接続される。左側振動部１６２は、モータドライバ１６２ａおよび振動モータ１６２ｂを含み、モータドライバ１６２ａがコントローラ制御部１５０に接続される。また、右側振動部１６４は、モータドライバ１６４ａおよび振動モータ１６４ｂを含み、モータドライバ１６４ａがコントローラ制御部１５０に接続される。また、操作ボタン群１５６が各種の操作ボタン１２０ａに相当する。
【００９７】
図１０に示す各コンポーネントは、図４に示した第１コントローラ１４に設けられる各コンポーネントと同様の機能を有するため、重複する説明は省略することにする。
【００９８】
なお、第３コントローラ１２０は、本体装置１０ａに装着しないため、端子７２および端子９２のような端子は設けられていない。ただし、第３コントローラ１２０を、信号ケーブルを用いて本体装置１０ａと接続可能にする場合には、信号ケーブルを接続するための端子が本体装置１０ａおよび第３コントローラ１２０のそれぞれに設けられる。
【００９９】
第４態様では、第３コントローラ１２０が操作されると、コントローラ制御部１５０からの操作データが通信モジュール１５２から送信され、コントローラ通信部２６で受信され、ＣＰＵ２０に入力される。
【０１００】
また、ＣＰＵ２０からの振動データは、コントローラ通信部２６から送信され、第３コントローラ１２０の通信モジュール１５２で受信され、コントローラ制御部１５０に入力される。第３コントローラ１２０では、コントローラ制御部１５０が振動データに従って、左側振動部１６２の振動モータ１６２ｂを駆動し、右側振動部１６４の振動モータ１６４ｂを駆動する。ただし、ＣＰＵ２０から送信される振動データは、振動モータ１６２ｂおよび振動モータ１６４ｂで同じ内容でもよいし、それぞれ異なる内容でもよい。
【０１０１】
第３コントローラ１２０の左側のグリップ部に設けられた振動モータ１６２ｂが駆動すると、振動モータ１６２ｂによって発生される振動が第３コントローラ１２０を把持する両手に伝達される。また、第３コントローラ１２０に設けられた振動モータ１６４ｂが駆動すると、振動モータ１６４ｂによって発生される振動が第３コントローラ１２０を把持する両手に伝達される。つまり、プレイヤは、振動を両手で知覚する。
【０１０２】
この実施例では、第１コントローラ１４および第２コントローラ１６とは別のコントローラとして図９に示すような形状の第３コントローラ１２０を使用するようにしてあるが、別のコントローラの形状は限定される必要はない。たとえば、モデルガンの形状、アニメキャラクタまたはゲームキャラクタを模した形状、楽器を模した形状または筆記用具を模した形状のような他の形状のコントローラが使用されてもよい。このように、筐体の形状が他の形状であるコントローラのみならず、第１コントローラ１４または／および第２コントローラ１６をアタッチメントに装着したコントローラも別のコントローラとして使用することができる。たとえば、乗用車、航空機などのハンドルを模した形状のアタッチメント、モデルガンの形状のアタッチメント、剣を模した形状のアタッチメントなどを用いることができる。
【０１０３】
たとえば、コントローラの形状が異なる場合には、コントローラの重さも異なる場合があると考えられる。また、コントローラの形状が異なる場合には、コントローラの筐体に内蔵される振動モータの配置位置が異なると考えられる。これらのことは、アタッチメントに第１コントローラ１４または／および第２コントローラ１６を装着する場合も同様である。つまり、第１態様で第１コントローラ１４および第２コントローラ１６を本体装置１０ａに装着してゲーム装置１０を振動させる場合と、第２態様で第１コントローラ１４および第２コントローラ１６を個別に振動させる場合と、第３態様で第１コントローラ１４および第２コントローラ１６（コントローラ１１０）を一体的に振動させる場合と、第４態様で第３コントローラ１２０などの別のコントローラを振動させる場合では、振動させる装置全体としての特性が異なる。ただし、この実施例では、装置とは、ゲーム装置１０、第１コントローラ１４、第２コントローラ１６、コントローラ１１０および別のコントローラ（第３コントローラ１２０など）を意味する。また、装置全体の特性とは、装置全体の形状、装置全体の重さおよび装置全体における振動モータの配置位置の少なくとも１つを意味する。装置全体の特性が異なる場合には、プレイヤが知覚する振動も異なると考えられる。
【０１０４】
図１１は第１コントローラ１４、第２コントローラ１６および第３コントローラ１２０に設けられる振動モータ８２ｂ、１０２ｂ、１６２ｂ、１６４ｂ（１４ｃ，１６ｃ，１２０ｃ）に所定の印加電圧Ｅ（ここでは、定格の３Ｖｐｐ）を印加した場合の周波数ｆ（Ｈｚ）に対応する振動加速度ａｖ（ｍ／ｓ２）の変化を示すグラフの一例である。ここで、振動加速度ａｖとは、所定の印加電圧Ｅを印加した場合に、振動する物体の加速度の最大値と最小値の差を示す値である。振動加速度ａｖは、振動モータ８２ｂ、１０２ｂ、１６２ｂ、１６４ｂを組み込んだ製品の重量等によって差が出る値であるが、図１１では、特定の条件における印加電圧Ｅと振動加速度ａｖとの関係を示している。
【０１０５】
なお、周波数ｆが一定の場合、振動加速度ａｖが大きいほど、振幅Ａが大きい振動となる。一方、振動加速度ａｖが一定の場合には、周波数ｆが高いほど、振幅Ａが小さい振動となる。
【０１０６】
図１１に示すように、この実施例で使用される振動モータ８２ｂ、１０２ｂ、１６２ｂ、１６４ｂでは、周波数ｆが約１００Ｈｚから５００Ｈｚの間において、振動加速度ａｖが変化する。したがって、振動モータ８２ｂ、１０２ｂ、１６２ｂ、１６４ｂでは、振動加速度ａｖが変化し、さらに周波数ｆを変化させることによっても、振幅が変化する。また、図１１のグラフからも分かるように、この実施例で使用される振動モータ８２ｂ、１０２ｂ、１６２ｂ、１６４ｂは、１６０Ｈｚ付近（図中（ア）の部分）と３２０Ｈｚ付近（図中（イ）の部分）の２点において共振周波数を有し、振動加速度ａｖが大きくなるような振動モータである。
【０１０７】
なお、この実施例で使用される振動モータ８２ｂ、１０２ｂ、１６２ｂ、１６４ｂでは、振動モータの筐体に対して、錘が斜め方向に振動するため、振動モータの筐体の縦方向と横方向に対応する２つの共振周波数を持つように構成される。
【０１０８】
この実施例では、アプリケーションプログラムからオペレーティングシステムに振動データが入力される。そして、オペレーティングシステムから第１コントローラ１４、第２コントローラ１６および第３コントローラ１２０に振動データが送信される。アプリケーションプログラムおよびオペレーティングシステムは、それぞれ、ＣＰＵ２０によって実行されるため、ＣＰＵ２０は、アプリケーション実行部として機能するとともに、オペレーティングシステム実行部として機能する。また、オペレーティングシステム実行部は、本体機能を制御するため、ＣＰＵ２０は、振動モータ８２ｂ、１０２ｂ、１６２ｂ、１６４ｂの振動を制御する振動制御部としても機能する。
【０１０９】
上述したように、この実施例では、ゲーム装置１０の使用態様に応じて使用されるコントローラが異なる場合があり、また、第１コントローラ１４および第２コントローラ１６に振動データを送信するときの通信方法が異なる場合がある。このため、この実施例では、振動制御を有するアプリケーションの開始時または所定のイベントが発生したときなどのタイミングで、ゲーム装置１０の使用態様を判別するようにしてある。
【０１１０】
ただし、ゲーム装置１０の使用態様を判別する前に、第１コントローラ１４および第２コントローラ１６が本体装置１０ａに装着されているかどうかが判断されるとともに、第１コントローラ１４および第２コントローラ１６が本体装置１０ａから分離されている場合には、本体装置１０ａと第１コントローラ１４、第２コントローラ１６および別のコントローラ（第３コントローラ１２０）との間でペアリング処理が実行される。
【０１１１】
たとえば、ゲームのアプリケーションプログラムが実行される場合には、プレイヤは、ゲーム装置１０の使用態様の設定画面（図示せず）を参照して、第１態様−第４態様のいずれの使用態様でゲームをプレイするのかを選択する。また、第４態様においては、第３コントローラ１２０などの別のコントローラの種類を選択できる場合もある。この選択結果が本体機能を制御するオペレーティングシステムに通知される。ただし、アプリケーションプログラムの種類によっては、予め決定されたゲーム装置１０の使用態様または／および第３コントローラ１２０などの別のコントローラの使用の有無が強制的に選択されることもある。
【０１１２】
なお、後述するように、複数人でゲームをプレイする場合には、プレイヤ毎に使用するコントローラが選択される。このため、複数人でゲームをプレイする場合には、アプリケーションプログラムは、プレイヤ毎に使用するコントローラを識別し、オペレーティングシステムに、振動を提示するプレイヤが使用するコントローラに振動を発生させることを指示するとともに、提示する振動についての振動データを送る（入力）する。
【０１１３】
第１態様でゲーム装置１０が使用される場合には、ＣＰＵ２０は、振動データを有線通信で第１コントローラ１４および第２コントローラ１６に送信する。また、第２態様または第３態様でゲーム装置１０が使用される場合には、ＣＰＵ２０は、振動データを無線通信で第１コントローラ１４および第２コントローラ１６に送信する。第１コントローラ１４では、コントローラ制御部７０からの振動データに従って振動モータ８２ｂが駆動され、第２コントローラ１６では、コントローラ制御部９０からの振動データに従って振動モータ１０２ｂが駆動される。振動データに含まれる振幅Ａを示す電圧値の印加電圧Ｅが振動モータ８２ｂおよび振動モータ１０２ｂに印加される。ただし、振動データで指定する電圧値に対して振幅が一意に決まるわけではなく、実際の振動の振幅は、振動の周波数ｆや装置の筐体の特性によって定まる。
【０１１４】
ここで、図１１に示したように、同じ電圧値（図１１では３Ｖｐｐ）の印加電圧Ｅを印加した場合であっても、電圧を増減させる周波数ｆによって、振動モータ８２ｂ、１０２ｂによって発生する振動加速度ａｖは変化する。特に、共振周波数およびそれを含む近傍の周波数帯では、振動加速度ａｖが大きくなり、第１コントローラ１４および第２コントローラ１６の筐体の振動特性によっては、カタカタ（ガタガタ）という不快な音（ビビリ音）が発生することがある。
【０１１５】
この実施例では、周波数ｆを示す値と振幅Ａを示す電圧値との組み合わせからなる振動データについて、周波数ｆが共振周波数を含む近傍の周波数であった場合に、振幅Ａを示す電圧値の印加電圧Ｅに所定の係数（リミッター係数）を掛けることにより、実際に振動モータ８２ｂ、１０２ｂに入力する印加電圧Ｅを低減させるようにしてある。つまり、共振周波数およびその近傍の周波数においては、印加電圧Ｅの大きさが制限される。このようにするため、この実施例の振動モータ８２ｂ、１０２ｂによって振動を提示する周波数の全帯域（たとえば、８０Ｈｚ〜６００Ｈｚ）において、ほぼ均等な振動加速度ａｖで振動を提示することができる。
【０１１６】
図１２はこの実施例において第１コントローラ１４および第２コントローラ１６に印加する印加電圧Ｅの周波数変化を示すグラフの一例である。図１２では、振動を提示する全周波数帯のうち、２つの共振周波数を含む周波数帯について図示してある。このことは、後述する図１３についても同じである。
【０１１７】
図１２に示すように、周波数ｆが１６０Ｈｚから１７０Ｈｚでは、定格（３Ｖｐｐ）の印加電圧Ｅが印加され、周波数ｆが１７０Ｈｚから１７８Ｈｚまでは線形的に印加電圧Ｅが低減される。周波数ｆが１７８Ｈｚでは、２．０４Ｖｐｐの印加電圧Ｅが印加される。周波数ｆが１７８Ｈｚから１９０Ｈｚまでは、２．０４Ｖｐｐの印加電圧Ｅが印加され、１９０Ｈｚから２００Ｈｚまでは線形的に定格（３Ｖｐｐ）まで印加電圧Ｅが増大される。周波数ｆが２００Ｈｚから３１０Ｈｚまでは、定格（３Ｖｐｐ）の印加電圧Ｅが印加され、３１０Ｈｚから３２２Ｈｚまでは線形的に印加電圧Ｅが低減される。周波数ｆが３２２Ｈｚでは、１．７１Ｖｐｐの印加電圧Ｅが印加される。周波数ｆが３２２Ｈｚから３４４Ｈｚまでは、１．７１Ｖｐｐの印加電圧Ｅが印加され、３４４Ｈｚから３５６Ｈｚまでは線形的に定格（３Ｖｐｐ）まで印加電圧Ｅが増大される。周波数ｆが３５６Ｈｚから３８０Ｈｚまでは、定格（３Ｖｐｐ）の印加電圧Ｅが印加される。
【０１１８】
このように、この実施例においては、比較的広い周波数帯において印加電圧Ｅを低減するようにしてある。上述の通り、この実施例においては、振動モータ８２ｂ、１０２ｂの共振周波数付近において印加電圧Ｅを低減するように制御している。しかし、振動モータ８２ｂ、１０２ｂの共振周波数は、製造誤差等の理由によって個体毎に微妙な差が出ることがある。この実施例のように比較的広い周波数帯において印加電圧Ｅを低減することで、個体毎の差に対応できる。
【０１１９】
なお、図１２に示すグラフでは、図面の都合上、目盛幅を周波数帯の前半（周波数ｆが１６０Ｈｚから２１０Ｈｚ）と後半（周波数ｆが２８０Ｈｚから３８０Ｈｚ）とで変えてある。このことは、図１３に示すグラフについても同じである。
【０１２０】
上述したように、この実施例では、第４態様でゲーム装置１０を使用する場合には、第１コントローラ１４および第２コントローラ１６に代えて、第３コントローラ１２０が使用される。
【０１２１】
また、第４態様でゲーム装置１０が使用され、別のコントローラとして第３コントローラ１２０が使用される場合には、ＣＰＵ２０は、振動データを無線通信で第３コントローラ１２０に送信する。第３コントローラ１２０では、コントローラ制御部１５０からの振動データに従って振動モータ１６２ｂおよび振動モータ１６４ｂが駆動される。第４態様においても、振動データに含まれる振幅Ａを示す電圧値の印加電圧Ｅが振動モータ１６２ｂおよび振動モータ１６４ｂに印加される。
【０１２２】
図１３はこの実施例において第３コントローラ１２０に印加する印加電圧Ｅの周波数変化を示すグラフの一例である。
【０１２３】
図１３に示すように、第４態様において、第３コントローラ１２０を使用する場合には、周波数ｆが１６０Ｈｚから３２２Ｈｚでは、定格（３Ｖｐｐ）の印加電圧Ｅが印加され、周波数ｆが３２２Ｈｚから３４４Ｈｚまでは線形的に低減させる。周波数ｆが３４４Ｈｚでは、１．７１Ｖｐｐの印加電圧Ｅが印加される。周波数ｆが３４４Ｈｚから３５６Ｈｚまでは、印加電圧Ｅは線形的に定格（３Ｖｐｐ）まで増大される。周波数ｆが３５６Ｈｚから３８０Ｈｚまでは、定格（３Ｖｐｐ）の印加電圧Ｅが印加される。
【０１２４】
第４態様において、第３コントローラ１２０を使用する場合には、第１態様−第３態様と比較して、印加電圧Ｅを低減させる周波数の帯域が狭い。また、図１３からも明らかなように、１６０Ｈｚの共振周波数およびその近傍の周波数帯では、印加電圧Ｅは低減されない。また、３２０Ｈｚの共振周波数およびその近傍の周波数帯においても、印加電圧Ｅが低減される帯域が狭くされる。
【０１２５】
このように、第４態様において、第３コントローラ１２０を使用する場合に、第１態様−第３態様とは異なる変化の印加電圧Ｅを印加するのは、第３コントローラ１２０はコントローラ１１０よりも重たいため、第１コントローラ１４および第２コントローラ１６の振動モータ８２ｂおよび振動モータ１０２ｂと同じ印加電圧Ｅを印加すると、伝達される振動が弱くなってしまうからである。つまり、振動させる装置の特性が異なるからである。また、第３コントローラ１２０では、３２０Ｈｚの共振周波数およびその近傍の周波数帯においても、不快な音（ビビリ音）が発生するほど、振動が強くならないため、局所的に電圧値を低減するようにしてある。
【０１２６】
このため、第４態様では、振動を提示する周波数の全帯域において、定格（３Ｖｐｐ）を超えない範囲で、第１態様−第３態様の印加電圧Ｅよりも大きくすることにより、コントローラ１１０および第３コントローラ１２０のいずれを使用した場合にも、プレイヤが同様に振動を知覚するようにしてある。
【０１２７】
なお、プレイヤが知覚する振動を、使用態様毎に必ずしも一致させる必要はない。上述したように、この実施例においても、第１態様−第３態様おいて、第１コントローラ１４および第２コントローラ１６に印加する印加電圧Ｅの変化率を、振動を提示する周波数ｆの全帯域において同じにしてある。すなわち、第１態様−第３態様の間においては、使用態様毎に振動を調整していない。これは、この実施例の第１態様−第３態様のように、使用態様が大きく異なる場合、ユーザが感じる振動に違いがあっても、振動が違う理由をユーザが認識しやすく、違和感を生じにくいためである。一方で、第３態様と第４態様は共に両手でコントローラ（１１０，１２０）を把持する態様であり、使用態様が近いため、振動に違いに基づく違和感が生じやすい。そのため、第３態様と第４態様の間においては、本発明のような調整が適している。
【０１２８】
ただし、上述したように、実際には、第１態様ではコントローラ（１４，１６）と本体装置１０ａが一体となったゲーム装置１０全体が振動し、第２態様では第１コントローラ１４と第２コントローラ１６のそれぞれが振動し、第３態様では接続部材１８によって接続されて一体となったコントローラ１１０が振動しており、同じ振幅Ａ、周波数ｆで振動モータ８２ｂ、１０２ｂを振動させた場合に、第１態様−第３態様の各々においてユーザが感じる振動は違う。したがって、第１態様−第３態様のそれぞれにおいても、各態様において振動するもの（ゲーム装置１０全体、個別のコントローラ（１４，１６）、一体となったコントローラ１１０（１４＋１６））の特性に合わせて、周波数帯毎の印加電圧Ｅの変化率を調整してもよい。
【０１２９】
上記の例では、ゲーム装置１０を構成する第１コントローラ１４および第２コントローラを使用する場合と、第１コントローラ１４および第２コントローラに代えて、これらのコントローラ（１４，１６）とは別の第３コントローラ１２０を使用する場合について説明した。ただし、この実施例のゲーム装置１０では、第１コントローラ１４および第２コントローラ１６を使用するとともに、第３コントローラ１２０も同時に使用することもできる。
【０１３０】
図１４はこの実施例のゲームシステム（振動制御システム）２００の一例を示す図解図である。図１４に示すように、ゲームシステム２００では、ゲーム装置１０および第３コントローラ１２０を含み、ゲーム装置１０を構成する第１コントローラ１４および第２コントローラ１６（コントローラ１１０）とともに、第３コントローラ１２０が使用される。したがって、本体装置１０ａから第１コントローラ１４、第２コントローラ１６および第３コントローラ１２０に同時に振動データが送信されると、コントローラ１１０および第３コントローラ１２０を同時に振動させることができる。
【０１３１】
ゲームシステム２００は、充電台５０およびテレビジョン受像機６０をさらに含み、充電台５０はたとえばＨＤＭＩ（登録商標）ケーブルのようなケーブルを用いてテレビジョン受像機６０に接続されるとともに、この充電台５０と通信可能な状態で当該充電台５０に本体装置１０ａが載置される。したがって、本体装置１０ａからＡＶデータがテレビジョン受像機６０に送信されると、テレビジョン受像機６０のモニタにゲーム画面が表示され、テレビジョン受像機６０のスピーカから音声または／および音楽が出力される。
【０１３２】
また、ゲームシステム２００では、コントローラ１１０を第１プレイヤが使用し、第３コントローラ１２０を第２プレイヤが使用することにより、二人のプレイヤがゲームをプレイする。この場合、ゲーム装置１０第３態様で使用される。ただし、第１プレイヤは、第１コントローラ１４および第２コントローラ１６を個別に使用してもよい。つまり、ゲーム装置１０を第２態様で使用することもできる。
【０１３３】
このようなゲームシステム２００では、本体装置１０ａは、第１コントローラ１４および第２コントローラ１６のみならず、第３コントローラ１２０と通信可能に接続される。この場合、本体装置１０ａは、第１コントローラ１４、第２コントローラ１６および第３コントローラ１２０の識別情報を取得する。
【０１３４】
また、本体装置１０ａは、ゲーム装置１０が第２態様で使用されるのか、第３態様で使用されるのかを知る必要がある。ただし、第１コントローラ１４および第２コントローラ１６に加えて、第３コントローラ１２０が使用される場合には、第３コントローラ１２０は第４態様の場合と同様に振動制御される。つまり、第４態様の場合の係数データが使用される。
【０１３５】
このため、上述したように、ゲームのアプリケーションプログラムが実行される場合に、複数人でゲームをプレイすることが選択されると、各プレイヤは使用するコントローラを選択する。また、第１コントローラ１４および第２コントローラ１６を使用するプレイヤは、さらに、ゲーム装置１０を第２態様または第３態様で使用することを選択する。
【０１３６】
ゲームシステム２００においても、アプリケーションプログラムは、ゲーム装置１０の使用態様の情報を、本体機能の実行を制御するオペレーティングシステムに通知する。
【０１３７】
ただし、本体装置１０ａでは、アプリケーションプログラムが、コントローラ１１０（第１コントローラ１４および第２コントローラ１６）を使用するプレイヤと第３コントローラ１２０を使用するプレイヤを識別する。アプリケーションプログラムは、振動を提示するプレイヤが使用するコントローラを決定して、オペレーティングシステムに、決定したコントローラに振動を発生させることを指示するとともに、提示する振動についての振動データを送る（入力する）。オペレーティングシステムは、アプリケーションプログラムから振動データを受信すると、振動を発生させるコントローラのコントローラＩＤを振動データに付加して送信する。
【０１３８】
なお、本体装置１０ａには、最大で８つのコントローラを接続することができるため、図１４においては、第３コントローラ１２０をさらに接続することができる。
【０１３９】
また、上述したように、第３コントローラ１２０とは、形状または／および重さの異なる他のコントローラが接続されてもよい。
【０１４０】
図１５は図３に示したＲＡＭ２２のメモリマップ３００の一例を示す図解図である。図１５に示すように、ＲＡＭ２２は、プログラム記憶領域３０２およびデータ記憶領域３０４を含む。プログラム記憶領域３０２には、各種プログラムが記憶される。各種プログラムは、ゲーム装置１０に電源が投入された後の適宜のタイミングでフラッシュメモリ２４からその一部または全部が読み出されてＲＡＭ２２に記憶される。
【０１４１】
なお、各種プログラムは、フラッシュメモリ２４に代えて、ゲーム装置１０に着脱可能なメモリまたは光ディスクから取得されても良いし、ゲーム装置１０が他の情報処理装置（コンピュータ）との通信機能を備える場合には、当該他の情報処理装置から、直接的にまたはネットワークを介して取得（ダウンロード）されてもよい。
【０１４２】
図１５に示すように、プログラム記憶領域３０２には、メイン処理プログラム３０２ａ、画像生成プログラム３０２ｂ、画像表示プログラム３０２ｃ、通信プログラム３０２ｄ、操作検出プログラム３０２ｅ、使用態様判別プログラム３０２ｆ、プレイヤ設定プログラム３０２ｇ、振動制御プログラム３０２ｈおよびアプリケーションプログラム３０２ｉなどが記憶される。
【０１４３】
メイン処理プログラム３０２ａは、ゲーム装置１０の動作のメインルーチンを処理するためのプログラム（オペレーティングシステム）である。画像生成プログラム３０２ｂは、ポリゴンデータやテクスチャデータなどのデータを含む画像生成用データ３０４ｂを用いて、表示装置１２に表示する画像に対応する画像データを生成するためのプログラムである。画像表示プログラム３０２ｃは、画像生成プログラム３０２ｂに従って生成した画像データを表示装置１２に出力するためのプログラムである。
【０１４４】
通信プログラム３０２ｄは、第１コントローラ１４、第２コントローラ１６および第３コントローラ１２０などのコントローラとの間でデータの送受信（通信）を行うためのプログラムである。操作検出プログラム３０２ｅは、第１コントローラ１４、第２コントローラ１６および第３コントローラ１２０などのコントローラからの操作データを検出し、操作データバッファ３０４ａに記憶するためのプログラムである。ただし、各コントローラから送信される操作データには、当該コントローラを個別に識別可能な情報が付加される。
【０１４５】
使用態様判別プログラム３０２ｆは、第１コントローラ１４および第２コントローラ１６の使用態様を判別するためのプログラムである。ただし、使用態様判別プログラム３０２ｆは、第３コントローラ１２０を使用するかどうかについても判別する。プレイヤ設定プログラム３０２ｇは、複数のプレイヤがアプリケーションを使用（操作）する場合に、プレイヤ毎に使用するコントローラ（１４，１６，１１０，１２０）の種類を設定するためのプログラムである。
【０１４６】
振動制御プログラム３０２ｈは、アプリケーションプログラム３０２ｉからの要求に応じて、本体装置１０ａに通信可能に接続されたコントローラ（１４，１６，１２０）に設けられる振動モータ８２ｂ、１０２ｂ、１６２ｂ、１６４ｂ（１４ｃ，１６ｃ，１２０ｃ）を駆動制御するためのプログラムである。アプリケーションプログラム３０２ｉは、上述したように、ゲームなどのアプリケーションについてのプログラムである。ただし、この実施例では、アプリケーションプログラム３０２ｉの実行中に、振動を提示することがオペレーティングシステムに要求（指示）されるとともに、振動データがオペレーティングシステムに入力されることがある。また、この明細書においては、アプリケーションプログラム３０２ｉは、本体機能には含まれないプログラムを意味することにする。
【０１４７】
なお、図示等は省略するが、プログラム記憶領域３０２には、メッセージの送受信を行う他の本体機能についてのプログラムも記憶される。また、プログラム記憶領域３０２には、アプリケーションプログラム３０２ｉとは異なる他のアプリケーションプログラムが記憶されることもある。
【０１４８】
データ記憶領域３０４には、操作データバッファ３０４ａ、画像生成用データ３０４ｂ、係数データ３０４ｃ、使用態様データ３０４ｄ、第３コントローラ使用データ３０４ｅおよび振動データ３０４ｆなどが記憶される。
【０１４９】
操作データバッファ３０４ａは、操作検出プログラム３０２ｅによって検出された操作データを時系列に従って記憶する。画像生成用データ３０４ｂは、表示装置１２に表示する画像（画面）に対応する画像データを生成するためのポリゴンデータおよびテクスチャデータなどのデータである。
【０１５０】
係数データ３０４ｃは、周波数帯毎に振動モータ８２ｂ、１０２ｂ、１６２ｂ、１６４ｂの印加電圧Ｅを調整するための係数についてのデータであり、ゲーム装置１０の使用態様に応じて予め設定される。
【０１５１】
図１６は、係数データ３０４ｃの一例を示す図解図である。図１６に示すように、第１コントローラ１４および第２コントローラ１６の使用態様に応じて、周波数ｆａ、ｆｂ、…、ｆｎに対応する係数αｉ、βｉ（ｉ＝１、２、…、ｎ）の組が複数記憶される。この実施例では、周波数ｆａ、ｆｂ、…、ｆｎは、振動を提示する周波数の全帯域（８０Ｈｚから６００Ｈｚ）の間において、所定の帯域幅（たとえば、１０Ｈｚ）毎の代表値である。係数データ３０４ｃでは、第１態様−第３態様に対応して、周波数ｆａ、ｆｂ、…、ｆｎ毎に係数αｉが設定され、第４態様（第３コントローラ１２０を使用）に対応して、周波数ｆａ、ｆｂ、…、ｆｎ毎に係数βｉが設定される。ただし、係数αｉおよび係数βｉは、第１態様−第４態様で、第１コントローラ１４、第２コントローラ１６および第３コントローラ１２０を使用した試験等に基づいて設定される。ただし、係数αｉおよび係数βｉは数式を用いて算出するようにしてもよい。
【０１５２】
なお、上述したように、この実施例では、第１態様−第３態様では、同じ係数データを使用するようにしてあるが、各使用態様では振動させる装置全体の特性が異なるため、第１態様−第３態様においても、異なる係数データを使用するようにしてもよい。
【０１５３】
また、この実施例では、第４態様では第３コントローラ１２０を使用する場合についての係数βｉが設定されるが、第３コントローラ１２０と異なる別のコントローラを使用する場合には、当該別のコントローラに応じた係数が設定される。
【０１５４】
図１５に戻って、使用態様データ３０４ｄは、使用態様判別プログラム３０２ｆに従って判別された第１コントローラ１４および第２コントローラ１６の使用態様についてのデータである。たとえば、使用態様データ３０４ｄは、２ビットのレジスタで構成され、第１態様が判別されるとレジスタに“００”が設定され、第２態様が判別されるとレジスタに“０１”が設定され、第３態様が判別されるとレジスタに“１０”が設定され、第４態様が判別されるとレジスタに“１１”が設定される。
【０１５５】
第３コントローラ使用データ３０４ｅは、第３コントローラ１２０を使用するかどうかを判別するためのデータである。振動データ３０４ｆは、アプリケーションプログラムから入力される振動データであり、使用態様に応じて補正される。振動データ３０４ｆを補正するときに、係数データ３０４ｃが参照される。振動データ３０４ｆが補正されることは、対応する振動信号の波形（振動波形）が周波数帯毎に調整されることに相当する。
【０１５６】
図示は省略するが、データ記憶領域３０４には、ゲーム装置１０の動作を制御するために、必要な他のデータが記憶されたり、必要なカウンタ（タイマ）が設けられたりする。
【０１５７】
図１７および図１８は図３に示したＣＰＵ２０の使用態様判別処理の限定しない一例を示すフロー図である。たとえば、ＣＰＵ２０は、振動を提示する処理を有するアプリケーションが開始されたとき、当該アプリケーションで所定のイベントが発生されたときなどの所定のタイミングに応じて、使用態様判別処理を開始する。
【０１５８】
図１７に示すように、ＣＰＵ２０は、使用態様判別処理を開始すると、ステップＳ１で、第１コントローラ１４および第２コントローラ１６が本体装置１０ａに装着されているかどうかを判断する。たとえば、ＣＰＵ２０は、装着されているかどうかを確認するための信号を左側端子２８および右側端子３０から出力し、これに対して、第１コントローラ１４および第２コントローラ１６から応答があるかどうかを判断する。
【０１５９】
ステップＳ１で“ＹＥＳ”であれば、つまり、第１コントローラ１４および第２コントローラ１６が本体装置１０ａに装着されている場合には、ステップＳ３で、ゲーム装置１０の使用態様を第１態様に設定して、図１８に示すように、使用態様判別処理を終了する。ステップＳ３では、ＣＰＵ２０は、レジスタの値が“００”の使用態様データ３０４ｄをＲＡＭ２２のデータ記憶領域３０４に記憶する。
【０１６０】
一方、ステップＳ１で“ＮＯ”であれば、つまり、第１コントローラ１４および第２コントローラ１６が本体装置１０ａに装着されていない場合には、ステップＳ５で、無線により、コントローラの接続登録処理（ペアリング）を実行する。
【０１６１】
続いて、ステップＳ７では、第１コントローラ１４および第２コントローラ１６との通信接続を完了したかどうかを判断する。ステップＳ７で“ＮＯ”であれば、つまり、第１コントローラ１４および第２コントローラ１６との通信接続を完了していなければ、ステップＳ９で、第３コントローラ１２０との通信接続を完了したかどうかを判断する。
【０１６２】
ステップＳ９で“ＮＯ”であれば、つまり、第３コントローラ１２０との通信接続を完了していなければ、ステップＳ５に戻る。一方、ステップＳ９で“ＹＥＳ”であれば、つまり、第３コントローラ１２０との通信接続を完了すれば、ステップＳ１１で、ステップＳ５で接続処理を開始してから所定時間（たとえば、５〜１０秒）を経過したかどうかを判断する。このことは、後述するステップＳ１９において同じである。
【０１６３】
ステップＳ１１で“ＮＯ”であれば、つまり、所定時間を経過していなければ、ステップＳ５に戻る。ステップＳ１１で“ＹＥＳ”であれば、つまり、所定時間を経過すれば、ステップＳ１３で、第４使用態様で第３コントローラ１２０を使用することを設定して、使用態様判別処理を終了する。具体的には、ステップＳ１３では、ＣＰＵ２０は、レジスタの値が“１１”の使用態様データ３０４ｄおよび第３コントローラ１２０を使用することを示す第３コントローラ使用データ３０４ｅをＲＡＭ２２のデータ記憶領域３０４に記憶する。
【０１６４】
また、ステップＳ７で“ＹＥＳ”であれば、つまり第１コントローラ１４および第２コントローラ１６との通信接続を完了すれば、ステップＳ１５で、第３コントローラ１２０との通信接続を完了したかどうかを判断する。ステップＳ１５で“ＹＥＳ”であれば、ステップＳ１７で、第１コントローラ１４および第２コントローラ１６に加えて第３コントローラ１２０を使用することを設定して、図１８に示すステップＳ２１に進む。具体的には、ステップＳ１７では、ＣＰＵ２０は、第３コントローラ１２０を使用することを示す第３コントローラ使用データ３０４ｅをＲＡＭ２２のデータ記憶領域３０４に記憶する。
【０１６５】
一方、ステップＳ１５で“ＮＯ”であれば、ステップＳ１９で、ステップＳ５で接続処理を開始してから所定時間を経過したかどうかを判断する。ステップＳ１５で“ＮＯ”であれば、ステップＳ１５に戻る。一方、ステップＳ１５で“ＹＥＳ”であれば、ステップＳ２１に進む。
【０１６６】
図１８では、ステップＳ２１で、アプリケーションプログラムからの通知があるかどうかを判断する。たとえば、アプリケーションプログラムから、第１コントローラ１４および第２コントローラ１６を、個別に使用する（ゲーム装置１０を第２態様で使用する）こと、または、一体的に使用する（ゲーム装置１０を第３態様で使用する）ことを識別するための情報が通知される。
【０１６７】
ステップＳ２１で“ＮＯ”であれば、つまり、アプリケーションプログラムからの通知が無ければ、同じステップＳ２１に戻る。一方、ステップＳ２１で“ＹＥＳ”であれば、つまり、アプリケーションプログラムからの通知があれば、ステップＳ２３で、第１コントローラ１４および第２コントローラ１６を個別に使用するかどうかを判断する。
【０１６８】
ステップＳ２３で“ＹＥＳ”であれば、つまり、第１コントローラ１４および第２コントローラ１６を個別に使用する場合には、ステップＳ２５で、ゲーム装置１０の使用態様を第２態様に設定して、使用態様判別処理を終了する。ステップＳ２５では、ＣＰＵ２０は、レジスタの値が“０１”の使用態様データ３０４ｄをＲＡＭ２２のデータ記憶領域３０４に記憶する。
【０１６９】
一方、ステップＳ２３で“ＮＯ”であれば、つまり、第１コントローラ１４および第２コントローラ１６を一体的に使用する（コントローラ１１０を使用する）場合には、ステップＳ２７で、ゲーム装置１０の使用態様を第３態様に設定して、使用態様判別処理を終了する。ステップＳ２７では、ＣＰＵ２０は、レジスタの値が“１０”の使用態様データ３０４ｄをＲＡＭ２２のデータ記憶領域３０４に記憶する。
【０１７０】
図１９は図３に示したＣＰＵ２０の振動制御処理の限定しない一例を示すフロー図である。たとえば、ＣＰＵ２０は、アプリケーションプログラムから振動を発生させることを要求（指示）されると、振動制御処理を開始する。ただし、複数のコントローラを使用する場合には、各コントローラについて振動制御処理が並行して実行される。また、第１コントローラ１４および第２コントローラ１６に同じ振動データを送信する場合には、個別に振動制御処理を実行せずに、一回の振動制御処理によって補正した振動データを両方のコントローラ（１４，１６）に送信すればよい。
【０１７１】
図１９に示すように、ＣＰＵ２０は、振動制御処理を開始すると、ステップＳ５１で、アプリケーションプログラムから振動データが入力されたかどうかを判断する。ステップＳ５１で“ＮＯ”であれば、つまり、アプリケーションプログラムから振動データが入力されていなければ、ステップＳ５１に戻る。一方、ステップＳ５１で“ＹＥＳ”であれば、つまり、アプリケーションプログラムから振動データが入力されれば、ステップＳ５３で、振動データを一時記憶する。つまり、振動データ３０４ｆがＲＡＭ２２のデータ記憶領域３０４に記憶される。
【０１７２】
次のステップＳ５５では、使用態様に応じて振動データを補正する。ここでは、ＣＰＵ２０は、使用態様データ３０４ｄを参照して使用態様を取得し、係数データ３０４ｃを参照して、取得した使用態様に対応する係数データを用いて、ステップＳ５３で生成した振動データ３０４ｆを補正（更新）する。つまり、振動波形の振幅が調整される。
【０１７３】
続いて、ステップＳ５７では、補正した振動データ３０４ｆを該当するコントローラ（１４，１６，１２０）に送信する。したがって、振動データ３０４ｆを受信したコントローラ（１４，１６，１２０）では、振動データ３０４ｆに基づいて、振動モータ（８２ｂ，１０２ｂ，１６２ｂ，１６４ｂ）が駆動される。このため、振動モータ（８２ｂ，１０２ｂ，１６２ｂ，１６４ｂ）は、振動信号に応じたパターンで出力（振動）する。
【０１７４】
そして、ステップＳ５９では、終了かどうかを判断する。ここでは、ＣＰＵ２０は、振動を提示する処理を有するアプリケーションが終了されたかどうか、または、当該アプリケーションにおいて振動を提示するシーンが終了されたかどうかを判断する。
【０１７５】
ステップＳ５９で“ＮＯ”であれば、つまり、終了でなければ、ステップＳ５１に戻る。一方、ステップＳ５９で“ＹＥＳ”であれば、つまり、終了であれば、振動制御処理を終了する。
【０１７６】
この実施例によれば、使用するコントローラの特性に応じて振動波形をオペレーティングシステム側で調整するので、コントローラが異なる場合であっても、アプリケーションの製作者に装置の特性に応じた振動表現を考えさせること無く、同様の振動を知覚させることができる。
【０１７７】
また、この実施例によれば、アプリケーションの製作者に装置の特性に応じた振動表現を考えさせることが無いため、アプリケーションの開発にかかる労力を軽減することができる。
【０１７８】
さらに、この実施例によれば、共振周波数およびその近傍の周波数帯においては、制御信号の振幅を低減させるので、振動を提示する全周波数帯において同程度の強さの振動を提示することができる。また、コントローラの筐体からビビリ音が発生するのを防止または抑制することができる。
【０１７９】
なお、この実施例では、ゲーム装置１０の使用態様に応じて振動データに含まれる振幅に係数を掛けるようにしたが、これに限定される必要はない。たとえば、振動データに含まれる周波数に係数を掛けるようにしてもよいし、振動データに含まれる振幅と周波数の両方に係数を掛けるようにしてもよい。
【０１８０】
また、この実施例では、第２態様または第３態様でゲーム装置１０を使用する場合には、アプリケーションプログラムからオペレーティングシステムに使用態様を通知するようにしたが、これに限定される必要はない。たとえば、第１コントローラ１４および第２コントローラ１６をそれぞれ接続部材１８に装着したことを電気的に検知する検知手段を設けて、検知手段の検知結果を、第１コントローラ１４および第２コントローラ１６の各々から本体装置１０ａに通知するようにしてもよい。このようにすれば、アプリケーションプログラムからの通知を受けずに、オペレーティングシステムで第１態様−第４態様を判別することができる。
【０１８１】
さらに、この実施例では、第２態様でゲーム装置１０を使用する場合には、第１コントローラ１４を或るプレイヤが使用し、第２コントローラ１６を他のプレイヤが使用することにより、２人のプレイヤがゲームをプレイすることもできる。また、第２態様でゲーム装置１０を使用する場合には、１人のプレイヤが第１コントローラ１４または第２コントローラ１６を使用して、ゲームをプレイすることもできる。
【０１８２】
さらにまた、この実施例では、アプリケーションから入力される振動データは、周波数を示す値および振幅を示す電圧値の組についてのデータであるが、上述したように、振動信号（振動波形）そのものを振動データとすることもできる。かかる場合には、本体装置に内蔵されるＣＰＵ２０は、振動信号から振動データを生成するようにしてもよい。たとえば、振動信号を所定時間幅（たとえば、５ｍｓｅｃ〜数１０ｍｓｅｃ）の区間に区切り、各区間について周波数分解し、たとえば、周波数分解の結果に含まれる周波数ｆと振幅Ａとの組み合わせのうち、主たる成分が抽出され、抽出された成分が各区間における代表の値として決定する。その結果、振動信号に対応して、周波数ｆを示す値と振幅Ａを示す電圧値との組み合わせからなるデータの集合が振動データとして得られる。ただし、周波数ｆと振幅Ａの組み合わせのデータの集合を振動データとしてもよい。
【０１８３】
また、この実施例では、共振周波数およびその近傍の周波数については印加電圧Ｅに係数を掛けることにより、印加電圧Ｅを低減させるようにしてあるが、上記のように、振動信号が入力される場合には、共振周波数の近傍の周波数についてフィルタ（バンドストップフィルタまたは帯域除去フィルタ）を掛けることにより、振動信号において、共振周波数およびその近傍の周波数に対応する振幅のレベルを低減させることにより、印加電圧Ｅを低減させるようにしてもよい。
【０１８４】
さらに、この実施例では、本体装置で係数を掛けて振動データを補正するようにしてあるが、コントローラ側で係数を掛けて振動データを補正するようにしてもよい。
【０１８５】
さらにまた、この実施例で示した具体的な装置の外観および数値は一例であり、実際の製品に応じて適宜変更可能である。たとえば、図１７−図１９に示すフロー図は、単なる一例に過ぎず、同様の結果が得られるのであれば、各ステップの処理順序を入れ替えてもよい。
【符号の説明】
【０１８６】
１０  …ゲーム装置
１０ａ  …本体装置
１２  …表示装置
１４，１６，１１０，１２０  …コントローラ
１４ａ，１６ａ，１２０ａ  …操作ボタン
２０  …ＣＰＵ
２２  …ＲＡＭ
２４  …フラッシュメモリ
２６  …コントローラ通信部
２８，３０，７２，９２  …端子
７０，９０，１５０  …コントローラ制御部
７４，９４，１５２  …通信モジュール
７６，９６，１５４  …メモリ
７８，９８，１５６  …操作ボタン群
８０，１００，１５８，１６０（１４ｂ，１６ｂ，１２０ｂ）  …アナログスティック
８２，１０２，１６２，１６４  …振動部
８２ｂ，１０２ｂ，１６２ｂ，１６４ｂ（１４ｃ，１６ｃ，１２０ｃ）  …振動モータ
【図１】
2018102610.tif 000003
【図２】
2018102610.tif 000004
【図３】
2018102610.tif 000005
【図４】
2018102610.tif 000006
【図５】
2018102610.tif 000007
【図６】
2018102610.tif 000008
【図７】
2018102610.tif 000009
【図８】
2018102610.tif 000010
【図９】
2018102610.tif 000011
【図１０】
2018102610.tif 000012
【図１１】
2018102610.tif 000013
【図１２】
2018102610.tif 000014
【図１３】
2018102610.tif 000015
【図１４】
2018102610.tif 000016
【図１５】
2018102610.tif 000017
【図１６】
2018102610.tif 000018
【図１７】
2018102610.tif 000019
【図１８】
2018102610.tif 000020
【図１９】
2018102610.tif 000021
【手続補正書】
【提出日】平成30年2月2日(2018.2.2)
【手続補正１】
【補正対象書類名】明細書
【補正対象項目名】０１４５
【補正方法】変更
【補正の内容】
【０１４５】
使用態様判別プログラム３０２ｆは、ゲーム装置１０の使用態様を判別するためのプログラムである。ただし、使用態様判別プログラム３０２ｆは、第３コントローラ１２０を使用するかどうかについても判別する。プレイヤ設定プログラム３０２ｇは、複数のプレイヤがアプリケーションを使用（操作）する場合に、プレイヤ毎に使用するコントローラ（１４，１６，１１０，１２０）の種類を設定するためのプログラムである。つまり、使用態様判別プログラム３０２ｆでは、第１コントローラ１４、第２コントローラ１６およびこれらと異なる別のコントローラ（第３コントローラ１２０）の使用態様（接続態様）が判別される。
【手続補正２】
【補正対象書類名】明細書
【補正対象項目名】０１５１
【補正方法】変更
【補正の内容】
【０１５１】
図１６は、係数データ３０４ｃの一例を示す図解図である。図１６に示すように、ゲーム装置１０の使用態様に応じて、周波数ｆａ、ｆｂ、…、ｆｎに対応する係数αｉ、βｉ（ｉ＝１、２、…、ｎ）の組が複数記憶される。この実施例では、周波数ｆａ、ｆｂ、…、ｆｎは、振動を提示する周波数の全帯域（８０Ｈｚから６００Ｈｚ）の間において、所定の帯域幅（たとえば、１０Ｈｚ）毎の代表値である。係数データ３０４ｃでは、第１態様−第３態様に対応して、周波数ｆａ、ｆｂ、…、ｆｎ毎に係数αｉが設定され、第４態様（第３コントローラ１２０を使用）に対応して、周波数ｆａ、ｆｂ、…、ｆｎ毎に係数βｉが設定される。ただし、係数αｉおよび係数βｉは、第１態様−第４態様で、第１コントローラ１４、第２コントローラ１６および第３コントローラ１２０を使用した試験等に基づいて設定される。ただし、係数αｉおよび係数βｉは数式を用いて算出するようにしてもよい。
【手続補正３】
【補正対象書類名】明細書
【補正対象項目名】０１５４
【補正方法】変更
【補正の内容】
【０１５４】
図１５に戻って、使用態様データ３０４ｄは、使用態様判別プログラム３０２ｆに従って判別されたゲーム装置１０の使用態様についてのデータである。たとえば、使用態様データ３０４ｄは、２ビットのレジスタで構成され、第１態様が判別されるとレジスタに“００”が設定され、第２態様が判別されるとレジスタに“０１”が設定され、第３態様が判別されるとレジスタに“１０”が設定され、第４態様が判別されるとレジスタに“１１”が設定される。
【手続補正４】
【補正対象書類名】明細書
【補正対象項目名】０１５５
【補正方法】変更
【補正の内容】
【０１５５】
第３コントローラ使用データ３０４ｅは、第３コントローラ１２０を使用するかどうかを判別するためのデータである。振動データ３０４ｆは、アプリケーションプログラム３０２ｉから入力される振動データであり、使用態様に応じて補正される。振動データ３０４ｆを補正するときに、係数データ３０４ｃが参照される。振動データ３０４ｆが補正されることは、対応する振動信号の波形（振動波形）が周波数帯毎に調整されることに相当する。
【手続補正５】
【補正対象書類名】明細書
【補正対象項目名】０１６６
【補正方法】変更
【補正の内容】
【０１６６】
図１８では、ステップＳ２１で、アプリケーションプログラム３０２ｉからの通知があるかどうかを判断する。たとえば、アプリケーションプログラム３０２ｉから、第１コントローラ１４および第２コントローラ１６を、個別に使用する（ゲーム装置１０を第２態様で使用する）こと、または、一体的に使用する（ゲーム装置１０を第３態様で使用する）ことを識別するための情報が通知される。
【手続補正６】
【補正対象書類名】明細書
【補正対象項目名】０１６７
【補正方法】変更
【補正の内容】
【０１６７】
ステップＳ２１で“ＮＯ”であれば、つまり、アプリケーションプログラム３０２ｉからの通知が無ければ、同じステップＳ２１に戻る。一方、ステップＳ２１で“ＹＥＳ”であれば、つまり、アプリケーションプログラム３０２ｉからの通知があれば、ステップＳ２３で、第１コントローラ１４および第２コントローラ１６を個別に使用するかどうかを判断する。
【手続補正７】
【補正対象書類名】明細書
【補正対象項目名】０１７０
【補正方法】変更
【補正の内容】
【０１７０】
図１９は図３に示したＣＰＵ２０の振動制御処理の限定しない一例を示すフロー図である。たとえば、ＣＰＵ２０は、アプリケーションプログラム３０２ｉから振動を発生させることを要求（指示）されると、振動制御処理を開始する。ただし、複数のコントローラを使用する場合には、各コントローラについて振動制御処理が並行して実行される。また、第１コントローラ１４および第２コントローラ１６に同じ振動データを送信する場合には、個別に振動制御処理を実行せずに、一回の振動制御処理によって補正した振動データを両方のコントローラ（１４，１６）に送信すればよい。
【手続補正８】
【補正対象書類名】明細書
【補正対象項目名】０１７１
【補正方法】変更
【補正の内容】
【０１７１】
図１９に示すように、ＣＰＵ２０は、振動制御処理を開始すると、ステップＳ５１で、アプリケーションプログラムから振動データが入力されたかどうかを判断する。ステップＳ５１で“ＮＯ”であれば、つまり、アプリケーションプログラム３０２ｉから振動データが入力されていなければ、ステップＳ５１に戻る。一方、ステップＳ５１で“ＹＥＳ”であれば、つまり、アプリケーションプログラム３０２ｉから振動データが入力されれば、ステップＳ５３で、振動データを一時記憶する。つまり、振動データ３０４ｆがＲＡＭ２２のデータ記憶領域３０４に記憶される。