(57)【要約】【課題】複数種類の振動をユーザに対して与える際の自由度を高める方法を提供する。【解決手段】振動制御システムは、第１の周波数および第１の振幅の組み合わせで定義される第１の振動データを発生する第１の振動指令発生手段と、第２の周波数および第２の振幅の組み合わせで定義される第２の振動データを発生する第２の振動指令発生手段と、第１の振動データおよび第２の振動データが入力されると、第３の周波数および第３の振幅の組み合わせで定義される第３の振動データを出力する振動データ合成手段と、第３の振動データに基づいて端末を振動させる振動制御手段とを含む。振動データ合成手段は、第１の振幅と第２の振幅とを加算して第３の振幅を決定する第１の振幅決定手段と、第１の周波数から第２の周波数までの範囲にある周波数を第３の周波数として決定する周波数決定手段とを含む。【選択図】図１９
2018020088.tif 000002
【特許請求の範囲】
【請求項１】
第１の周波数および第１の振幅の組み合わせで定義される第１の振動データを発生する第１の振動指令発生手段と、
第２の周波数および第２の振幅の組み合わせで定義される第２の振動データを発生する第２の振動指令発生手段と、
前記第１の振動データおよび前記第２の振動データが入力されると、第３の周波数および第３の振幅の組み合わせで定義される第３の振動データを出力する振動データ合成手段と、
前記第３の振動データに基づいて端末を振動させる振動制御手段とを備え、
前記振動データ合成手段は、
前記第１の振幅と前記第２の振幅とを加算して前記第３の振幅を決定する第１の振幅決定手段と、
前記第１の周波数から前記第２の周波数までの範囲にある周波数を前記第３の周波数として決定する周波数決定手段とを含む、振動制御システム。
【請求項２】
前記周波数決定手段は、前記第１の振幅と前記第２の振幅との関係に基づいて、前記第１の周波数および前記第２の周波数から前記第３の周波数を決定する、請求項１に記載の振動制御システム。
【請求項３】
前記周波数決定手段は、前記第１の振幅および前記第２の振幅に依存する重み係数を用いた、前記第１の周波数および前記第２の周波数の相加平均を、前記第３の周波数として決定する、請求項２に記載の振動制御システム。
【請求項４】
前記周波数決定手段は、前記第１の振幅および前記第２の振幅に依存する重み係数を用いた、前記第１の周波数および前記第２の周波数の相乗平均を、前記第３の周波数として決定する、請求項２に記載の振動制御システム。
【請求項５】
前記周波数決定手段は、前記第１の振動データおよび前記第２の振動データのうち、振幅が大きい方の振動データの周波数を、前記第３の周波数として決定する、請求項１または２に記載の振動制御システム。
【請求項６】
前記周波数決定手段は、前記第１の周波数と前記第２の周波数との間の中央値を前記第３の周波数として決定する、請求項１に記載の振動制御システム。
【請求項７】
前記周波数決定手段は、前記第１の周波数と前記第２の周波数との相乗平均を前記第３の周波数として決定する、請求項１に記載の振動制御システム。
【請求項８】
前記振動データ合成手段は、
前記第１の振幅と前記第２の振幅とのうちいずれか一方を前記第３の振幅として決定する第２の振幅決定手段と、
選択指示に従って、前記第１の振幅決定手段および前記第２の振幅決定手段のうちいずれか一方を有効化する選択手段とをさらに含む、請求項１〜７のいずれか１項に記載の振動制御システム。
【請求項９】
前記第１および第２の振動指令発生手段は、前記端末を振動させるべき振動波形の単位期間毎の変化に応じて、振動データを更新する、請求項１〜８のいずれか１項に記載の振動制御システム。
【請求項１０】
前記第１の振動指令発生手段は、前記第１の振動データに加えて、第４の周波数および第４の振幅の組み合わせで定義される第４の振動データを発生し、
前記第２の振動指令発生手段は、前記第２の振動データに加えて、第５の周波数および第５の振幅の組み合わせで定義される第５の振動データを発生し、
前記振動データ合成手段は、前記第１の振動データおよび前記第２の振動データに加えて、前記第４の振動データおよび前記第５の振動データが入力されると、前記第３の振動データに加えて、第６の周波数および第６の振幅の組み合わせで定義される第６の振動データを出力する、請求項８または９に記載の振動制御システム。
【請求項１１】
前記振動データ合成手段は、入力される振動データの周波数に応じて、前記第１の振動データから前記第４の振動データのうち２つの振動データから前記第３の振動データを出力するとともに、残りの２つの振動データから前記第６の振動データを出力する、請求項１０に記載の振動制御システム。
【請求項１２】
前記振動データ合成手段は、別の振動データ合成手段から出力される振動データを入力として受け付け可能に構成される、請求項１〜１１のいずれか１項に記載の振動制御システム。
【請求項１３】
ゲームアプリケーションを実行するゲーム進行手段をさらに備え、
前記第１および第２の振動指令発生手段は、前記ゲーム進行手段が発生するイベントに応じて振動データを発生する、請求項１〜１２のいずれか１項に記載の振動制御システム。
【請求項１４】
前記第１の振動指令発生手段は、前記ゲーム進行手段が発生する第１のイベントに応じて、前記第１の振動データを発生し、
前記第２の振動指令発生手段は、前記第１のイベントとは異なる第２のイベントに応じて、前記第２の振動データを発生する、請求項１３に記載の振動制御システム。
【請求項１５】
前記ゲーム進行手段は、ユーザ操作に応じて、前記イベントを発生する、請求項１３または１４に記載の振動制御システム。
【請求項１６】
前記第１の振動データは、弱く継続的な振動を示すものであり、
前記第２の振動データは、強く短い振動を示すものである、請求項１〜１５のいずれか１項に記載の振動制御システム。
【請求項１７】
前記端末は、複数の共振周波数を有する振動子を含み、
前記第１の周波数および前記第２の周波数は、前記振動子の共振周波数に応じて設定される、請求項１〜１６のいずれか１項に記載の振動制御システム。
【請求項１８】
第１の周波数および第１の振幅の組み合わせで定義される第１の振動データを発生するステップと、
第２の周波数および第２の振幅の組み合わせで定義される第２の振動データを発生するステップと、
前記第１の振動データおよび前記第２の振動データが入力されると、第３の周波数および第３の振幅の組み合わせで定義される第３の振動データを出力するステップと、
前記第３の振動データに基づいて端末を振動させるステップとを備え、
前記第３の振動データを出力するステップは、
前記第１の振幅と前記第２の振幅とを加算して前記第３の振幅を決定するステップと、
前記第１の周波数から前記第２の周波数までの範囲にある周波数を前記第３の周波数として決定するステップとを含む、振動制御方法。
【請求項１９】
端末のコンピュータで実行される振動制御プログラムであって、前記コンピュータに
第１の周波数および第１の振幅の組み合わせで定義される第１の振動データを発生するステップと、
第２の周波数および第２の振幅の組み合わせで定義される第２の振動データを発生するステップと、
前記第１の振動データおよび前記第２の振動データが入力されると、第３の周波数および第３の振幅の組み合わせで定義される第３の振動データを出力するステップと、
前記第３の振動データに基づいて端末を振動させるステップとを実行させ、
前記第３の振動データを出力するステップは、
前記第１の振幅と前記第２の振幅とを加算して前記第３の振幅を決定するステップと、
前記第１の周波数から前記第２の周波数までの範囲にある周波数を前記第３の周波数として決定するステップとを含む、振動制御プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本技術は、ユーザに振動を与えることができる振動制御システム、その振動制御システムでの方法、およびその振動制御システムに向けられたプログラムに関する。
【背景技術】
【０００２】
従来から、振動を利用したゲーム処理が提案されている。特開２００６−０６８２１０号公報（特許文献１）は、キャラクタの表示態様の違いに応じて振動を変化させるので、新しい操作感を得ることができる構成を開示する。特開２０１３−２３６９０９号公報（特許文献２）は、グリップ部の内部に、情報処理装置からの制御信号に基づいて振動を発生させる振動部が配置されている構成を開示する。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２００６−０６８２１０号公報
【特許文献２】特開２０１３−２３６９０９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
本技術は、複数種類の振動をユーザに対して与える際の自由度を高める方法を提供するものである。
【課題を解決するための手段】
【０００５】
ある実施の形態に従う振動制御システムは、第１の周波数および第１の振幅の組み合わせで定義される第１の振動データを発生する第１の振動指令発生手段と、第２の周波数および第２の振幅の組み合わせで定義される第２の振動データを発生する第２の振動指令発生手段と、第１の振動データおよび第２の振動データが入力されると、第３の周波数および第３の振幅の組み合わせで定義される第３の振動データを出力する振動データ合成手段と、第３の振動データに基づいて端末を振動させる振動制御手段とを含む。振動データ合成手段は、第１の振幅と第２の振幅とを加算して第３の振幅を決定する第１の振幅決定手段と、第１の周波数から第２の周波数までの範囲にある周波数を第３の周波数として決定する周波数決定手段とを含む。
【０００６】
本実施の形態によれば、２つの振動データが入力された場合に、振幅についてはそれぞれの振動データの振幅を加算することで決定し、周波数についてはそれぞれの振動データの周波数で規定される範囲内の値が採用される。このような手順によって決定される振幅および周波数を用いて端末を振動させることで、入力された２つの振動データが表現しようとする２つの振動による知覚刺激をユーザに対して効果的に与えることができる。
【０００７】
ある実施の形態によれば、周波数決定手段は、第１の振幅と第２の振幅との関係に基づいて、第１の周波数および第２の周波数から第３の周波数を決定してもよい。
【０００８】
本実施の形態によれば、入力されたそれぞれの振動データの振幅についての関係に基づいて、いずれかの振動データの周波数の影響をより強く反映するのかといった調整が可能になり、入力された２つの振動データが表現しようとする２つの振動を効果的に合成できる。
【０００９】
ある実施の形態によれば、周波数決定手段は、第１の振幅および第２の振幅に依存する重み係数を用いた、第１の周波数および第２の周波数の相加平均を、第３の周波数として決定してもよい。
【００１０】
本実施の形態によれば、入力されたそれぞれの振動データの振幅に依存する重み係数を用いることで、いずれかの振動データの周波数の影響をより強く反映するのかといった反映を容易に行なうことができ、入力された２つの振動データが表現しようとする２つの振動を効果的に合成できる。相加平均の算出処理は相対的に演算量が少ないので、処理速度を高めることができる。
【００１１】
ある実施の形態によれば、周波数決定手段は、第１の振幅および第２の振幅に依存する重み係数を用いた、第１の周波数および第２の周波数の相乗平均を、第３の周波数として決定してもよい。
【００１２】
本実施の形態によれば、入力されたそれぞれの振動データの振幅に依存する重み係数を用いることで、いずれかの振動データの周波数の影響をより強く反映するのかといった反映を容易に行なうことができ、入力された２つの振動データが表現しようとする２つの振動を効果的に合成できる。振動によって発生する運動エネルギーなどを考慮すると、周波数をべき乗処理または対数処理することが好ましく、相乗平均の算出処理を採用することで、より物理現象を反映した合成処理を行なうことができる。
【００１３】
ある実施の形態によれば、周波数決定手段は、第１の振動データおよび第２の振動データのうち、振幅が大きい方の振動データの周波数を、第３の周波数として決定してもよい。
【００１４】
本実施の形態によれば、入力された２つの振動データが表現しようとする２つの振動のうちよりユーザに対する影響が大きいと思われる振動を優先的に出力することができる。入力された２つの振動データの一方を選択してそのまま出力することになるので、演算量を低減できる。
【００１５】
ある実施の形態によれば、周波数決定手段は、第１の周波数と第２の周波数との間の中央値を第３の周波数として決定してもよい。
【００１６】
本実施の形態によれば、入力された２つの振動データが表現しようとする２つの振動が有する周波数の中央値が合成振動の周波数として決定されるので、２つの振動データが表現しようとするそれぞれの振動による知覚刺激をユーザに対して効果的に与えることができる。併せて、２つの周波数についての中央値を算出するだけでよいので、演算量を低減できる。
【００１７】
ある実施の形態によれば、周波数決定手段は、第１の周波と第２の周波数との相乗平均を第３の周波数として決定してもよい。
【００１８】
振動によって発生する運動エネルギーなどを考慮すると、周波数をべき乗処理または対数処理することが好ましく、本実施の形態によれば、相乗平均の算出処理を採用することで、より物理現象を反映した合成処理を行なうことができる。
【００１９】
ある実施の形態によれば、振動データ合成手段は、第１の振幅と第２の振幅とのうちいずれか一方を第３の振幅として決定する第２の振幅決定手段と、選択指示に従って、第１の振幅決定手段および第２の振幅決定手段のうちいずれか一方を有効化する選択手段とをさらに含んでいてもよい。
【００２０】
本実施の形態によれば、入力された２つの振動データから合成される振動の振幅として、両方の振動データの影響を反映した値、および、一方の振動データの影響のみを反映した値の両方を選択的に使用できる。このような選択機能を用いることで、アプリケーションなどの開発者は、製作するアプリケーションの場面などに応じた知覚刺激をユーザに対して与えることができる。
【００２１】
ある実施の形態によれば、第１および第２の振動指令発生手段は、端末を振動させるべき振動波形の単位期間毎の変化に応じて、振動データを更新してもよい。
【００２２】
本実施の形態によれば、時間的に振動強度が変化する様々な振動を表現することができる。
【００２３】
ある実施の形態によれば、第１の振動指令発生手段は、第１の振動データに加えて、第４の周波数および第４の振幅の組み合わせで定義される第４の振動データを発生してもよく、第２の振動指令発生手段は、第２の振動データに加えて、第５の周波数および第５の振幅の組み合わせで定義される第５の振動データを発生してもよく、振動データ合成手段は、第１の振動データおよび第２の振動データに加えて、第４の振動データおよび第５の振動データが入力されると、第３の振動データに加えて、第６の周波数および第６の振幅の組み合わせで定義される第６の振動データを出力してもよい。
【００２４】
本実施の形態によれば、目的の振動パターンを複数の振動データを用いて定義できるので、より現実感のある振動による知覚刺激をユーザへ与えることができる。
【００２５】
ある実施の形態によれば、振動データ合成手段は、入力される振動データの周波数に応じて、第１の振動データから第４の振動データのうち２つの振動データから第３の振動データを出力するとともに、残りの２つの振動データから第６の振動データを出力してもよい。
【００２６】
本実施の形態によれば、多数の振動データが入力された場合に、周波数が近接しているもの同士を合成の対象とすることができ、これによって、入力されたそれぞれの振動データが表現しようとする振動を可能な限り正確に合成して、ユーザに知覚刺激として与えることができる。
【００２７】
ある実施の形態によれば、振動データ合成手段は、別の振動データ合成手段から出力される振動データを入力として受け付け可能に構成されてもよい。
【００２８】
本実施の形態によれば、多数の振動データから１つの合成パターンを生成しなければならないようなアプリケーションなどにおいて、開発者の意図に沿った自在な処理環境を提供できる。
【００２９】
ある実施の形態によれば、振動制御システムは、ゲームアプリケーションを実行するゲーム進行手段をさらに含んでもよく、第１および第２の振動指令発生手段は、ゲーム進行手段が発生するイベントに応じて振動データを発生してもよい。
【００３０】
本実施の形態によれば、ゲームアプリケーションにおいてユーザが何らかの操作を行なうなどすることで発生するイベントに関連付けて、当該ユーザに対して振動による知覚刺激を与えることができ、ゲームアプリケーションの臨場感を高めることができる。
【００３１】
ある実施の形態によれば、第１の振動指令発生手段は、ゲーム進行手段が発生する第１のイベントに応じて、第１の振動データを発生してもよく、第２の振動指令発生手段は、第１のイベントとは異なる第２のイベントに応じて、第２の振動データを発生してもよい。
【００３２】
本実施の形態によれば、例えば、ゲーム処理などのアプリケーション処理において、異なるユーザ操作などに応じて、互いに性質の異なる振動を発生させることができる。
【００３３】
ある実施の形態によれば、ゲーム進行手段は、ユーザ操作に応じて、イベントを発生してもよい。
【００３４】
本実施の形態によれば、ゲームアプリケーションにおいてユーザによる何らかの操作に関連付けて、当該ユーザに対して振動による知覚刺激を与えることができるので、ゲームアプリケーションに対する操作感を向上させることができる。
【００３５】
ある実施の形態によれば、第１の振動データは、弱く継続的な振動を示すものであってもよく、第２の振動データは、強く短い振動を示すものであってもよい。
【００３６】
本実施の形態によれば、例えば、第１の振動データを用いてゲームアプリケーションの背景環境に対応する振動を表現するとともに、第２の振動データを用いてキャラクタなどの操作に対応する振動を表現できる。このような異なる種類の振動のいずれについても、ユーザに対して知覚させることができる。
【００３７】
ある実施の形態によれば、端末は、複数の共振周波数を有する振動子を含んでいてもよく、第１の周波数および第２の周波数は、振動子の共振周波数に応じて設定されてもよい。
【００３８】
本実施の形態によれば、振動子が有する共振周波数に対応させることで、振動を効率的に振動子から発生させることができる。
【００３９】
ある実施の形態に従う振動制御方法は、第１の周波数および第１の振幅の組み合わせで定義される第１の振動データを発生するステップと、第２の周波数および第２の振幅の組み合わせで定義される第２の振動データを発生するステップと、第１の振動データおよび第２の振動データが入力されると、第３の周波数および第３の振幅の組み合わせで定義される第３の振動データを出力するステップと、第３の振動データに基づいて端末を振動させるステップとを含む。第３の振動データを出力するステップは、第１の振幅と第２の振幅とを加算して第３の振幅を決定するステップと、第１の周波数から第２の周波数までの範囲にある周波数を第３の周波数として決定するステップとを含む。
【００４０】
ある実施の形態に従えば、上述の振動制御方法を端末のコンピュータで実行される振動制御プログラムが提供される。
【発明の効果】
【００４１】
本技術によれば、複数種類の振動をユーザに対して与える際の自由度を高めることができる。
【図面の簡単な説明】
【００４２】
【図１】本実施の形態に従うゲームシステムの使用形態の一例を示す模式図である。
【図２】本実施の形態のゲームシステムに含まれる処理装置の構成例を示す模式図である。
【図３】本実施の形態のゲームシステムに含まれるコントローラの構成例を示す模式図である。
【図４】本実施の形態に従うゲームシステムにおける振動部を制御するための処理の一例を説明するための図である。
【図５】本実施の形態に従うゲームシステムにおける振動部を制御するための処理の一例を説明するための図である。
【図６】本実施の形態に従うゲームシステムにおいて振動波形を時間領域で指定する方法を説明するための図である。
【図７】本実施の形態に従うゲームシステムにおいて振動波形を周波数領域で指定する方法を説明するための図である。
【図８】本実施の形態に従う選択方式に従う振動パターンの合成方法を説明するための図である。
【図９】本実施の形態に従う選択方式に従う合成方法の実装例を示す模式図である。
【図１０】本実施の形態に従う選択方式に従う合成方法での処理手順の一例を説明するための図である。
【図１１】本実施の形態に従う選択方式に従う合成方法の別の実装例を示す模式図である。
【図１２】本実施の形態に従う加算方式に従う振動パターンの合成方法を説明するための図である。
【図１３】本実施の形態に従う加算方式に従う合成方法の実装例を示す模式図である。
【図１４】本実施の形態に従う加算方式に従う合成方法での処理手順の一例を説明するための図である。
【図１５】本実施の形態に従う加算方式に従う合成方法の別の実装例を示す模式図である。
【図１６】本実施の形態に従うハイブリッド方式に従う合成方法の実装例を示す模式図である。
【図１７】本実施の形態に従う合成モジュールを多段接続した場合の構成例を示す模式図である。
【図１８】本実施の形態に従うゲームシステムにおいて振動データの周波数依存性を補正するための実装例を示す模式図である。
【図１９】本実施の形態に従うゲームシステムに実装される機能的構成の要部を示すブロック図である。
【図２０】本実施の形態に従うゲームシステムにおける駆動信号の生成処理を説明するための模式図である。
【図２１】本実施の形態に従うゲームシステムにおける駆動信号の時間波形の連続性を保つための処理を説明するための模式図である。
【図２２】本実施の形態に従うゲームシステムにおいて生成される駆動信号の時間波形の一例を示す図である。
【図２３】本実施の形態に従うゲームシステムにおける参照テーブルを利用して駆動信号を生成する処理を説明するための図である。
【図２４】本実施の形態に従うゲームシステムにおける変化量緩和処理を説明するための図である。
【図２５】本実施の形態に従うゲームシステムにおいて振動部の制御に係る振動制御プログラムの配布形態の一例を示す模式図である。
【図２６】本実施の形態に従うゲームシステムにおいて実行される処理手順を示すフローチャートである。
【発明を実施するための形態】
【００４３】
本実施の形態について、図面を参照しながら詳細に説明する。なお、図中の同一または相当部分については、同一符号を付してその説明は繰返さない。
【００４４】
本実施の形態に従う振動制御システムの一例として、据置型のゲーム装置および振動するコントローラ端末を含む構成について例示する。但し、本件発明の振動制御システムは据置型のゲームシステムのみに適用されるものではなく、携帯型ゲーム装置やスマートフォンをゲーム装置としてゲームが実行されるような場合にも適用できる。その場合、携帯型ゲーム装置やスマートフォン自体が振動する「端末」となり得る。また、振動を発生する装置を含むシステムであれば、どのような構成に対しても、振動制御システムを適用することができる。
【００４５】
［Ａ．装置構成］
まず、本実施の形態に従うゲームシステムに係る装置構成について説明する。
【００４６】
（ａ１：ゲームシステム全体）
図１は、本実施の形態に従うゲームシステム１の使用形態の一例を示す模式図である。図１を参照して、ゲームシステム１は、処理装置１００と、処理装置１００と無線通信可能なコントローラ２００とを含む。説明の便宜上、１つのコントローラ２００が処理装置１００と無線通信を行なう例を示すが、複数のコントローラ２００が処理装置１００と無線通信を行なうようにしてもよいし、コントローラ２００に加えて、別の種類のコントローラが処理装置１００と通信を行なうようにしてもよい。処理装置１００とコントローラとの間の通信手段については、無線通信を採用してもよいし、有線通信を採用してもよい。さらに、専用のコントローラ２００に代えて、携帯型ゲーム装置またはスマートフォンなどをコントローラとして用いるようにしてもよい。
【００４７】
処理装置１００には、家庭用テレビジョン受像機などの表示装置３００が接続されている。処理装置１００は、ゲームシステム１において各種処理を実行する主体であり、アプリケーションプログラムを実行し、その実行により生成される画像（静止画像および動画像を含み得る）や音声を表示装置３００などへ出力する。また、処理装置１００に予め実装されているメニュー画面なども表示装置３００などへ出力される。処理装置１００で実行されるアプリケーションプログラムは、着脱可能な記憶媒体や、インターネットなどを通じて流通する。本実施の形態では、ＤＶＤ（Digital Versatile Disk）などの光学記録媒体８から取得される。
【００４８】
（ａ２：処理装置）
図２は、本実施の形態のゲームシステム１に含まれる処理装置１００の構成例を示す模式図である。図２を参照して、処理装置１００は、一種のコンピュータであり、システムＬＳＩ（Large Scale Integration）１１０と、フラッシュメモリ１１６と、外部メモリ１１８と、コントローラインターフェイス１２０と、同期ボタン１２２と、ネットワーク無線通信モジュール１３０と、近距離無線通信モジュール１４０と、ディスクドライブ１５０と、映像音声出力ドライバ１６０とを含むコンピュータである。
【００４９】
システムＬＳＩ１１０は、処理装置１００における処理エンジンであり、ＣＰＵ（Central Processing Unit）１０２と、ＧＰＵ（Graphical Processing Unit）１０４と、メインメモリ１０６と、ＶＲＡＭ（Video Random Access Memory）１０８とを含む。ＣＰＵ１０２は、システムプログラムやアプリケーションプログラムなどを実行する。ＧＰＵ１０４は、主として表示に係る処理を実行する。メインメモリ１０６は、ＣＰＵ１０２でのプログラム実行に必要な一時データを保持するワーキングメモリとして機能する。ＶＲＡＭ１０８は、ＧＰＵ１０４での処理によって生成された画像を表示するためのワーキングメモリとして機能する。なお、システムＬＳＩ１１０に含まれるすべてのコンポーネントを単一のＬＳＩに実装する必要はなく、その一部をＬＳＩ外に実装してもよい。
【００５０】
フラッシュメモリ１１６は、システムＬＳＩ１１０からアクセス可能になっており、システムプログラムやアプリケーションプログラムなどを不揮発的に保持する。例えば、フラッシュメモリ１１６は、本実施の形態に従うアプリケーションプログラム１８０を格納する。外部メモリ１１８は、システムＬＳＩ１１０内のメインメモリ１０６と連携してワーキングメモリとして機能する。
【００５１】
コントローラインターフェイス１２０は、図示しないコントローラを有線接続するためのコネクタおよび回路を含む。コントローラインターフェイス１２０は、有線接続されたコントローラとの間で、当該コントローラに対するユーザ操作を示す信号（操作情報）を遣り取りする。
【００５２】
ネットワーク無線通信モジュール１３０は、図示しないアクセスポイントなどと無線通信するための各種回路を含む。処理装置１００は、ネットワーク無線通信モジュール１３０を介して、インターネットなどに接続する。ネットワーク無線通信モジュール１３０が用いる無線通信の方式としては、例えばＩＥＥＥ８０２．１１ｎの規格に準拠した方式の無線ＬＡＮ、ＬＴＥ（Long Term Evolution）やＷｉＭＡＸ（登録商標）などのモバイル通信などが挙げられる。
【００５３】
近距離無線通信モジュール１４０は、コントローラ２００（図１）などと無線通信するための各種回路を含む。処理装置１００は、近距離無線通信モジュール１４０を介して、コントローラ２００からの操作情報を受取る。近距離無線通信モジュール１４０が用いる無線通信の方式としては、例えばＢｌｕｅｔｏｏｔｈ（登録商標）の規格に従う方式、ＩＲＤＡ（Infrared Data Association）の規格に従う赤外線通信などが挙げられる。
【００５４】
これらの通信モジュールは、各通信方式に応じた構成が採用される。２つの通信モジュールの全部または一部を物理的に一体化した構成を採用することもできる。
【００５５】
ディスクドライブ１５０は、光学記録媒体８からデータを読み出して、その読み出したデータをシステムＬＳＩ１１０などへ出力する。映像音声出力ドライバ１６０は、システムＬＳＩ１１０から出力される映像信号および音声信号を表示装置３００へ出力する。
【００５６】
（ａ３：コントローラ）
図３は、本実施の形態のゲームシステム１に含まれるコントローラ２００の構成例を示す模式図である。図３を参照して、コントローラ２００は、コントローラ制御部２０２と、ボタン類２１０と、アナログスティック２１２Ｌ，２１２Ｒと、振動部２２０と、センサ類２３０と、近距離無線通信モジュール２４０とを含む。
【００５７】
コントローラ制御部２０２は、コントローラ２００における処理エンジンであり、例えば、マイコン等によって実装される。コントローラ制御部２０２は、ボタン類２１０および／またはアナログスティック２１２Ｌ，２１２Ｒに対するユーザ操作を示す信号（操作情報）、ならびに、センサ類２３０での検出結果などを収集して、近距離無線通信モジュール２４０を介して処理装置１００へ送信する。また、コントローラ制御部２０２は、処理装置１００からの振動に関する指令（以下、「振動指令」とも称す。）を受けて、振動部２２０を駆動する。
【００５８】
ボタン類２１０は、Ａボタン２１０Ａと、Ｂボタン２１０Ｂと、Ｘボタン２１０Ｘと、Ｙボタン２１０Ｙと、Ｌボタン２１０Ｌと、Ｒボタン２１０Ｒと、十字ボタン２１０Ｃとを含む。各ボタンは、ユーザ操作に応じて押下された信号をコントローラ制御部２０２へ出力する。
【００５９】
アナログスティック２１２Ｌ，２１２Ｒは、スティック部材の傾倒方向および傾倒量に応じた方向および大きさ、および、スティック部材の押下げ有無の操作情報を処理装置１００へ出力する。
【００６０】
振動部２２０は、コントローラ２００を把持するユーザに対して振動による知覚刺激を与える。具体的には、振動部２２０は、増幅器２１２および振動子２１４を含む。増幅器２１２は、コントローラ制御部２０２からの振動指令を増幅し、その増幅した振動指令で振動子２１４を駆動する。本実施の形態においては、複数の共振周波数を有する振動子２１４が採用されてもよい。このような複数の共振周波数を有する振動子２１４を採用することで、共振周波数近傍の周波数で励振することで、ユーザに対してより効率的に振動刺激を与えることができ、また、ユーザに対して多様な振動刺激を与えることができる。
【００６１】
センサ類２３０は、コントローラ２００の動きおよび／または姿勢に関する情報を検出し、その検出結果を処理装置１００へ出力する。本実施の形態においては、具体的には、センサ類２３０は、加速度センサ２３２および角速度センサ２３４を含む。加速度センサ２３２は、１または複数の軸方向（典型的には、互いに直交する３軸方向）に沿った直線加速度の大きさを検出する。角速度センサ２３４は、１または複数の軸回り（典型的には、互いに直交する３軸回り）の角速度を検出する。センサ類は、加速度センサと角速度センサのいずれか一方のみをコントローラに搭載してもよいし、両方をコントローラに搭載してもよい。
【００６２】
近距離無線通信モジュール２４０は、処理装置１００と無線通信するための各種回路を含む。コントローラ制御部２０２は、近距離無線通信モジュール２４０を介して処理装置１００との間でデータを遣り取りする。近距離無線通信モジュール２４０が用いる無線通信の方式としては、処理装置１００の近距離無線通信モジュール１４０が用いる無線通信の方式と適合させてもよい。
【００６３】
［Ｂ．概要］
本実施の形態に従うゲームシステム１は、ゲーム処理の進行に応じた振動による知覚刺激をユーザに対して効果的に与える機能を有している。以下、この振動による知覚刺激を与える機能について説明する。
【００６４】
図４および図５は、本実施の形態に従うゲームシステム１における振動部２２０を制御するための処理の一例を説明するための図である。例えば、ゲーム処理の進行に応じて２種類の振動による知覚刺激をユーザに与えるようなアプリケーションを想定する。このような場合、それぞれの振動を発生させるための振動源１および振動源２が予め用意されているものとする。それぞれの振動源が発生する振動波形を合成して、コントローラ２００の振動部２２０を振動させる。
【００６５】
ここで、振動源の各々は、振動を生じさせるための振動データを出力する機能に相当し、例えば、１または複数の振動データを定義するパラメータを算出するプログラムとして実装してもよい。振動源１は、第１の周波数および第１の振幅の組み合わせで定義される第１の振動データを発生する第１の振動指令発生機能に相当し、振動源２は、第２の周波数および第２の振幅の組み合わせで定義される第２の振動データを発生する第２の振動指令発生手機能に相当する。振動源１および振動源２は、同一のプログラム上で実装されてもよいし、異なるプログラムとして実装されてもよい。
【００６６】
例えば、図４に示すように、ゲーム空間内において、岩のオブジェクトが坂を転がり、途中で障害物にぶつかるようなゲーム処理を想定する。このようなゲーム処理において、岩が坂を転がるというイベントに応じて発生する振動（振動源１が発生する振動データにより表現される）と、障害物にぶつかるというイベントに応じて発生する振動（振動源２が発生する振動データにより表現される）とを合成して、実際にコントローラ２００を振動させる。
【００６７】
このとき、振動源１が発生する振動データに対応する振動は、振動強度が小さいものの、その振動強度が維持されるものを想定する。振動源２が発生する振動データに対応する振動は、振動強度の最大値（ピーク値）が大きく、かつ、振動強度の時間的変化が急峻なものを想定する。図５には、２つの振動を合成する場合の振動強度の時間変化の一例を示す。本明細書において、「振動強度」は、ユーザに対して与える振動による知覚刺激の大きさを意味し、基本的には、振動子の最大変位の大きさに相当する。
【００６８】
本実施の形態に従うゲームシステム１においては、１または複数の振動源を予め用意しておき、イベントに応じてそれぞれの振動源が発生する振動データを合成し、当該合成された振動データを用いてコントローラ２００を振動させる。それぞれの振動データに対応する振動強度を単純に足し合わせて出力した場合、合成後の振動の振動強度が、コントローラ２００で提供可能な振動強度（すなわち、振動子が変位可能な最大値）を越えてしまう場合がある。越えてしまった範囲では振動強度の変化を表現できず、結果的に、想定していた振動刺激をユーザに与えることができない可能性がある。
【００６９】
このような事態を回避するために、予め用意する振動源からの振動データにより表現されるそれぞれの振動を足し合わせても、その足し合わせた結果が大きくなりすぎないように調整する必要がある。一方で、それぞれの振動源は対応するイベントに応じて振動データを出力するので、実際のゲーム処理でどのように振動が足し合わせるかを予め完全に予想することは難しい。
【００７０】
このような課題に対して、本実施の形態に従う合成方法を用いることにより、アプリケーション開発者は、足し合わせた結果として得られる振動をいちいち考慮せずに振動源を設定することができるとともに、ユーザに対して、イベントに応じた適切な振動刺激を与えることができる。
【００７１】
本実施の形態に従うゲームシステム１では、複数の振動源からの振動データを適切に合成し、合成した結果に基づいて、ユーザに対してゲーム進行に応じた適切な振動刺激を与えることができる機能を提供する。
【００７２】
［Ｃ．振動波形の指定方法］
まず、本実施の形態に従うゲームシステム１における振動波形の指定方法について説明する。振動波形の各々は、振動部２２０の振動子２１４（図３参照）の各時間における変位を示す。振動波形を指定する方法としては、典型的に、時間領域での指定および周波数領域での指定が挙げられる。以下、それぞれの指定方法について説明する。
【００７３】
（ｃ１：時間領域での指定）
図６は、本実施の形態に従うゲームシステム１において振動波形を時間領域で指定する方法を説明するための図である。図６を参照して、任意の振動波形が指定されると、その振動波形のサンプリング周期（例えば、数十μｓｅｃ〜数千μｓｅｃ）毎の変位（振動モータまたは振動子の基準位置からの移動量）に対応する値（例えば、電圧値）の時間変化を、例えば、データ集合（Ａ１，Ａ２，Ａ３，…，Ａｎ）として指定することができる。このデータ集合に基づいて、変位を時間的に変化させることで、目的の振動波形の振動を提供できる。このデータ集合は、指定された振動の振動波形を示す振動データに相当する。
【００７４】
（ｃ２：周波数領域での指定）
図７は、本実施の形態に従うゲームシステム１において振動波形を周波数領域で指定する方法を説明するための図である。図７を参照して、任意の振動波形が指定されると、その振動波形を所定時間幅（例えば、５ｍｓｅｃ〜数１０ｍｓｅｃ）の単位期間（すなわち、サンプリング区間）Ｔ１，Ｔ２，Ｔ３，…に区切り、各単位期間の振動波形を周波数分解する。周波数分解の結果に含まれる、周波数および振幅の組み合わせのうち、主たる成分を抽出して各単位期間を代表する値とすることができる。
【００７５】
このような手法を採用することで、目的の振動波形を周波数ｆおよび振幅αの組み合わせで定義される、データ集合｛（ｆ１１，α１１），（ｆ１２，α１２）｝，｛（ｆ２１，α２１），（ｆ２２，α２２）｝，｛（ｆ３１，α３１），（ｆ３２，α３２）｝，…，｛（ｆｎ１，αｎ１），（ｆｎ２，αｎ２）｝として指定することができる。周波数ｆおよび振幅αの組み合わせの各々が１つの振動データを示すことになる。サンプリング周期毎に、データ集合に含まれる周波数および振幅に基づいて振動波形を生成することで、目的の振動を提供できる。図７に示す例では、周波数分解の結果に含まれる２つの主成分を抽出し、これらの２つの主成分により、対応する単位期間毎の振動波形を表現する。複数（図７に示す例では、２つ）の特徴的な周波数についての主成分を採用することで、おおよそ意図した振動を提供できる。
【００７６】
なお、目的の振動を示す振動波形を、周波数および振幅の組み合わせの１つまたは２つを用いて指定する場合を例示したがこれに限らず、周波数および振幅の組み合わせをより多く用いて振動波形を指定するようにしてもよい。また、振動波形を周波数分解することで周波数および振幅を決定するのではなく、周波数および振幅を直接指定して、当該指定した周波数および振幅で定義される１または複数の振動データとして振動波形を定義するようにしてもよい。
【００７７】
本実施の形態に従うゲームシステム１においては、コントローラ２００に配置される振動子２１４が２つの共振周波数を有しているので、この２つの共振周波数に応じて、２つの主成分を用いてもよい。すなわち、各主成分は、振動子２１４の共振周波数に対応させて、低周波成分と高周波成分とにより定義してもよく、この場合には、低周波成分を指定するための周波数および振幅の組と、高周波成分を指定するための周波数および振幅の組とにより規定されてもよい。第１の振動データを定義する低周波成分の周波数および高周波成分の周波数、ならびに、第２の振動データを定義する低周波成分の周波数および高周波成分の周波数は、振動子２１４が有する複数の共振周波数のいずれかに応じて設定されてもよい。
【００７８】
説明の便宜上、以下では、主として、振動を示す振動データを周波数領域で指定する方法を例にして説明する。すなわち、以下の説明においては、端末（以下の例では、コントローラ２００）を振動させるための振動データ（第１の振動データおよび第２の振動データ）を、周波数および振幅の組み合わせで定義した場合の処理を説明する。
【００７９】
振動データは、振動部２２０の振動子２１４を駆動するための駆動信号を規定することになる。以下の説明において、この提供されるべき振動信号を「振動パターン」または「合成パターン」とも称する。「振動パターン」および「合成パターン」は、周波数領域のパラメータで定義されてもよいし、時間領域のパラメータで定義されてもよい。以下では、周波数領域のパラメータ、つまり周波数および振幅の組み合わせの１または複数を用いる場合の処理について説明する。「振動パターン」および「合成パターン」は、振動を生じさせるための「振動データ」により定義される振動の実体を包含し得る用語である。説明の便宜上、複数の「振動パターン」（入力される振動パターン）から生成される「振動パターン」（出力される振動パターン）を「合成パターン」と称して区別することもある。
【００８０】
以下に説明する処理は、振動を示す振動データを時間領域で定義する方法でも同様に適用できることは自明である。
【００８１】
［Ｄ．振動パターンの合成方法］
次に、本実施の形態に従うゲームシステム１における振動パターンの合成方法について説明する。振動パターンを合成する方法として、典型的には、選択方式および加算方式が挙げられる。以下、それぞれの合成方法について説明する。
【００８２】
（ｄ１：選択方式：単一の振動データ）
本実施の形態に従う振動パターンの合成方法の選択方式においては、入力された複数の振動パターンについて、所定期間毎にいずれか１つを選択して出力する。一実施態様として、一方の振動パターンが示す振幅および他方の振動パターンが示す他方の振幅に基づいて、所定期間毎に、２つの振動パターンのうちいずれか一方を選択的に出力する。より具体的には、振動源から発生された第１の振動データ（振動パターン）および第２の振動データ（振動パターン）が入力された場合に、第１の振動データの振幅と第２の振動データの振幅とに基づいて、所定期間毎に、振幅が大きい方の振動データを選択する。
【００８３】
図８は、本実施の形態に従う選択方式に従う振動パターンの合成方法を説明するための図である。図８には、例えば、振動パターン１と振動パターン２とが入力された場合を示す。第１の振動データにより表現される振動パターン１は、いわば、弱く継続的な振動を指定しており、第２の振動データにより表現される振動パターン２は、いわば、強く短い振動を指定している。
【００８４】
合成モジュールは、所定期間毎（例えば、５ｍｓｅｃ〜数１０ｍｓｅｃ）にいずれの振動パターンの振幅が大きいのかを判断し、より振幅の大きな振動パターンを選択して出力する。所定期間毎に出力される信号によって合成パターンが生成される。典型的には、合成モジュールは、各周期の開始タイミングにおいて、入力されている振動パターンを比較して、出力すべき振動パターンを決定する。そして、次の周期の到来まで、当該出力される振動パターンの決定を維持する。この場合、選択されない振動パターンの部分については、破棄されることになる。
【００８５】
ここで、「所定期間」とは、上述したような判断処理を含む各種処理が実行される周期を意味し、その長さおよび開始・終了タイミングは振動データに関連付けて設定されてもよい。入力される振動データが予め定められたサンプリング周期毎に定義されているような場合には、サンプリング周期と同じ期間またはサンプリング周期の整数倍に設定されてもよい。
【００８６】
このような選択方式を採用することで、図８の振動パターン１が指定する、弱く継続的な振動の中に含まれる、強く短い振動をユーザに対して知覚させることができる。
【００８７】
図９は、本実施の形態に従う選択方式に従う合成方法の実装例を示す模式図である。図９には、振動パターン１および２の各々を周波数および振幅の組み合わせの１つで指定する場合の実装例を示す。振動パターン１を示す周波数ｆ１および振幅α１ならびに振動パターン２を示す周波数ｆ２および振幅α２については、所定周期毎に更新されることが想定されている。
【００８８】
合成モジュールは、振動パターン１の周波数ｆ１および振幅α１（第１の振動データ）ならびに振動パターン２の周波数ｆ２および振幅α２（第２の振動データ）が入力されると、合成パターンを示す周波数ｆおよび振幅α（第３の振動データ）を出力する。
【００８９】
より具体的には、合成モジュールは、各所定期間において、入力される振動パターン１の振幅α１と振動パターン２の振幅α２とを比較し、その値がより大きな振動パターンを有効な出力として選択する。すなわち、合成モジュールは、各所定期間において、関数ｍａｘ（α１，α２）の出力結果に従って、いずれか一方の振動パターンを指定する周波数ｆおよび振幅αを出力する。
【００９０】
このとき、振動パターン１の周波数ｆ１および振動パターン２の周波数ｆ２については考慮されず、各振動パターンの振幅のみが比較対象とされる。このように、選択方式においては、振動パターン１の周波数ｆ１および振動パターン２の周波数ｆ２の異同によらず、振幅の大きい方の振動データが選択される。このような構成を採用することで、判断処理をより簡素化できる。
【００９１】
図１０は、本実施の形態に従う選択方式に従う合成方法での処理手順の一例を説明するための図である。図１０（Ａ）〜（Ｄ）には、単位期間Ｔ１〜Ｔ４のそれぞれにおける振動パターン１および振動パターン２の周波数および振幅の組み合わせの例を示す。
【００９２】
図１０（Ａ）に示す単位期間Ｔ１においては、パターン１の振幅α１１がパターン２の振幅α１２より大きいので、パターン１の周波数ｆ１１および振幅α１１の組み合わせが合成パターンとして出力される。それに続く単位期間Ｔ２（図１０（Ｂ））においては、パターン２の振幅α２２がパターン１の振幅α２１より大きいので、パターン２の周波数ｆ２２および振幅α２２の組み合わせが合成パターンとして出力される。それに続く単位期間Ｔ３（図１０（Ｃ））においても、パターン２の振幅α３２がパターン１の振幅α３１より大きいので、パターン２の周波数ｆ３２および振幅α３２の組み合わせが合成パターンとして出力される。それに続く単位期間Ｔ４（図１０（Ｄ））においては、パターン１の振幅α４１がパターン２の振幅α４２より大きいので、パターン１の周波数ｆ４１および振幅α４１の組み合わせが合成パターンとして出力される。
【００９３】
上述したように、振動パターンの周波数および振幅の組み合わせによって示されているため、追加の処理を行なわなくても、振幅の値に基づいて振動強度を比較できる。このような方法を用いて、サンプリング周期に合わせて比較を行なうことで、所定期間中の振幅は一つのパラメータで表されるので、比較を容易にできる。
【００９４】
（ｄ２：選択方式：複数の振動データ）
図１１は、本実施の形態に従う選択方式に従う合成方法の別の実装例を示す模式図である。図１１には、振動パターン３および４の各々を２つの主成分（低周波数帯および高周波数帯）の組み合わせで指定する場合の実装例を示す。すなわち、振動パターン３および４の各々は、低周波数帯の周波数および振幅の組み合わせと、高周波数の周波数および振幅の組み合わせとにより定義される。具体的には、振動パターン３は、低周波数帯の周波数ｆ３Ｌおよび振幅α３Ｌ、ならびに、高周波数帯の周波数ｆ３Ｈおよび振幅α３Ｈで指定される。また、振動パターン４は、低周波数帯の周波数ｆ４Ｌおよび振幅α４Ｌ、ならびに、高周波数帯の周波数ｆ４Ｈおよび振幅α４Ｈで指定される。
【００９５】
このように、振動指令発生機能である１つの振動源は、一つの主成分を示す振動データ（周波数ｆ３Ｌおよび振幅α３Ｌ）と、別の主成分を示す振動データ（周波数ｆ３Ｈおよび振幅α３Ｈ）とを同時に発生する。このとき、一つの主成分の周波数（周波数ｆ３Ｌ）は別の主成分の周波数（周波数ｆ３Ｈ）より低く設定されている。
【００９６】
同様に、振動指令発生機能である別の振動源は、一つの主成分を示す振動データ（周波数ｆ４Ｌおよび振幅α４Ｌ）と、別の主成分を示す振動データ（周波数ｆ４Ｈおよび振幅α４Ｈ）とを同時に発生する。このとき、一つの主成分の周波数（周波数ｆ４Ｌ）は別の主成分の周波数（周波数ｆ４Ｈ）より低く設定されている。
【００９７】
上述したような振動パターンを指定する周波数および振幅については、振動させるべき振動波形の単位期間毎の変化に応じて更新されることが想定されている。すなわち、振動パターン３（周波数ｆ３Ｌ，振幅α３Ｌおよび周波数ｆ３Ｈ，振幅α３Ｈ）および振動パターン４（周波数ｆ４Ｌ，振幅α４Ｌおよび周波数ｆ４Ｈ，振幅α４Ｈ）は、指令値となる振動波形に対して設定される単位期間毎に出力される。なお、直前の単位期間の値から変化がなければ、新たな値を出力しないようにしてもよい。つまり、ある単位期間から次の単位期間に切替わる際に、振動パターンの定義も変化すべき場合に限って、振動パターンを定義する値（パラメータ）を出力するようにしてもよい。
【００９８】
合成モジュールは、振動パターン３の低周波数帯の周波数ｆ３Ｌおよび振幅α３Ｌ（第１の振動データ）ならびに振動パターン４の低周波数帯の周波数ｆ４Ｌおよび振幅α４Ｌ（第２の振動データ）に加えて、振動パターン３の高周波数帯の周波数ｆ３Ｈおよび振幅α３Ｈ（第４の振動データ）ならびに振動パターン４の高周波数帯の周波数ｆ４Ｈおよび振幅α４Ｈ（第５の振動データ）が入力されると、合成パターンの低周波数帯の周波数ｆＬおよび振幅Ｌ（第３の振動データ）に加えて、合成パターンの高周波数帯の周波数ｆＨおよび振幅Ｈ（第６の振動データ）を出力する。
【００９９】
このとき、各振動パターンにおいて振動データが周波数毎に定義されている場合には、互いに対応する周波数の振動データ同士を合成するようにしてもよい。つまり、合成モジュールは、入力される振動データが示す主成分の周波数に応じて、第１〜第４の振動データのうち２つの振動データから第３の振動データを出力するとともに、残りの２つの振動データから第６の振動データを出力するようにしてもよい。
【０１００】
上述したような複数の主成分から振動パターンが構成されている場合には、いずれの振幅を比較対象とするのかに応じて、以下のような２つの方法が考えられる。
【０１０１】
図１１（Ａ）には、高周波数帯および低周波数帯をそれぞれ独立に判断する方法を示す。図１１（Ａ）を参照して、振動パターン３の低周波数帯の振幅α３Ｌと振動パターン４の低周波数帯の振幅α４Ｌとの比較（すなわち、関数ｍａｘ（α３Ｌ，α４Ｌ））、ならびに、振動パターン３の高周波数帯の振幅α３Ｈと振動パターン４の高周波数帯の振幅α２Ｈとの比較（すなわち、関数ｍａｘ（α３Ｈ，α４Ｈ））が行なわれ、それぞれの比較においてより大きな振幅を示す情報（低周波数帯の周波数ｆＬおよび振幅αＬ、ならびに、高周波数帯の周波数ｆＨおよび振幅αＨ）が合成パターンとして出力される。
【０１０２】
このように、一つの振動源が発生した複数の振動データ、および、別の振動源が発生した複数の振動データが入力された場合に、それぞれの振動データの振幅の間で、最も大きい振幅を示す振動データが選択される。
【０１０３】
図１１に示す例においては、２つの主成分（周波数ｆ３Ｌ，振幅α３Ｌおよび周波数ｆ３Ｈ，振幅α３Ｈ）を含む振動パターン３、および、別の２つの主成分（周波数ｆ４Ｌ，振幅α４Ｌおよび周波数ｆ４Ｈ，振幅α４Ｈ）を含む振動パターン４が入力された場合に、振動パターン３の振幅α３Ｌと振動パターン４の振幅α４Ｌとに基づいて、所定期間毎に、振幅が大きい方の振動データが選択される。同様に、振動パターン３の振幅α３Ｈと振動パターン４の振幅α４Ｈとに基づいて、所定期間毎に、振幅が大きい方の振動データが選択される。
【０１０４】
図１１（Ａ）に示す選択方式を採用することで、振動パターン３および４の各々に含まれる周波数のうち、それぞれの周波数帯においてより振幅の大きな振動データが選択されることになり、ユーザに対してより特徴的な振動刺激を与えることができる。
【０１０５】
このとき、振動パターン３の低周波数帯の周波数ｆ３Ｌおよび振動パターン４の低周波数帯の周波数ｆ４Ｌの異同、および、振動パターン３の高周波数帯の周波数ｆ３Ｈおよび振動パターン４の高周波数帯の周波数ｆ４Ｈの異同について考慮せず、各振動パターンの振幅のみを比較対象とするように構成してもよい。
【０１０６】
図１１（Ｂ）には、高周波数帯および低周波数帯をまとめて判断する方法を示す。図１１（Ｂ）を参照して、振動パターン３の低周波数帯の振幅α３Ｌおよび高周波数帯の振幅α３Ｈを合成した振幅と、振動パターン４の低周波数帯の振幅α４Ｌおよび高周波数帯の振幅α４Ｈを合成した振幅との比較（すなわち、関数ｍａｘ（α３Ｌ＋α３Ｈ，α４Ｌ＋α４Ｈ））が行なわれ、当該比較においてより大きな振幅を示す振動パターンが合成パターンとして出力される。すなわち、振動パターン３に含まれる第１の振動データの振幅α３Ｌおよび第２の振動データの振幅α３Ｈから算出される値（α３Ｌ＋α３Ｈ）と、振動パターン４に含まれる第３の振動データの振幅α４Ｌおよび第４の振動データの振幅α４Ｈから算出される値（α４Ｌ＋α４Ｈ）とに基づいて、いずれかの振動パターン全体が選択的に出力される。
【０１０７】
このように、１つの振動源である第１の振動指令発生機能が発生した第１の振動データを含む複数の振動データ、および、別の振動源である第２の振動指令発生機能が発生した第２の振動データを含む複数の振動データが入力された場合に、第１の振動指令発生機能が発生した複数の振動データが示す振幅の合計と第２の振動指令発生機能が発生した複数の振動データが示す振幅の合計とに基づいて、所定期間毎に、振幅の合計が大きい方の複数の振動データが選択される。
【０１０８】
また、図１１（Ｂ）に示す選択方式においては、入力された振動パターンの振幅に対して周波数による重み付けをして評価するようにしてもよい。一般的に、人間は低周波数帯の振動に敏感であるので、例えば、高周波数帯の振幅より大きな重み係数（例えば、ｂ＞１）を低周波数帯の振幅に乗じるようにしてもよい。この場合、関数ｍａｘ（ｂ×α３Ｌ＋α３Ｈ，ｂ×α４Ｌ＋α４Ｈ）を利用して、いずれの振幅が大きいのかが判断されてもよい。
【０１０９】
図１１（Ｂ）に示す選択方式を採用することで、振動パターン３および４のうち、全体として振幅がより大きなものが選択されるので、入力される振動パターン全体の特徴を維持したまま、ユーザに対して振動刺激を与えることができる。
【０１１０】
このとき、振動パターン３の低周波数帯の周波数ｆ３Ｌおよび振動パターン４の低周波数帯の周波数ｆ４Ｌの異同、および、振動パターン３の高周波数帯の周波数ｆ３Ｈおよび振動パターン４の高周波数帯の周波数ｆ４Ｈの異同について考慮せず、各振動パターンの振幅のみを比較対象とするように構成してもよい。
【０１１１】
さらに、振動パターン３および４に含まれる周波数から、各振幅の大きさに基づいて、所定数の周波数を選択するようにしてもよい。すなわち、振動パターン３の低周波数帯の振幅α３Ｌ、振動パターン３の高周波数帯の振幅α３Ｈ、振動パターン４の低周波数帯の振幅α４Ｌ、および、振動パターン４の高周波数帯の振幅α４Ｈ、のうち大きなものから上位二つの周波数を抽出して、合成パターンとして出力するようにしてもよい。
【０１１２】
上述の説明においては、説明の便宜上、２つの振動パターンを合成モジュールに入力した場合の処理を例示したが、同様の処理方法を用いて、３つ以上の振動パターンを入力する場合にも拡張可能であることは自明である。
【０１１３】
（ｄ３：加算方式：単一の振動データ）
図１２は、本実施の形態に従う加算方式に従う振動パターンの合成方法を説明するための図である。図１２には、例えば、振動パターン５と振動パターン６とが入力された場合を示す。振動パターン５および６は、互いに類似した時間的変化の特徴を有している。
【０１１４】
合成モジュールは、所定周期毎に入力された振動パターンの振動強度を加算した上で出力する。すなわち、合成パターンとしては、振動パターン５と振動パターン６とを時間軸上で結合したものとなる。
【０１１５】
このような加算方式を採用することで、例えば、同じような種類の振動が複数重なり合うことが頻繁に生じ得る状況において、互いに重なり合った振動の個数自体をユーザに対して知覚させることができる。
【０１１６】
図１３は、本実施の形態に従う加算方式に従う合成方法の実装例を示す模式図である。図１３には、振動パターン７および８の各々を周波数および振幅の組み合わせの１つで指定する場合の実装例を示す。振動パターン７の周波数ｆ７および振幅α７ならびに振動パターン８の周波数ｆ８および振幅α８については、所定周期毎に更新されることが想定されている。
【０１１７】
図１３を参照して、合成モジュールは、振動パターン７の周波数ｆ７および振幅α７（第１の振動データ）および振動パターン８の周波数ｆ８および振幅α８（第２の振動データ）が入力されると、合成パターンの周波数ｆおよび振幅α（第３の振動データ）を出力する。
【０１１８】
より具体的には、合成モジュールは、振動パターン７の振幅α７と振動パターン８の振幅α８とを加算して、合成パターンの振幅αを決定する。典型的には、振幅α＝振幅α７＋振幅α８として算出される。
【０１１９】
本明細書において、振幅の「加算」とは、複数の成分の純粋な加算だけではなく、何らかのファクタに基づく重み付けなどを経た上で足し合わせるような処理も含み得る。例えば、図１３に示す例では、振幅α＝振幅α７＋係数ａ１×振幅α８として算出してもよいし、振幅α＝係数ａ２×振幅α７＋振幅α８として算出してもよい。すなわち、加算により得られた結果が対象となった振幅の値を反映するものであればよい。そのため、典型的には、「加算後の振幅α＞振幅α７」または「加算後の振幅α＞振幅α８」の関係が成立していればよい。
【０１２０】
また、合成モジュールは、振動パターン７の周波数ｆ７と振動パターン８の周波数ｆ８とに基づいて、合成パターンの周波数ｆを決定する。このとき、合成モジュールは、振動パターン７（第１の振動データ）の周波数ｆ７から振動パターン８（第２の振動データ）の周波数ｆ８までの範囲にあるいずれかの周波数を合成パターン（第３の振動データ）の周波数ｆとして決定する。具体的には、振動パターン７の周波数ｆ７≦合成パターンの周波数ｆ≦振動パターン８の周波数ｆ８（ｆ７＜ｆ８の場合）、または、振動パターン８の周波数ｆ８≦合成パターンの周波数ｆ≦振動パターン７の周波数ｆ７（ｆ７＞ｆ８の場合）の関係が成立する。
【０１２１】
但し、振動パターン７の周波数ｆ７から振動パターン８の周波数ｆ８までの範囲内にある周波数のみに限定されるものではなく、振動パターン７の周波数ｆ７から振動パターン８の周波数ｆ８までの範囲の近傍にある周波数を含み得る。すなわち、合成モジュールは、入力される振動パターン７および振動パターン８の周波数成分を反映した合成パターンを出力するものであればよいので、これらの入力される振動パターンの周波数成分の少なくともいずれかに近傍するような周波数を採用してもよい場合がある。
【０１２２】
図１４は、本実施の形態に従う加算方式に従う合成方法での処理手順の一例を説明するための図である。図１４を参照して、振幅α７および周波数ｆ７を有する振動パターン７および振幅α８および周波数ｆ８を有する振動パターン８が入力されると、合成モジュールは、振幅α７および振幅α８を加算して合成パターンの振幅αを決定するとともに、周波数ｆ７から周波数ｆ８までの範囲にある周波数ｆを決定する。このように決定された振幅αおよび周波数ｆによって、合成パターンを決定する。
【０１２３】
以下、合成パターンの周波数ｆを決定する方法のいくつかの例について説明する。
（１）振幅に依存させて周波数を決定する方式
まず、入力される振動パターンの振幅間の関係に基づいて、入力されるそれぞれの振動パターンの周波数から合成パターンの周波数を決定してもよい。すなわち、合成モジュールは、入力された第１の振動パターンの振幅と入力された第２の振動パターンの振幅との関係に基づいて、第１の振動パターンの周波数および第２の振動パターンの周波数から合成パターンの周波数を決定する。
【０１２４】
例えば、このようなそれぞれの振動パターンの振幅を考慮することで、入力された複数の振動パターンのうち、振幅が相対的に大きな振動パターンの特徴を合成パターンにより強く反映させることができる。当然のことながら、その逆も可能である。
【０１２５】
図１４に示す例においては、振動パターン７の振幅α７と振動パターン８の振幅α８との関係に基づいて、振動パターン７の周波数ｆ７および振動パターン８の周波数ｆ８から合成パターンの周波数ｆを決定するようにしてもよい。
【０１２６】
（１−１）重み付け相加平均
このような振幅に依存させて周波数を決定する方式の一例として重み付け相加平均を用いることができる。すなわち、合成モジュールは、第１の振動パターンの振幅および第２の振動パターンの振幅に依存する重み係数を用いた、第１の振動パターンの周波数および第２の振動パターンの周波数の相加平均を、合成パターンの周波数として決定する。具体的には、合成パターンの周波数ｆは、入力される振動パターン７（振幅α７，周波数ｆ７）および入力される振動パターン８（振幅α８，周波数ｆ８）について、以下のような数式に従って算出できる。
【０１２７】
周波数ｆ＝（ｆ７・α７＋ｆ８・α８）／（α７＋α８）
このような重み付け相加平均を用いることで、算出される合成パターンの周波数には、振幅がより大きな振動データほど、その周波数の影響がより強く反映されることになる。
【０１２８】
（１−２）重み付けした相乗平均
振幅に依存させて周波数を決定する方式の別の一例として重み付け相乗平均を用いることができる。すなわち、合成モジュールは、第１の振動パターンの振幅および第２の振動パターンの振幅に依存する重み係数を用いた、第１の振動パターンの周波数および第２の振動パターンの周波数の相乗平均を、合成パターンの周波数として決定する。具体的には、合成パターンの周波数ｆは、入力される振動パターン７（振幅α７，周波数ｆ７）および入力される振動パターン８（振幅α８，周波数ｆ８）について、以下のような数式に従って算出できる。
【０１２９】
周波数ｆ＝ｆ７＾｛α７／（α７＋α８）｝×ｆ８＾｛α８／（α７＋α８）｝
すなわち、周波数ｆ７および周波数ｆ８をそれぞれ重み付けしたべき乗することで、相乗平均された周波数を決定できる。この重み付けした相乗平均と同様に、周波数の対数を用いても算出することができる。この場合には、以下のような数式に沿って、合成パターンの周波数ｆを算出できる。
【０１３０】
周波数ｆ＝ｅｘｐ＾｛α７／（α７＋α８）×ｌｏｇ（ｆ７）＋α８／（α７＋α８）×ｌｏｇ（ｆ８）｝
（１−３）重み付けした他の方法
上述した重み付け相加平均および重み付け相乗平均に加えて、入力された振動パターンのそれぞれの振幅に基づく重み係数を用いた任意の関数を用いることができる。
【０１３１】
（２）振幅が最も大きい振動パターンの周波数を採用する方式
入力される振動パターンの振幅間の関係に基づいて、入力されるそれぞれの振動パターンの周波数から合成パターンの周波数を決定する別の方式として、振幅が最も大きい振動パターンの周波数を採用するようにしてもよい。すなわち、合成モジュールは、第１の振動パターンおよび第２の振動パターンのうち、振幅が大きい方の振動パターンの周波数を、合成パターンの周波数として決定する。
【０１３２】
具体的には、入力される振動パターン７（振幅α７，周波数ｆ７）および入力される振動パターン８（振幅α８，周波数ｆ８）について、いずれの振動パターンの振幅が大きいのかを判断し、振幅が最も大きな振動パターンの周波数を合成パターンの周波数として決定してもよい。
【０１３３】
（３）入力された振動パターンの周波数の平均値を採用する方式
入力されるそれぞれの振動パターンの周波数の平均値を合成パターンの周波数として決定するようにしてもよい。このような平均値として、典型的には、相加平均を用いることができる。すなわち、第１の振動パターンの周波数と第２の振動パターンの周波数との間の中央値を、合成パターンの周波数として決定してもよい。この場合には、以下のような数式に沿って、合成パターンの周波数ｆを算出できる。
【０１３４】
周波数ｆ＝（ｆ７＋ｆ８）／２
あるいは、相乗平均（幾何平均）を用いることもできる。すなわち、第１の振動パターンの周波数と第２の振動パターンの周波数との相乗平均を、合成パターンの周波数として決定してもよい。この場合には、以下のような数式に沿って、合成パターンの周波数ｆを算出できる。
【０１３５】
周波数ｆ＝√（ｆ７×ｆ８）
あるいは、累乗平均を用いることもできる。この場合には、以下のような数式に沿って、合成パターンの周波数ｆを算出できる（但し、ｎは正の整数）。
【０１３６】
周波数ｆ＝（（ｆ７＾ｎ＋ｆ８＾ｎ）／ｎ）＾（１／ｎ）
上述した各種の平均値を算出する方法に加えて、任意の平均値の算出方法を採用することができる。
【０１３７】
上述したように、入力される振動パターンを周波数領域で指定した場合には、上述したような方法を用いて、合成パターンの周波数を決定できる。なお、平均値の算出方法として、相加平均を利用してもよいし、相乗平均を利用してもよい。周波数の平均値は、相加平均ではなく相乗平均を用いる方が好ましいが、処理負担を軽減する観点からは、相加平均を用いるようにしてもよい。このような方法を採用することで、出力される合成パターンを定義する周波数および振幅の組み合わせが増大することがないので、内部処理を効率化できる。
【０１３８】
（ｄ４：加算方式：複数の振動データ）
図１５は、本実施の形態に従う加算方式に従う合成方法の別の実装例を示す模式図である。図１５には、振動パターン９および１０の各々を２つの主成分（低周波数帯および高周波数帯）の組み合わせで指定する場合の実装例を示す。すなわち、振動パターン９および１０の各々は、低周波数帯の周波数および振幅の組み合わせと、高周波数の周波数および振幅の組み合わせとにより定義される。具体的には、振動パターン９は、低周波数帯の周波数ｆ９Ｌおよび振幅α９Ｌ、ならびに、高周波数帯の周波数ｆ９Ｈおよび振幅α９Ｈで指定される。また、振動パターン１０は、低周波数帯の周波数ｆ１０Ｌおよび振幅α１０Ｌ、ならびに、高周波数帯の周波数ｆ１０Ｈおよび振幅α１０Ｈで指定される。これらの振動パターンを指定する周波数および振幅については、所定周期毎に更新されることが想定されている。
【０１３９】
図１５を参照して、合成モジュールは、振動パターン９および１０の入力を受けて、合成パターン（低周波数帯の周波数ｆＬおよび振幅αＬ、ならびに、高周波数帯の周波数ｆＨおよび振幅αＨ）を出力する。すなわち、合成モジュールは、振動パターン９の低周波数帯の周波数ｆ９Ｌおよび振幅α９Ｌ（第１の振動データ）ならびに振動パターン１０の低周波数帯の周波数ｆ１０Ｌおよび振幅α１０Ｌ（第２の振動データ）に加えて、振動パターン９の高周波数帯の周波数ｆ９Ｈおよび振幅α９Ｈ（第４の振動データ）ならびに振動パターン１０の高周波数帯の周波数ｆ１０Ｈおよび振幅α１０Ｈ（第５の振動データ）が入力されると、合成パターンの低周波数帯の周波数ｆＬおよび振幅Ｌ（第３の振動データ）に加えて、合成パターンの高周波数帯の周波数ｆＨおよび振幅Ｈ（第６の振動データ）を出力する。
【０１４０】
このとき、各振動パターンにおいて振動データが周波数毎に定義されている場合には、互いに対応する周波数の振動データ同士を合成するようにしてもよい。つまり、合成モジュールは、入力される振動データの周波数に応じて、第１〜第４の振動データのうち２つの振動データから第３の振動データを出力するとともに、残りの２つの振動データから第６の振動データを出力するようにしてもよい。
【０１４１】
合成パターンの低周波数帯の振幅αＬおよび高周波数帯の振幅αＨについては、それぞれ、振動パターン９および１０の低周波数帯の振幅および高周波数帯の振幅を加算することで算出してもよい。すなわち、合成モジュールは、振動パターン９が示す低周波数帯の振幅αＬ９と振動パターン１０が示す低周波数帯の振幅αＬ１０（第２の振動データ）とを加算して、合成パターンの低周波数帯の振幅αＬ（第３の振動データ）を決定する。同様に、合成モジュールは、振動パターン９が示す高周波数帯の振幅αＨ９（第４の振動データ）と振動パターン１０の高周波数帯の振幅αＨ１０（第５の振動データ）とを加算して、合成パターンの高周波数帯の振幅αＨ（第６の振動データ）を決定する。
【０１４２】
具体的には、合成パターンの低周波数帯の振幅αＬ＝振幅αＬ９＋α振幅Ｌ１０、合成パターンの高周波数帯の振幅αＨ＝振幅αＨ９＋振幅αＨ１０と算出できる。
【０１４３】
入力される振動パターン９および１０を指定する周波数が合計で４つ存在する一方で、出力される合成パターンの周波数は２つであるので、入力と出力との間で整合を取る必要がある。合成パターンの周波数の算出方式としては、上述したのと同様に、以下のような種類を想定できる。
【０１４４】
（１）振幅に依存させて周波数を決定する方式
入力される振動パターンに含まれる周波数帯毎の振幅間の関係に基づいて、入力される振動パターンに含まれる周波数帯毎のそれぞれ周波数から合成パターンの周波数を決定してもよい。すなわち、合成モジュールは、入力された第１の振動パターンの振幅と入力された第２の振動パターンの振幅との関係に基づいて、第１の振動パターンの周波数および第２の振動パターンの周波数から合成パターンの周波数を決定する。
【０１４５】
例えば、このようなそれぞれの振動パターンの振幅を考慮することで、入力された複数の振動パターンのうち、振幅が相対的に大きな振動パターンの特徴を合成パターンにより強く反映させることができる。当然のことながら、その逆も可能である。
【０１４６】
図１５に示す例においては、振動パターン９の低周波数帯の振幅αＬ９と振動パターン１０の低周波数帯の振幅αＬ１０との関係に基づいて、振動パターン９の低周波数帯の周波数ｆＬ９および振動パターン１０の低周波数帯の周波数ｆＬ１０から合成パターンの低周波数帯の周波数ｆＬを決定するようにしてもよい。同様に、振動パターン９の高周波数帯の振幅αＨ９と振動パターン１０の高周波数帯の振幅αＨ１０との関係に基づいて、振動パターン９の高周波数帯の周波数ｆＨ９および振動パターン１０の高周波数帯の周波数ｆＨ１０から合成パターンの高周波数帯の周波数ｆＨを決定するようにしてもよい。
【０１４７】
（１−１）重み付け相加平均
このような振幅に依存させて周波数を決定する方式の一例として重み付け相加平均を用いることができる。すなわち、合成モジュールは、第１の振動パターンの振幅および第２の振動パターンの振幅に依存する重み係数を用いた、第１の振動パターンの周波数および第２の振動パターンの周波数の相加平均を、合成パターンの周波数として決定する。具体的には、合成パターンの周波数は、入力される振動パターン９（振幅αＬ９，周波数ｆＬ９および振幅αＨ９，周波数ｆＨ９）ならびに入力される振動パターン１０（振幅αＬ１０，周波数ｆＬ１０および振幅αＨ１０，周波数ｆＨ１０）について、以下のような数式に従って算出できる。
【０１４８】
合成パターンの低周波数帯の周波数ｆＬ＝（α９Ｌ・ｆ９Ｌ＋α１０Ｌ・ｆ１０Ｌ）／（α９Ｌ＋α１０Ｌ）
合成パターンの高周波数帯の周波数ｆＨ＝（α９Ｈ・ｆ９Ｈ＋α１０Ｈ・ｆ１０Ｈ）／（α９Ｈ＋α１０Ｈ）
このような重み付け相加平均を用いることで、算出される合成パターンの周波数には、振幅がより大きいものほど、その周波数の影響がより強く反映されることになる。
【０１４９】
（１−２）重み付けした相乗平均
振幅に依存させて周波数を決定する方式の別の一例として重み付け相乗平均を用いることができる。すなわち、合成モジュールは、第１の振動パターンの振幅および第２の振動パターンの振幅に依存する重み係数を用いた、第１の振動パターンの周波数および第２の振動パターンの周波数の相乗平均を、合成パターンの周波数として決定する。具体的には、合成パターンの周波数は、入力される振動パターン９（振幅αＬ９，周波数ｆＬ９および振幅αＨ９，周波数ｆＨ９）ならびに入力される振動パターン１０（振幅αＬ１０，周波数ｆＬ１０および振幅αＨ１０，周波数ｆＨ１０）について、以下のような数式に従って算出できる。
【０１５０】
合成パターンの低周波数帯の周波数ｆＬ＝ｆ９＾｛α９／（α９＋α１０）｝×ｆ１０＾｛α１０／（α９＋α１０）｝
合成パターンの高周波数帯の周波数ｆＨ＝ｆ９＾｛α９／（α９＋α１０）｝×ｆ１０＾｛α１０／（α９＋α１０）｝
すなわち、周波数ｆＬ９および周波数ｆＬ１０ならびに周波数ｆＨ９および周波数ｆＨ１０をそれぞれ重み付けしたべき乗することで、相乗平均された周波数を決定できる。この重み付けした相乗平均と同様に、周波数の対数を用いても算出することができる。この場合には、以下のような数式に沿って、合成パターンの周波数ｆを算出できる。
【０１５１】
合成パターンの低周波数帯の周波数ｆＬ＝ｅｘｐ＾｛αＬ９／（αＬ９＋αＬ１０）×ｌｏｇ（ｆＬ９）＋αＬ１０／（αＬ９＋αＬ１０）×ｌｏｇ（ｆＬ１０）｝
合成パターンの高周波数帯の周波数ｆＨ＝ｅｘｐ＾｛αＨ９／（αＨ９＋αＨ１０）×ｌｏｇ（ｆＨ９）＋αＨ１０／（αＨ９＋αＨ１０）×ｌｏｇ（ｆＨ１０）｝
（１−３）重み付けした他の方法
上述した重み付け相加平均および重み付け相乗平均に加えて、入力された振動パターンのそれぞれの振幅に基づく重み係数を用いた任意の関数を用いることができる。
【０１５２】
（２）振幅が最も大きい振動パターンの周波数を採用する方式
入力される振動パターンの振幅間の関係に基づいて、入力されるそれぞれの振動パターンの周波数から合成パターンの周波数を決定する別の方式として、振幅が最も大きい振動パターンの周波数を採用するようにしてもよい。すなわち、合成モジュールは、第１の振動パターンおよび第２の振動パターンのうち、振幅が大きい方の振動パターンの周波数を、合成パターンの周波数として決定する。
【０１５３】
この方式においては、低周波数帯については、振動パターン９の低周波数帯の振幅α９Ｌと振動パターン１０の低周波数帯の振幅α１０Ｌを比較し、より大きな振幅を有する周波数を採用する。高周波数帯については、振動パターン９の高周波数帯の振幅α９Ｈと振動パターン１０の高周波数帯の振幅α１０Ｈを比較し、より大きな振幅を有する周波数を採用する。
【０１５４】
（３）入力された振動パターンの周波数の平均値を採用する方式
入力されるそれぞれの振動パターンの周波数の平均値を合成パターンの周波数として決定するようにしてもよい。このような平均値として、典型的には、相加平均を用いることができる。すなわち、対応する２つの振動パターンの周波数の間の中央値を、合成パターンの周波数として決定してもよい。この場合には、以下のような数式に沿って、合成パターンの周波数を算出できる。
【０１５５】
合成パターンの低周波数帯の周波数ｆＬ＝（ｆＬ９＋ｆＬ１０）／２
合成パターンの低周波数帯の周波数ｆＨ＝（ｆＨ９＋ｆＬ１０）／２
あるいは、相乗平均（幾何平均）を用いることもできる。すなわち、２つ振動パターンの周波数についての相乗平均を、合成パターンの周波数として決定してもよい。この場合には、以下のような数式に沿って、合成パターンの周波数ｆを算出できる。
【０１５６】
合成パターンの低周波数帯の周波数ｆＬ＝√（ｆＬ９×ｆＬ１０）
合成パターンの高周波数帯の周波数ｆＨ＝√（ｆＨ９×ｆＨ１０）
あるいは、累乗平均を用いることもできる。この場合には、以下のような数式に沿って、合成パターンの周波数ｆを算出できる（但し、ｎは正の整数）。
【０１５７】
合成パターンの低周波数帯の周波数ｆＬ＝（（ｆＬ９＾ｎ＋ｆＬ１０＾ｎ）／ｎ）＾（１／ｎ）
合成パターンの高周波数帯の周波数ｆＨ＝（（ｆＨ９＾ｎ＋ｆＨ１０＾ｎ）／ｎ）＾（１／ｎ）
上述した各種の平均値を算出する方法に加えて、任意の平均値の算出方法を採用することができる。
【０１５８】
上述したように、入力される振動パターンを周波数領域で指定した場合には、上述したような方法を用いて、合成パターンの周波数を決定できる。なお、平均値の算出方法として、相加平均を利用してもよいし、相乗平均を利用してもよい。周波数の平均値は、相加平均ではなく相乗平均を用いる方が好ましいが、処理負担を軽減する観点からは、相加平均を用いるようにしてもよい。このような方法を採用することで、出力される合成パターンを定義する周波数および振幅の組み合わせが増大することがないので、内部処理を効率化できる。
【０１５９】
上述の説明においては、説明の便宜上、２つの振動パターンを合成モジュールに入力した場合の処理を例示したが、同様の処理方法を用いて、３つ以上の振動パターンを入力する場合にも拡張可能であることは自明である。
【０１６０】
（ｄ５：ハイブリッド方式）
上述の選択方式および加算方式を組み合わせたハイブリッド方式を採用してもよい。このハイブリッド方式においては、例えば、出力される合成パターンの振幅については選択方式により決定し、出力される合成パターンの周波数については加算方式によって決定してもよい。
【０１６１】
図１６は、本実施の形態に従うハイブリッド方式に従う合成方法の実装例を示す模式図である。図１６には、振動パターン１１および１２の各々を周波数および振幅の組み合わせの１つで指定する場合の実装例を示す。振動パターン１１の周波数ｆ１１および振幅α１１ならびに振動パターン１２の周波数ｆ１２および振幅α１２については、所定周期毎に更新されることが想定されている。
【０１６２】
図１６を参照して、合成モジュールは、振動パターン１１の周波数ｆ１１および振幅α１１（第１の振動データ）および振動パターン１２の周波数ｆ１２および振幅α１２（第２の振動データ）が入力されると、合成パターンの周波数ｆおよび振幅α（第３の振動データ）を出力する。
【０１６３】
ここで、合成モジュールは、振動パターン１１（振動データ１）の振幅α１１と振動パターン１２（振動データ２）の振幅α１２とのうちいずれか一方を合成パターン（振動データ３）の振幅αとして決定する。より具体的には、合成モジュールは、振動パターン１１の振幅α１１と振動パターン１２の振幅α１２とを比較し、その値がより大きな振幅を有効な出力として選択する。すなわち、合成モジュールは、各所定期間において、関数ｍａｘ（α１１，α１２）の出力結果に従って、いずれか一方の振動パターンに対応する振幅αを出力する。
【０１６４】
一方、合成モジュールは、振動パターン１１の周波数ｆ１１と振動パターン１２の周波数ｆ１２とに基づいて、合成パターンの周波数ｆを決定する。このとき、合成モジュールは、振動パターン１１（第１の振動データ）の周波数ｆ１１から振動パターン１２（第２の振動データ）の周波数ｆ１２までの範囲にあるいずれかの周波数を合成パターン（第３の振動データ）の周波数ｆとして決定する。具体的には、振動パターン１１の周波数ｆ１１≦合成パターンの周波数ｆ≦振動パターン１２の周波数ｆ１２（ｆ１１＜ｆ１２の場合）、または、振動パターン１２の周波数ｆ１２≦合成パターンの周波数ｆ≦振動パターン１１の周波数ｆ１１（ｆ１１＞ｆ１２の場合）の関係が成立する。
【０１６５】
但し、振動パターン１１の周波数ｆ１１から振動パターン１２の周波数ｆ１２までの範囲内にある周波数のみに限定されるものではなく、振動パターン１１の周波数ｆ１１から振動パターン１２の周波数ｆ１２までの範囲の近傍にある周波数を含み得る。すなわち、合成モジュールは、入力される振動パターン１１および振動パターン１２の周波数成分を反映した合成パターンを出力するものであればよいので、これらの入力される振動パターンの周波数成分の少なくともいずれかに近傍するような周波数を採用してもよい場合がある。
【０１６６】
振動パターン１１の周波数ｆ１１から振動パターン１２の周波数ｆ１２までの範囲にあるいずれかの周波数を合成パターンの周波数ｆとして決定する方法は、上述の加算方式における周波数ｆの決定方法と同様であるので、詳細な説明は繰返さない。
【０１６７】
上述したように、ハイブリッド方式においては、合成パターンの振幅は上述の選択方式と同様の方法で決定される一方で、合成パターンの周波数は上述の加算方式と同様の方法で決定されることになる。典型的な実装形態としては、上述したような複数の方式にそれぞれ対応する処理ロジックを予め用意しておき、次に説明するような選択機能を用いて、状況に応じて適宜選択するようにしてもよい。
【０１６８】
（ｄ６：処理の選択）
図９、１３、１５および１６に示す合成モジュールをプログラムモジュール（あるいは、ライブラリ）として実装する場合を考えると、同一のインターフェイスを有するプログラムモジュールとして構成するとともに、任意のオプションスイッチやコマンドなどで、処理を適宜切り替えできるようにしてもよい。
【０１６９】
そこで、合成モジュールをプログラムモジュールとして実装する場合には、図９、１３、１５および１６に示すような、入力される振動パターンを定義するインターフェイスに加えて、上述の選択方式、加算方式およびハイブリッド方式のいずれかを選択するためのインターフェイスが設けられる。その上で、選択方式においては、選択される振動パターンを評価する方法を選択するためのインターフェイスが設けられ、ならびに、加算方式においては、合成パターンの周波数を算出する方法を選択するためのインターフェイスが設けられてもよい。
【０１７０】
例えば、上述した加算方式と選択方式との間を選択する場合には、選択機能は、開発者などの明示的または暗示的な選択指示に従って、入力された振動データの振幅を加算して合成パターンの振幅として決定する処理（加算処理）、および、入力された振動データのうち１つの振動データを選択してその振幅を合成パターンの振幅として決定する処理（選択処理）のうちいずれか一方を有効化する。
【０１７１】
このような選択機能を実装することで、例えば、同一のライブラリを利用しつつ、状況に応じて選択指示を異ならせるだけで、ユーザに対して振動による目的の知覚刺激を与えることができる。
【０１７２】
（ｄ７：多段方式）
図９、１３、１５および１６に示す合成モジュール同士を接続してもよい。図１７は、本実施の形態に従う合成モジュールを多段接続した場合の構成例を示す模式図である。図１７を参照して、例えば、４つの振動パターン１３〜１６を入力して、１つの合成パターンを出力するような処理系を想定する。このような場合、前段に２つの合成モジュールを配置し、一方の合成モジュール（合成モジュール１）に２つの振動パターン１３および１４を入力し、他方の合成モジュール（合成モジュール２）に２つの振動パターン１５および１６を入力する。すなわち、合成モジュールは、別の合成モジュールから出力される振動データを入力として受け付け可能に構成されている。
【０１７３】
合成モジュール１は、振動パターン１３および１４を合成した結果（低周波数帯の周波数ｆＬ’および振幅αＬ’、ならびに、高周波数帯の周波数ｆＨ’および振幅αＨ’）を出力し、合成モジュール２は、振動パターン１５および１６を合成した結果（低周波数帯の周波数ｆＬ”および振幅αＬ”、ならびに、高周波数帯の周波数ｆＨ”および振幅αＨ”）を出力する。これらの合成結果は、さらに別の合成モジュール（合成モジュール３）へ入力される。合成モジュール３は、合成モジュールからのそれぞれの合成結果を合成することで、最終的な合成パターン（低周波数帯の周波数ｆＬおよび振幅αＬ、ならびに、高周波数帯の周波数ｆＨおよび振幅αＨ）を出力する。
【０１７４】
図１７に示す合成モジュールを多段接続した場合の構成例の適用例としては、例えば、合成モジュール１にはゲーム処理において発生させるべき背景環境を表現する１または複数の振動パターンを入力するとともに、合成モジュール２にはゲーム処理において発生させるべきキャラクタのアクションを表現する１または複数の振動パターンを入力する。このとき、合成モジュール１および合成モジュール２を加算方式で実行させることで、背景環境を統合した振動パターンおよびキャラクタのアクションを統合した振動パターンがそれぞれ出力されることになる。合成モジュール３には、合成モジュール１および合成モジュール２からそれぞれ出力される振動パターンを入力するとともに、選択方式で実行させることで、背景環境を表現する振動およびキャラクタのアクションを表現する振動のいずれをもユーザへ与えることができる。
【０１７５】
図１７に示す配置例に限らず、任意の直列数および／または並列数で合成モジュールを結合してもよい。
【０１７６】
（ｄ８：適用例）
上述したように、本実施の形態に従う振動パターンの合成手法を採用することで、任意のアプリケーションにおいて、互いに異なる種類の振動パターンを当該アプリケーションの趣旨に沿って、ユーザに対して振動刺激を与えることができる。
【０１７７】
このようなアプリケーションの例としては、上述の図４に示すような、岩のオブジェクトが坂を転がることを弱く継続的な振動パターンで表現し、当該オブジェクトが途中で障害物にぶつかることを強く短い振動パターンで表現する。このような場合、本実施の形態に従う合成モジュールに対して、それぞれの振動パターンをイベント発生に応じて入力することで、それぞれの振動パターンが表現する意味を失うことなく、その振動刺激をユーザに与えることができる。
【０１７８】
あるいは、ユーザがゲーム空間内でユーザキャラクタを操作して当該ユーザキャラクタがバイクに跨って移動する場合に発せられるエンジン音を弱く継続的な第１の振動パターンで表現し、当該バイクが移動中に何らかの障害物をぶつかったまたは乗り越えたときに状態を強く短い第２の振動パターンで表現する。このような場合にも、上述と同様に、ユーザ操作によってユーザキャラクタが移動している間、第１の振動パターンを発生し、移動中に何らかの障害物をぶつかったまたは乗り越えたタイミングで第２の振動パターンを発生する。これらの振動パターンは、上述したような合成モジュールへ入力される。合成モジュールからの合成出力を利用することで、ユーザキャラクタの移動中に発生する弱く継続的な振動刺激に埋もれることなく、ジャンプによって発生する振動刺激をユーザは知覚することができる。
【０１７９】
（ｄ９：変形例）
選択基準として振幅を採用する例について説明したが、波形の変位（瞬時値）に基づいて選択を行なってもよい。振幅が大きいほど大きい変位を示すので、変位（瞬時値）に基づいて振動パターンを選択することで、間接的に、振幅の大きなものを選択することができる。
【０１８０】
（ｄ１０：感受性補正）
本実施の形態に従うゲームシステム１においては、コントローラ２００を把持するユーザに対して、アプリケーション開発者が意図した振動による知覚刺激を与えることを目的とする。ユーザに対して知覚刺激を与える場合には、振動部２２０の振動子２１４の振動特性の周波数依存性およびユーザの知覚刺激を感じる周波数依存性が存在し得る。
【０１８１】
そのため、このような振動子およびユーザが感じる知覚刺激の周波数依存性を補正するために、振動源が発生する振動データをそのような周波数依存性を考慮して補正するようにしてもよい。
【０１８２】
図１８は、本実施の形態に従うゲームシステム１において振動データの周波数依存性を補正するための実装例を示す模式図である。図１８を参照して、例えば、アプリケーションなどに組み込まれた振動源から振動データとして、第１の振動パターンの周波数ｆ１および振幅α１ならびに第２の振動パターンの周波数ｆ２および振幅α２が出力されるとする。
【０１８３】
この場合、第１の振動パターンの周波数ｆ１および第２の振動パターンの周波数ｆ２については、そのまま合成モジュールに与えられる一方で、第１の振動パターンの振幅α１および第２の振動パターンの振幅α２については、予め定められた補正モジュールによりその大きさが補正された上で合成モジュールに与えられるようにしてもよい。
【０１８４】
補正モジュールは、振動部２２０の振動子２１４の振動強度を示す周波数特性と、ユーザが振動を感じる感受性を示す周波数特性とを掛け合わせて得られる周波数特性を保持しており、振動パターンの振幅が入力されると、当該振動パターンの周波数ｆに応じた係数を当該入力された振幅に乗じた上で出力する。
【０１８５】
例えば、それぞれの振動源から第１の振動パターン（周波数ｆ１および振幅α１）ならびに第２の振動パターン（周波数ｆ２および振幅α２）が出力されると、それぞれの振動パターンの振幅が補正された上で、補正後の第１の振動パターン（周波数ｆ１および振幅α１’）ならびに第２の振動パターン（周波数ｆ２および振幅α２’）が合成モジュールへ与えられることになる。
【０１８６】
なお、補正モジュールが保持する周波数特性については、対象となる振動部２２０の振動子２１４の周波数特性、および、ユーザの感受性を示す周波数特性を取得した上で、予め算出するようにしてもよい。
【０１８７】
［Ｅ．機能的構成］
次に、本実施の形態に従うゲームシステムに実装される機能的構成の要部について説明する。図１９は、本実施の形態に従うゲームシステム１に実装される機能的構成の要部を示すブロック図である。
【０１８８】
図１９を参照して、処理装置１００のシステムＬＳＩ１１０にてアプリケーションプログラムが実行されることで、ユーザ操作判断モジュール１１０１、ゲーム進行モジュール１１０２、映像音声制御モジュール１１０３、振動指令発生モジュール１１０４、合成モジュール１１０５、および、振動発生制御モジュール１１０６が実現される。
【０１８９】
ユーザ操作判断モジュール１１０１は、コントローラ２００の操作部（例えば、図３に示すボタン類２１０およびアナログスティック２１２Ｌ，２１２Ｒなど）に対するユーザ操作を示す信号（操作情報）、ならびに、コントローラ２００のセンサ類２３０（図３参照）での検出結果などに基づいて、ユーザが行なった操作を判断する。ユーザ操作判断モジュール１１０１は、そのユーザ操作の内容を、ゲーム進行モジュール１１０２および振動指令発生モジュール１１０４へ出力する。
【０１９０】
ゲーム進行モジュール１１０２は、ゲームアプリケーションを実行するゲーム進行機能に相当し、ユーザ操作に従ってゲーム処理を進行する。具体的には、ゲーム進行モジュール１１０２は、ユーザ操作に応じて出力すべき映像および音声の更新、ならびに、ユーザに与える振動の制御に必要なイベントの出力、などを行なう。つまり、ゲーム進行モジュール１１０２は、ユーザ操作に応じてイベントを発生する。
【０１９１】
映像音声制御モジュール１１０３は、ゲーム進行モジュール１１０２からのデータに基づいて、映像出力および音声出力を生成し、映像音声出力ドライバ１６０へ出力する。映像音声出力ドライバ１６０は、映像音声制御モジュール１１０３からの出力に応じて、表示装置３００へ与える映像信号および音声信号を生成する。
【０１９２】
振動指令発生モジュール１１０４は、上述の図５に示す振動源の少なくとも一部として機能し、端末（本実施の形態では、コントローラ２００）を振動させるための振動データ（振動パターン）を発生する。振動パターンが１つの主成分からなる場合には、振動指令発生モジュール１１０４は、第１の振動データ（例えば、図９に示す振動パターン１）および第２の振動データ（例えば、図９に示す振動パターン２）を発生する。振動パターンが複数（例えば、２つ）の主成分からなる場合には、振動指令発生モジュール１１０４は、第１の振動データに加えて、第４の振動データ（これらの２つの振動データを合わせて、例えば、図１１に示す振動パターン３）を発生するとともに、第２の振動データに加えて、第５の振動データ（これらの２つの振動データを合わせて、例えば、図１１に示す振動パターン４）を発生する。
【０１９３】
図１９には、説明の便宜上、単一の振動指令発生モジュール１１０４を描いているが、それぞれ発生される振動パターンに応じて、複数の振動指令発生モジュール１１０４を配置してもよい。
【０１９４】
振動指令発生モジュール１１０４は、ゲーム処理の進行に応じて、それぞれの振動データを発生するようにしてもよい。具体的には、振動指令発生モジュール１１０４は、ゲーム進行モジュール１１０２が発生するイベントに応じて、当該イベントに対応する振動データを予め用意された振動データセット１１０７から抽出し、合成モジュール１１０５へ出力する。このとき、ゲーム進行モジュール１１０２が第１のイベントを発生すると、振動指令発生モジュール１１０４は、第１の振動データ（および、第３の振動データ）を発生し、ゲーム進行モジュール１１０２が第１のイベントとは異なる第２のイベントを発生すると、振動指令発生モジュール１１０４は、第２の振動データ（および、第４の振動データ）を発生する。振動指令発生モジュール１１０４から合成モジュール１１０５へは、同期または非同期の態様で、複数の振動パターンが入力されることもある。
【０１９５】
振動指令発生モジュール１１０４は、入力される時間波形の信号を周波数解析して、その周波数解析結果に含まれる代表成分（主成分）に応じて振動データ（周波数および振幅の組み合わせの１または複数）を出力するようにしてもよい。この場合には、振動データセット１１０７に代えて、任意の時間波形を発生するモジュールおよび周波数解析を実行するモジュールを採用してもよい。
【０１９６】
振動指令発生モジュール１１０４は、対象の端末を振動させるべき振動波形の単位期間（例えば、５ｍｓｅｃ〜数１０ｍｓｅｃ）毎の変化に応じて、それぞれの振動データを更新する。すなわち、振動データが振動波形を周波数領域で定義する場合には、時間波形を単位期間毎に区切って、時間波形の各単位期間に含まれる変化に含まれる周波数成分を都度更新する必要がある。
【０１９７】
ゲーム進行モジュール１１０２は、ユーザ操作などに応じて、イベントを発生してもよい。ゲーム進行モジュール１１０２は複数のイベントを発生するように構成されており、各イベントに対応する振動パターンを発生する。例えば、振動指令発生モジュール１１０４は、ゲーム進行モジュール１１０２が発生するあるイベントに応じて、ある振動パターンを発生し、当該イベントとは異なる別のイベントに応じて、別の振動パターンを発生する。
【０１９８】
合成モジュール１１０５は、上述したような振動パターンの合成処理を行ない、合成パターンを出力する。すなわち、合成モジュール１１０５は、第１の振動データおよび第２の振動データが入力されると、第３の振動データを出力する。合成モジュール１１０５に対して選択方式が指令されると、一方の振動パターンの振幅および他方の振動パターンの振幅に基づいて、所定期間毎に、２つの振動パターンのうちいずれか一方を選択的に合成パターンとして出力する。また、合成モジュール１１０５に対して加算方式が指令されると、２つの振動パターンを加算して、合成パターンとして出力する。合成モジュール１１０５には、選択方式および加算方式のうち選択される方式を指定するための方式選択指令が与えられる。
【０１９９】
この出力される合成パターンは、典型的には、低周波数帯の周波数ｆＬおよび振幅αＬ、ならびに、高周波数帯の周波数ｆＨおよび振幅αＨで定義される。
【０２００】
振動発生制御モジュール１１０６は、駆動信号生成モジュール２０２１と連携して、合成モジュール１１０５からの出力（合成パターン）に基づいてコントローラ２００の振動部２２０を駆動する。振動発生制御モジュール１１０６は、合成パターンが出力する第３の振動データに基づいて端末（コントローラ２００）を振動させる。より具体的には、振動発生制御モジュール１１０６は、合成モジュール１１０５からの合成パターンの情報に応じて、コントローラ２００へ当該合成パターンの情報を送信する。振動発生制御モジュール１１０６からコントローラ２００へ送信される合成パターンの情報は、所定周期で逐次更新されることもある。なお、図示していないが、振動発生制御モジュール１１０６からコントローラ２００への情報の伝達経路には、処理装置１００の近距離無線通信モジュール１４０（図２参照）およびコントローラ２００の近距離無線通信モジュール２４０（図３参照）が存在していてもよい。
【０２０１】
コントローラ２００においては、コントローラ制御部２０２がその機能の一部として、駆動信号生成モジュール２０２１を有している。駆動信号生成モジュール２０２１は、プロセッサがプログラムを実行することで実現されてもよいし、ハードワイヤードな回路を含むマイクロコントローラがファームウェアを実行することで実現されてもよいし、ＡＳＩＣ（application specific integrated circuit）などの専用半導体などを用いて実現されてもよい。駆動信号生成モジュール２０２１を有するコントローラ制御部２０２の実装方法については、各時代に応じた公知技術を採用できる。
【０２０２】
駆動信号生成モジュール２０２１は、処理装置１００からの合成パターンの情報に基づいて、駆動信号を生成する。本実施の形態においては、一例として、合成パターンが周波数領域で指定されているので、駆動信号生成モジュール２０２１は、この周波数領域の情報を時間領域の駆動信号に変換する。駆動信号生成モジュール２０２１における駆動信号の生成処理については、後述する。駆動信号生成モジュール２０２１から出力される駆動信号は、コントローラ２００の振動部２２０へ与えられ、振動部２２０は、その駆動信号に応じて振動を発生する。
【０２０３】
本実施の形態に従うゲームシステム１においては、処理装置１００からコントローラ２００に対して、周波数領域の情報（周波数および振幅）が送信され、コントローラ２００において時間領域の駆動信号に変換される。処理装置１００とコントローラ２００との間で遣り取りされるデータを周波数領域の情報にすることで、必要な伝送帯域を圧縮できるという利点がある。
【０２０４】
但し、このような形態に限られることなく、時間領域の駆動信号を処理装置１００で生成した上で、コントローラ２００へ送信するようにしてもよい。また、上述の説明においては、処理装置１００側に合成モジュールを実装する構成について例示したが、コントローラ２００側に合成モジュールを実装するようにしてもよい。すなわち、処理装置１００からコントローラ２００に対して、１または複数の振動パターンが送信されるとともに、コントローラ２００側にて振動パターンの合成処理および駆動信号の生成処理を行なうようにしてもよい。
【０２０５】
［Ｆ．駆動信号の生成処理］
次に、周波数領域の情報（周波数および振幅）で指定される合成パターンから時間領域の駆動信号を生成する処理について説明する。
【０２０６】
（ｆ１：生成手順）
図２０は、本実施の形態に従うゲームシステム１における駆動信号の生成処理を説明するための模式図である。図２０には、一例として、コントローラ２００のコントローラ制御部２０２（より正確には、駆動信号生成モジュール２０２１）が駆動信号を生成する場合を示す。
【０２０７】
図２０を参照して、駆動信号生成モジュール２０２１は、処理装置１００から合成パターンを指定する情報（低周波数帯の周波数ｆＬおよび振幅αＬ、ならびに、高周波数帯の周波数ｆＨおよび振幅αＨ）を受取り、時間領域において駆動信号を生成する。
【０２０８】
駆動信号生成モジュール２０２１は、補正係数βＬ，βＨについても処理装置１００から受取るものとする。補正係数βＬ，βＨは、低周波数帯の振動と高周波数帯の振動との間のバランスを調整するものであり、基本的には、０＜βＬ≦１，０＜βＨ≦１の範囲の値に設定される。但し、補正係数βＬ，βＨは必須の構成ではない。
【０２０９】
駆動信号生成モジュール２０２１は、駆動信号の低周波数帯の成分として、αＬ×βＬ×ｓｉｎ（２π・ｆＬ・ｔ）を逐次算出し、駆動信号の高周波数帯の成分として、αＨ×βＨ×ｓｉｎ（２π・ｆＨ・ｔ）を逐次算出する。そして、これらの両成分を合成したものを駆動信号として出力する。
【０２１０】
より具体的には、駆動信号生成モジュール２０２１は、その機能として、位相決定モジュール２０２２，２０２５と、乗算モジュール２０２３，２０２４，２０２６，２０２７と、加算モジュール２０２８とを含む。駆動信号生成モジュール２０２１に含まれる各モジュールは、所定の演算周期（例えば、１／４０００ｓｅｃ）毎に演算処理を事項する。上述したように、補正係数βＬ，βＨを用いない構成においては、乗算モジュール２０２４および２０２７を省略してもよい。
【０２１１】
位相決定モジュール２０２２および２０２５は、周波数ｆＬおよびｆＨに応じて、各算出周期での位相成分（各算出タイミングにおけるｓｉｎ値）をそれぞれ算出する。乗算モジュール２０２３および２０２６は、振幅αＬおよびαＨに応じて、位相成分に振幅成分を乗じる。乗算モジュール２０２４および２０２７は、補正係数βＬおよびβＨに応じて、振幅成分を乗じた結果に対して補正係数を乗じる。加算モジュール２０２８は、低周波および高周波数帯においてそれぞれ算出された結果を足し合せることで、駆動信号ｆ（ｔ）を生成する。
【０２１２】
図２０に示すような算出ロジックを採用することで、周波数領域で指定された合成パターンに応じた駆動信号を生成することができる。
【０２１３】
上述したように、合成パターンは所定周期（例えば、５ｍｓｅｃ〜数１０ｍｓｅｃ）毎に更新される。この更新によって、合成パターンを定義する周波数および振幅がステップ的に変化することになる。このようなステップ的な変化に対して、駆動信号の時間波形の連続性を保つようにしてもよい。以下、駆動信号の時間波形の連続性を保つための処理について説明する。
【０２１４】
図２１は、本実施の形態に従うゲームシステム１における駆動信号の時間波形の連続性を保つための処理を説明するための模式図である。図２１（Ａ）には、合成パターンの位相の時間波形の一例を示す。図２１（Ａ）に示す合成パターンでは、基準時刻から時刻ｔ２までの区間において周波数ｆａが指示されており、時刻ｔ２以降は周波数ｆｂが指示されている。すなわち、時刻ｔ２において、周波数がｆａからｆｂにステップ的に変化しているとする。
【０２１５】
図２１（Ｂ）には、図２１（Ａ）に示す時刻ｔ１〜ｔ４の各々における位相成分の算出方法を示す。時刻ｔ１においては、初期位置（位相ゼロ）を基準として、周波数ｆａと基準時刻から時刻ｔ１までの時間幅とから変位角Δω１を算出し、基準角度に変位角Δω１を加算した角度に基づいて位相成分を算出する。
【０２１６】
続く時刻ｔ２においては、時刻ｔ１の位相を基準として、周波数ｆａと時刻ｔ１から時刻ｔ２までの時間幅とから変位角Δω２を算出し、時刻ｔ１での角度に変位角Δω２を加算した角度に基づいて位相成分を算出する。
【０２１７】
続く時刻ｔ３においても同様に、前回の時刻ｔ２の位相を基準として位相成分が算出される。但し、指定される位相の大きさが変化しているので、変更後の位相ｆｂを用いる。具体的には、時刻ｔ２の位相を基準として、周波数ｆｂと時刻ｔ２から時刻ｔ３までの時間幅とから変位角Δω３を算出し、時刻ｔ２での角度に変位角Δω３を加算した角度に基づいて位相成分を算出する。
【０２１８】
続く時刻ｔ４においては、時刻ｔ３の位相を基準として、周波数ｆｂと時刻ｔ３から時刻ｔ４までの時間幅とから変位角Δω４を算出し、時刻ｔ３での角度に変位角Δω４を加算した角度に基づいて位相成分を算出する。
【０２１９】
図２１（Ｂ）に示すように、駆動信号の各算出タイミングにおいては、前回の算出タイミングにおいて算出された位相を基準として今回の位相を算出した上で、位相成分を出力する。このような前回の算出タイミングから増加した位相量を順次加算する方法を採用することで、いずれのタイミングで合成パターンを指定する位相などがステップ的に更新されたとしても、駆動信号の時間波形の連続性を保つことができる。
【０２２０】
図２２は、本実施の形態に従うゲームシステム１において生成される駆動信号の時間波形の一例を示す図である。図２２には、ある時刻において、合成パターンの周波数がｆａからｆｂへ更新された例を示すが、この周波数の更新によっても、駆動信号の時間波形の連続性が保たれていることが分かる。
【０２２１】
（ｆ２：実装例）
図２０および図２１に示すような位相成分を算出する処理は、算術的な手法を用いて実現することが可能である。より具体的には、三角関数およびその逆関数を用いることで、位相成分を順次算出できる。このような算出方法を採用してもよいが、算出処理が複雑化し得るため、以下に例示するようなテーブルを利用する算出方法を採用してもよい。
【０２２２】
図２３は、本実施の形態に従うゲームシステム１における参照テーブルを利用して駆動信号を生成する処理を説明するための図である。図２３を参照して、参照テーブル２０２９には、アドレス付けされた配列を含み、各列には、ｒａｄ値および対応するｓｉｎ値が格納されている。ｒａｄ値は、所定ステップで単調増加するように配置されている。すなわち、参照テーブル２０２９は三角関数（すなわち、ｓｉｎ関数）をテーブル化したものに相当する。なお、参照テーブル２０２９としては、必ずしも、三角関数（ｓｉｎ関数またはｃｏｓ関数）を用いる必要はなく、周期的な関数を用いればよい。例えば、所定周期をもつノコギリ波などを採用してもよい。また、図２３には、１周期（２πラジアン）を４０９６で分割して、２π／４０９６ラジアンずつ増加するように構成されている参照テーブル２０２９を例示するが、分解能などはシステムの性能や要求などに応じて、適宜設計すればよい。
【０２２３】
参照テーブル２０２９を利用して、位相決定モジュール２０２２，２０２５（図２０）での位相成分の算出処理を実現する。具体的には、現在の位相に対応するカウント値が取得されているとする（図２３の（１））。続いて、合成パターンの指定された周波数に基づいて次のカウント値が算出される（図２３の（２））。すなわち、図２１に示す変位角Δωが何カウント分に相当するのかが算出され、その算出された増分カウントが現在カウント値に加算されることで、次のカウント値が算出される。
【０２２４】
そして、算出された次のカウント値に対応するｓｉｎ値が読み出される（図２３の（３））。この読み出されたｓｉｎ値が、駆動信号の次の算出タイミングでの位相成分となる。
【０２２５】
同様の処理が以下繰返される。すなわち、合成パターンの指定された周波数に基づいて次の次のカウント値が算出される（図２３の（４））。そして、算出された次の次のカウント値に対応するｓｉｎ値が読み出される（図２３の（５））。この読み出されたｓｉｎ値が、駆動信号の次の次の算出タイミングでの位相成分となる。
【０２２６】
このような参照テーブル２０２９を参照する実装形態を採用することで、位相成分を算出するためにｓｉｎ値を算出するような処理は不要となり、基本的には、各算出タイミングにおいて参照すべき行を示すカウント値のみを算出すればよいので、計算コストを低減しつつ、周波数が変化した場合でも、駆動信号の時間波形の連続性を保つことができる。
【０２２７】
（ｆ３：変化量緩和処理）
上述の図２１には、説明の便宜上、合成パターンの周波数がｆａからｆｂにステップ的に変化する例を示す。本実施の形態に従うゲームシステム１においては、合成パターンの周波数がステップ的に変化した場合であっても、上述のような処理方法を採用することで、駆動信号の時間波形の連続性は保たれる。但し、ステップ的な変化の前後で、時間波形が大きく歪む可能性もあるので、このような時間波形に生じ得る変化量を緩和するような処理を採用してもよい。
【０２２８】
図２４は、本実施の形態に従うゲームシステム１における変化量緩和処理を説明するための図である。図２４（Ａ）には、合成パターンの周波数がｆａからｆｂへ変化する例を示し、図２４（Ｂ）には、合成パターンの振幅がαａからαｂへ変化する例を示す。
【０２２９】
図２４（Ａ）に示すように、時刻ｔ１０において、合成パターンの周波数がｆａからｆｂへ更新されたとする。この場合、ある期間（補間区間）をかけて周波数をｆａからｆｂへ変化させるとする。この周波数ｆａからｆｂへの時間的変化はどのようなものであってもよく、１次関数を用いた補間であってもよいし、多次関数を用いた補間であってもよい。図２４には、説明の便宜上、１次関数を用いた補間（すなわち、直線補間）の例を示す。
【０２３０】
図２４（Ａ）に示す時刻ｔ１０〜ｔ１８が駆動信号の各算出タイミングに相当する。すなわち、各算出タイミングにおいて駆動信号を生成する際に、補間された特性を用いることで、生成される駆動信号が徐々に変化することになる。すなわち、各算出タイミングにおいて算出される位相の増分は、ある時刻においてステップ的に変化するのではなく、補間された特性に従って徐々に増加する。このような位相の増分の変化量を緩和することで、最終的に生成される駆動信号に現れる時間的変化も急峻なものから緩やかなものとなる。
【０２３１】
図２４（Ａ）に示す変化量緩和処理を採用することで、アプリケーション開発者が意図していないような振動刺激をユーザへ与える可能性を抑制できる。
【０２３２】
図２４（Ｂ）には、合成パターンの振幅がステップ的に変化した場合にも、図２４（Ａ）と同様の手法により、変化量緩和処理を適用することができる。このような変化量緩和処理を適用することで、アプリケーション開発者が意図していないような振動刺激をユーザへ与える可能性を抑制できる。
【０２３３】
但し、生成される駆動信号の変位は、位相成分と振幅との積によって決定されるので、振幅がステップ的に変化したとしても、生成される駆動信号に急峻な時間的変化が現れるとは限らない。そのため、周波数および振幅の両方について変化量緩和処理を適用する必要はない。
【０２３４】
図２４に示すように、周波数および／または振幅の値がステップ的に更新された後、実際にその更新後の値に変化するまでにある程度の遅延が生じることになるが、ゲーム処理の進行に比べて、この遅延は十分に小さくできるので、実用上の問題はない。
【０２３５】
本実施の形態に従うゲームシステム１においては、周波数および振幅の組み合わせの２つを用いて振動刺激を表現するため、図２４に示す処理は、組み合わせ毎に適用されるようにしてもよい。すなわち、低周波数帯および高周波数帯の各々に対して、図２４に示すような変化量緩和処理が適用されてもよいし、いずれか一方のみに適用されてもよい。
【０２３６】
図２４に示すような補間処理は、コントローラ２００のコントローラ制御部２０２（より正確には、駆動信号生成モジュール２０２１）側に実装してもよいし、処理装置１００側に実装してもよい。但し、コントローラ２００側に実装することで、処理装置１００とコントローラ２００との間の通信速度に対する影響を抑制できる。
【０２３７】
［Ｇ．プログラム配布形態］
次に、本実施の形態に従うゲームシステム１において合成パターンを生成するために用いる合成モジュールを含むプログラムの配布形態について説明する。
【０２３８】
図２５は、本実施の形態に従うゲームシステム１において振動部の制御に係る振動制御プログラムの配布形態の一例を示す模式図である。図２５（Ａ）には、アプリケーションプログラム１８０の一部に、振動部の制御に必要なプログラムモジュールをＡＰＩ（Application Programming Interface）として実装する例を示す。図２５（Ｂ）には、振動部の制御に必要なプログラムモジュールを含むＳＤＫ（Software Development Kit）として配布する例を示す。
【０２３９】
図２５に示す説明において、「ＡＰＩ」とは、任意のアプリケーションプログラムが利用することのできる１または複数のプログラムモジュールを意味する。１または複数のプログラムモジュールの具体的な形態としては、どのようなものであってもよい。典型的には、ライブラリ、サブルーチン、オブジェクトクラスなどが挙げられる。
【０２４０】
図２５（Ａ）を参照して、アプリケーションプログラム１８０（図２参照）は、典型的には、アプリケーションのプログラムの実体であるアプリケーションオブジェクトコード１８０１と、アプリケーションオブジェクトコード１８０１が実行時に利用するコアＡＰＩ１８０２とを含む。
【０２４１】
コアＡＰＩ１８０２の一部として、上述したような合成パターンを生成するために用いる合成モジュールを含み得る。アプリケーションの開発者は、コアＡＰＩ１８０２に含まれる合成モジュールを利用するための宣言文や変数の指定をアプリケーションのコード中に記述することで、上述したような合成パターンの生成を実装できる。
【０２４２】
図２５（Ｂ）を参照して、アプリケーションの開発者へ提供されるＳＤＫ４００は、典型的には、ソースコードエディタ４０１と、画面デザインツール４０２と、デバッガ４０３と、コンパイラ４０４と、シミュレータ４０５と、コアＡＰＩ４０６とを含む。コアＡＰＩ４０６には、上述したような合成パターンを生成するために用いる合成モジュールを含み得る。
【０２４３】
アプリケーションの開発者は、ＳＤＫ４００を処理装置１００または汎用のコンピュータなどにインストールして、任意のアプリケーションを開発することができる。開発者は、ソースコードエディタ４０１を用いて、コアＡＰＩ４０６に含まれる任意のＡＰＩの利用に係る記述を追加することで、作成したアプリケーションプログラムをシミュレータ４０５上で実行させたときに、処理装置１００で当該アプリケーションプログラムを実行したのと同様に、上述したような合成パターンを生成するために用いる合成モジュールを利用したロジックを容易に実装できる。
【０２４４】
［Ｈ．処理手順］
次に、本実施の形態に従うゲームシステム１において実行される処理について説明する。図２６は、本実施の形態に従うゲームシステム１において実行される処理手順を示すフローチャートである。図２６に示す各ステップは、典型的には、処理装置１００のＣＰＵ１０２がシステムプログラムやアプリケーションプログラムなどを実行することで実現される。すなわち、本実施の形態に従う振動制御プログラムは、システムプログラムおよびアプリケーションプログラムの一方または両方に相当する。
【０２４５】
図２６を参照して、ＣＰＵ１０２は、コントローラ２００の操作部に対するユーザ操作を示す操作情報、および、コントローラ２００のセンサ類２３０（図３参照）での検出結果などに基づいて、ユーザが行なったユーザ操作を判断する（ステップＳ１００）。ＣＰＵ１０２は、ステップＳ１００において判断されたユーザ操作に従ってゲーム処理を進行する（ステップＳ１０２）。このゲーム処理の進行には、出力すべき映像および音声の更新処理を含む。併せて、ＣＰＵ１０２は、ステップＳ１００において判断されたユーザ操作に基づいてイベントを発生させる必要があるか否かを判断する（ステップＳ１０４）。イベントを発生させる必要がある場合（ステップＳ１０４においてＹＥＳの場合）、ＣＰＵ１０２は、入力されたユーザ操作に応じたイベントを内部的に発生する（ステップＳ１０６）。続いて、ＣＰＵ１０２は、内部的に発生したイベントに基づいて、何らかの振動データを発生させる必要があるか否かを判断する（ステップＳ１０８）。
【０２４６】
イベントを発生させる必要がない場合（ステップＳ１０４においてＮＯの場合）、または、何らかの振動データを発生させる必要がない場合（ステップＳ１０８においてＮＯの場合）、処理はステップＳ１１２へ進む。
【０２４７】
何らかの振動データを発生させる必要がある場合（ステップＳ１０８においてＹＥＳの場合）、ＣＰＵ１０２は、当該イベントに対応する振動データを内部的に発生する（ステップＳ１１０）。
【０２４８】
そして、ＣＰＵ１０２は、発生している１または複数の振動データに対して、上述したような振動データの合成処理を行ない、合成された振動データを生成する（ステップＳ１１２）。この場合、１つの振動データしか発生していない場合には、振動データの合成処理は実質的にスキップされ、発生している１つの振動データが出力される。一方、複数の振動データが発生している場合には、選択方式が指定されていれば、上記ｄ１、ｄ２で説明した方法に従い、所定期間毎に、いずれか１つの振動データが出力される。一方、加算方式が指定されていれば、上記ｄ３、ｄ４で説明した方法に従い、複数の振動データを合成した合成データが出力される。
【０２４９】
最終的に、ＣＰＵ１０２は、合成された振動データをコントローラ２００へ送出する（ステップＳ１１４）。コントローラ２００では、ＣＰＵ１０２からの合成データの指令に基づいて、駆動信号が生成されて振動部２２０が駆動される。
【０２５０】
ＣＰＵ１０２は、ゲーム処理の終了の条件が成立したか否かを判断する（ステップＳ１１６）。例えば、ユーザ操作によって、ゲーム処理の終了が指示されたか否かといった判断が行なわれる。ゲーム処理の終了の条件が成立していなければ（ステップＳ１１６においてＮＯの場合）、ステップＳ１００以下の処理が繰返される。
【０２５１】
ゲーム処理の終了の条件が成立していなければ（ステップＳ１１６においてＹＥＳの場合）、ゲーム処理は終了する。
【０２５２】
［Ｉ．利点］
本実施の形態に従うゲームシステムにおいては、合成モジュールを任意のアプリケーションで利用することができる。この合成モジュールによれば、複数の振動データを用意しておくとともに、ゲーム進行（ユーザ操作に伴なるイベント発生）に応じた種類の振動データを発生させるようなアプリケーションを作成する際の自由度を高めることができる。すなわち、合成モジュールを選択方式で動作させる場合に、より振幅の大きな振動データを優先して出力することで、ゲーム進行に応じて、アプリケーション開発者の意図に最も沿った振動データに従う振動刺激をユーザにあたることができる。また、合成モジュールを加算方式で動作させることで、複数の振動データを組み合わせた振動刺激をユーザに対して与えたいようなシーンにも適用できる。
【０２５３】
このように、本実施の形態に従う合成モジュールは、選択方式および加算方式の各々についてもアプリケーション開発者の自由度を高めるという利点が得られるとともに、これらの方式を任意に選択できるので、自由度をより高めることができる。
【０２５４】
今回開示された実施の形態はすべての点で例示であって制限的なものではないと考えられるべきである。本発明の範囲は、上記した説明ではなく、特許請求の範囲によって示され、特許請求の範囲と均等の意味および範囲内でのすべての変更が含まれることが意図される。
【符号の説明】
【０２５５】
１  ゲームシステム、８  光学記録媒体、１００  処理装置、１０２  ＣＰＵ、１０４  ＧＰＵ、１０６  メインメモリ、１０８  ＶＲＡＭ、１１０  システムＬＳＩ、１１６  フラッシュメモリ、１１８  外部メモリ、１２０  コントローラインターフェイス、１２２  同期ボタン、１３０  ネットワーク無線通信モジュール、１４０，２４０  近距離無線通信モジュール、１５０  ディスクドライブ、１６０  映像音声出力ドライバ、１８０  アプリケーションプログラム、２００  コントローラ、２０２  コントローラ制御部、２１０  ボタン類、２１０Ａ  Ａボタン、２１０Ｂ  Ｂボタン、２１０Ｃ  十字ボタン、２１０Ｌ  Ｌボタン、２１０Ｒ  Ｒボタン、２１０Ｘ  Ｘボタン、２１０Ｙ  Ｙボタン、２１２  増幅器、２１２Ｌ，２１２Ｒ  アナログスティック、２１４  振動子、２２０  振動部、２３０  センサ類、２３２  加速度センサ、２３４  角速度センサ、３００  表示装置、４０１  ソースコードエディタ、４０２  画面デザインツール、４０３  デバッガ、４０４  コンパイラ、４０５  シミュレータ、４０６，１８０２  コアＡＰＩ、１１０１  ユーザ操作判断モジュール、１１０２  ゲーム進行モジュール、１１０３  映像音声制御モジュール、１１０４  振動指令発生モジュール、１１０５  合成モジュール、１１０６  振動発生制御モジュール、１１０７  振動データセット、１８０１  アプリケーションオブジェクトコード、２０２１  駆動信号生成モジュール、２０２２，２０２５  位相決定モジュール、２０２３，２０２４，２０２６，２０２７  乗算モジュール、２０２８  加算モジュール、２０２９  参照テーブル。
【図１】
2018020088.tif 000003
【図２】
2018020088.tif 000004
【図３】
2018020088.tif 000005
【図４】
2018020088.tif 000006
【図５】
2018020088.tif 000007
【図６】
2018020088.tif 000008
【図７】
2018020088.tif 000009
【図８】
2018020088.tif 000010
【図９】
2018020088.tif 000011
【図１０】
2018020088.tif 000012
【図１１】
2018020088.tif 000013
【図１２】
2018020088.tif 000014
【図１３】
2018020088.tif 000015
【図１４】
2018020088.tif 000016
【図１５】
2018020088.tif 000017
【図１６】
2018020088.tif 000018
【図１７】
2018020088.tif 000019
【図１８】
2018020088.tif 000020
【図１９】
2018020088.tif 000021
【図２０】
2018020088.tif 000022
【図２１】
2018020088.tif 000023
【図２２】
2018020088.tif 000024
【図２３】
2018020088.tif 000025
【図２４】
2018020088.tif 000026
【図２５】
2018020088.tif 000027
【図２６】
2018020088.tif 000028