(58)【調査した分野】(Int.Cl.,DB名)
前記記憶制御手段は、前記第2の装置から前回受信した前記振動指示データによって指示される振動の振幅を漸減的に小さくする振動を生成することを示すデータを前記記憶手段に追加して格納する、請求項4に記載の振動制御システム。
前記記憶制御手段は、前記第2の装置から前記振動指示データの受信が所定時間以上ない場合、前記第2の装置から前回受信した前記振動指示データによって指示される振動の振幅を漸減的に小さくする振動を生成することを示すデータを前記記憶手段に追加して格納する、請求項5に記載の振動制御システム。
前記第2の装置は、前記振動装置を振動させるための振動波形において振幅および/または周波数の変化を示す変調情報を符号化することによって前記振動指示データを生成して前記第1の装置に送信し、
前記記憶制御手段は、前記振動指示データを受信するごとに、当該振動指示データを復号したデータを前記記憶手段に格納する、請求項1乃至10の何れか1つに記載の振動制御システム。
【発明を実施するための形態】
【0038】
図1および
図2を参照して、本実施形態の一例に係る振動出力プログラムを実行する端末装置および振動制御プログラムを実行する情報処理装置を含む振動制御システムについて説明する。なお、
図1は、据置型の情報処理装置2およびコントローラ型(可搬型)の端末装置3を含む振動制御システム1とモニタ4との外観の一例を示す平面図である。
図2は、振動制御システム1を用いてユーザが操作している様子の一例を示す図である。
【0039】
本発明の振動制御プログラムは、任意のコンピュータシステムで実行されることによって適用することができるが、振動制御装置の一例として据置型の情報処理装置2を用い、情報処理装置2で実行される振動制御プログラムを用いて説明する。例えば、情報処理装置2は、交換可能な光ディスクやメモリーカード等の記憶媒体内に記憶された、または、他の装置から受信したプログラムや予めインストールされたプログラム(例えば、ゲームプログラム)を実行可能であり、一例として、仮想空間に設定された仮想カメラから見た仮想空間画像等のコンピュータグラフィックス処理により生成された画像を画面(
図1および
図2においてはモニタ4)に表示することができる。情報処理装置2は、一般的なパーソナルコンピュータ、据置型ゲーム機、携帯電話機、携帯ゲーム機、PDA(Personal Digital Assistant)等のデバイスであってもかまわない。
【0040】
また、本発明の振動出力プログラムも、任意のコンピュータシステムで実行されることによって適用することができるが、振動出力装置の一例としてユーザが把持して操作可能なコントローラ型の端末装置3(例えば、ゲームコントローラ)を用い、端末装置3で実行される振動出力プログラムを用いて説明する。例えば、端末装置3は、予めインストールされたプログラムや他の装置から受信したプログラム、または、交換可能なメモリーカード等の記憶媒体内に記憶されたプログラムを実行可能であり、一例として、情報処理装置2と無線通信することによって画面(
図1および
図2においてはモニタ4)に表示された仮想オブジェクト等を操作することができる。端末装置3は、携帯電話機、携帯ゲーム機、PDA、スマートフォン、タブレット等の、どのような形態のデバイスであってもかまわない。また、情報処理装置2は、端末装置3と通信可能である。情報処理装置2と端末装置3との通信は、有線であってもよいし無線であってもよい。また、情報処理装置2とモニタ4との接続についても、有線であってもよいし無線であってもよい。
【0041】
情報処理装置2においては、端末装置3に対する入力に応じて情報処理装置2が情報処理を実行し、実行の結果得られた画像がモニタ4に表示される。このように、本実施形態においては、入力機能、情報処理機能、および表示機能が情報処理装置2および端末装置3によって実現される構成を用いているが、他の実施形態においては、情報処理装置2や端末装置3の機能が他の装置によって実現されてもよい。例えば、他の実施形態においては、情報処理装置2や端末装置3において実行される処理の少なくとも一部が、ネットワーク(広域ネットワークおよび/またはローカルネットワーク)によって通信可能な複数の装置によって分散されて実行されてもよい。
【0042】
端末装置3内部には、アクチュエータ30(
図3参照)が設けられている。アクチュエータ30は、端末装置3の本体に所定の振動を与える振動アクチュエータ(振動子)であり、当該アクチュエータ30が振動することによって、端末装置3を操作しているユーザに振動を与えることができる。また、端末装置3は、方向指示キーや操作ボタン等を含む操作部が設けられる。一例として、操作部は、十字型の4方向プッシュスイッチ(十字キー)、タッチパネル、タッチパッド等を含んでもよい。また、操作部は、十字方向に4つのプッシュスイッチを配設し、ユーザによって押下されたプッシュスイッチに応じて操作信号を出力してもよい。また、操作部は、上記4つのプッシュスイッチとは別に、上記十字方向が交わる位置にセンタスイッチを配設し、4つのプッシュスイッチとセンタスイッチとを複合したものでもよい。また、操作部は、傾倒可能なスティック(いわゆる、ジョイスティック)を倒すことによって、傾倒方向に応じて操作信号を出力してもよい。さらに、操作部は、水平移動可能な円盤状部材をスライドさせることによって、当該スライド方向に応じた操作信号を出力してもよい。また、端末装置3は、端末装置3自身および/または情報処理装置2の制御に基づいた画像を表示する表示画面が設けられてもよい。
【0043】
端末装置3を用いて、上記操作部を操作したり上記表示画面を見たりするために、ユーザは、一方の手(例えば、右手)または両手で端末装置3を把持する。そして、モニタ4等に表示されている仮想世界の状況に応じて、端末装置3本体が振動する。例えば、本実施例では、当該振動を生じさせるための振動制御信号を生成するための振動指示データが、情報処理装置2から端末装置3へ与えられる。例えば、情報処理装置2は、振動を生成することを指示するための振動指示データを、例えばBluetooth(ブルートゥース;登録商標)の技術を用いて端末装置3へ無線送信する。そして、端末装置3は、取得した振動指示データに基づいて、アクチュエータ30を駆動制御するための振動制御信号を生成する。また、端末装置3は、操作部に対する操作を示す操作データや端末装置3における振動出力状況等を示すレポートデータを、例えばBluetoothの技術を用いて情報処理装置2へ無線送信する。
【0044】
次に、
図3を参照して、情報処理装置2および端末装置3を含む振動制御システム1について説明する。なお、
図3は、情報処理装置2および端末装置3を含む振動制御システム1の一例を示すブロック図である。
【0045】
図3に示すように、情報処理装置2は、CPU21、メモリ22、プログラム記憶部23、および通信部24を備える。CPU21は、メモリ22を用いて所定の情報処理プログラムを実行することによって、例えば振動を生成することを指示するための振動指示データを生成して端末装置3へ送信する振動制御処理や、プレイヤオブジェクトが登場する仮想世界の画像をモニタ4に表示させたりする表示制御処理を実行する。なお、情報処理装置2は、情報処理を実行することができればどのような構成であってもよく、例えば情報処理の一部または全部が専用回路によって実行されてもよい。
【0046】
プログラム記憶部23は、上記情報処理プログラムを記憶する。プログラム記憶部23は、CPU21がアクセス可能な任意の記憶装置である。プログラム記憶部23は、例えばハードディスク等の、情報処理装置2に内蔵される記憶部であってもよいし、例えば光ディスク等の、情報処理装置2に着脱可能な記憶部であってもよい。また、プログラム記憶部23は、CPU21とネットワークを介して接続される記憶装置(サーバ等)であってもよい。CPU21は、プログラムの一部または全部を適宜のタイミングでメモリ22に読み出し、読み出されたプログラムを実行するようにしてもよい。
【0047】
通信部24は、端末装置3との間で無線通信する無線コントローラモジュールとして機能し、振動指示データ等を所定のタイミングで端末装置3へ送信したり、端末装置3からレポートデータや操作データ等を端末装置3から繰り返し受信したりする。
【0048】
端末装置3は、ユーザの操作を受け付け、ユーザの操作を表す操作データを生成する入力部として、操作部33の他に、加速度センサ34およびジャイロセンサ35を備えている。加速度センサ34およびジャイロセンサ35は、端末装置3の動きや姿勢を算出するためのセンサの一例である。例えば、端末装置3は、3軸の加速度センサ34を備えていてもよい。3軸の加速度センサ34は、3方向、すなわち、上下方向、左右方向、および前後方向それぞれに生じる直線加速度を検知する。また、端末装置3は、3軸のジャイロセンサ35を備えていてもよい。3軸の加速度センサ35は、3方向周り、すなわち、上下方向周り、左右方向周り、および前後方向周りそれぞれに生じる角速度を検知する。なお、端末装置3の動きや姿勢を算出するためのセンサとして、磁気センサを備えていてもよい。
【0049】
端末装置3は、CPU36、メモリ37、プログラム記憶部38、および通信部39を備える。CPU36は、メモリ37を用いて振動出力プログラムを実行することによって、端末装置3を操作するユーザに情報処理装置2から取得した振動指示データに基づいた振動を与える振動出力処理を実行する。例えば、CPU36は、振動出力処理の一例として、通信部39を介して情報処理装置2から転送された振動指示データを受信し、当該振動指示データに基づいてアクチュエータ30が生成する振動を制御するための振動制御信号(例えば、アナログ電圧値を示す振動制御信号)を生成して、当該振動制御信号をローパスフィルタ32へ出力する。なお、端末装置3は、上記振動出力処理を実行することができればどのような構成であってもよく、例えば振動出力処理の一部または全部が専用回路によって実行されてもよい。
【0050】
プログラム記憶部38は、上記振動出力プログラムを記憶する。プログラム記憶部38は、CPU36がアクセス可能な任意の記憶装置である。プログラム記憶部38は、端末装置3に着脱可能な記憶部であってもよい。また、プログラム記憶部38は、CPU36とネットワークを介して接続される記憶装置(サーバ等)であってもよい。CPU36は、プログラムの一部または全部を適宜のタイミングでメモリ37に読み出し、読み出されたプログラムを実行するようにしてもよい。
【0051】
通信部39は、情報処理装置2との間で無線通信する無線コントローラモジュールとして機能し、端末装置3における振動出力状況等を示すレポートデータ、操作部33、加速度センサ34、およびジャイロセンサ35の少なくとも1つによって生成された操作データ等を、情報処理装置2へ送信する。上記操作データは、例えば一定時間に1回の割合で繰り返し、端末装置3から情報処理装置2へ送信される。情報処理装置2は、レポートデータや操作データを入力として用いて上記情報処理を実行する。
【0052】
端末装置3は、ユーザに与える振動を生成する振動出力部を備えている。例えば、振動発生部は、アクチュエータ(振動子)30、増幅部31、およびローパスフィルタ32を備えている。
【0053】
ローパスフィルタ32は、CPU36から出力された振動制御信号を取得して所定の周波数より高い周波数成分を逓減させる処理を行ってアナログ値に変換し、増幅部31へ出力する。増幅部31は、ローパスフィルタ32から出力されたアナログ値(アナログ電圧値を示す信号)を増幅してアクチュエータ30を駆動するための駆動信号を生成し、アクチュエータ30へ出力する。
【0054】
アクチュエータ30は、増幅部31から出力された駆動信号に応じて駆動することによって、端末装置3の本体に当該駆動信号に応じた振動を与える。例えば、アクチュエータ30は、端末装置3本体の中心部付近に設けられている。ここで、アクチュエータ30が端末装置3本体に振動を与える方式は、どのようなものでもかまわない。例えば、アクチュエータ30は、偏心モーター(ERM:Eccentric Rotating Mass)によって振動を生じさせる方式や、リニア・バイブレータ(LRA:Linear Resonant Actuator)によって振動を生じさせる方式や、ピエゾ(圧電)素子によって振動を生じさせる方式等を用いた構成であってもよい。アクチュエータ30が振動を生じさせる方式に応じて、増幅部31から出力される駆動信号が生成されれば、どのような方式のアクチュエータであっても様々な振動を端末装置3のユーザに与えることができる。
【0055】
なお、上述した説明では、ローパスフィルタ32で生成されたアナログ値が増幅されてアクチュエータ30を駆動するための駆動信号が生成される例を用いたが、増幅部31へ出力される信号は、デジタル信号であってもよい。例えば、パルス幅変調(PWM:Pulse Width Modulation)制御によってアクチュエータ30を駆動する場合、増幅部31へアクチュエータ30をオン/オフするためのパルス信号が入力すればよい。この場合、増幅部31へ出力される信号は、パルス波を用いて駆動が制御されるデジタル振動信号となり、増幅部31は、当該デジタル振動信号を増幅することになる。
【0056】
モニタ4は、生成された画像を表示し生成された音声を出力する表示装置の一例である。モニタ4は、情報処理装置2から送信されるデータを取得可能である。情報処理装置2において生成された画像がモニタ4へ出力されてくると、モニタ4は当該画像を表示する。
【0057】
なお、本実施形態においては、入力装置が設けられたコントローラ型の端末装置3を用いているが、他の実施形態においては、表示装置と入力装置とが一体となったデバイスでもよい。この場合、端末装置3が入力装置および表示装置として機能し、情報処理装置2は、モニタ4および端末装置3に設けられた表示装置に画像を表示させてもよい。
【0058】
次に、
図4〜
図8を参照して、振動制御信号を生成する処理の一例を説明する。なお、
図4は、AMFM符号データに基づいてAMFM波を生成する処理の一例を説明するための図である。
図5は、AMFM波のデューティ比に対応して生成されるデータ列を生成する際に用いられる均等ビットパターンの一例を示す図である。
図6は、デューティ比25%に対応して均等ビットパターンを用いて生成されるデータ列の一例を示す図である。
図7は、デューティ比12.5%に対応して均等ビットパターンを用いて生成されるデータ列の一例を示す図である。
図8は、均等ビットパターンを用いて生成されるアナログ波形の一例を示す図である。
【0059】
アクチュエータ30が生成する振動を制御するための振動制御信号は、情報処理装置2から送信される振動指示データに基づいて生成される。本実施例では、情報処理装置2から送信されるAMFM符号データを振動指示データとして端末装置3が受信し、当該AMFM符号データをデコードすることによって振動波形(AMFM波)データが生成され、当該振動波形(AMFM波)のデューティ比に対応したビットパターンが振動制御信号として用いられる。ここで、AM符号データは、振動の振幅変調(Amplitude Modulation)を表すデータを示す。FM符号データは、振動の周波数変調(Frequency Modulation)を表すデータを示す。AMFM符号データは、振動の振幅変調および周波数変調の両方を表すデータを示す。そして、AMFM波は、AMFM符号データに基づいて振幅変調および周波数変調された振動波形を示している。
【0060】
図4に示すように、AMFM符号データは、振動指示データとして振動を変調する一定の更新周期毎(例えば、5msec毎)に情報処理装置2から送信され、振動の振幅および周波数更新コマンドとして機能する。そして、AMFM符号データは、所定の符号化テーブルを用いてデコードされることによって、AM情報およびFM情報が取り出される。ここで、AM情報は、更新前の振動の振幅を基準として更新後の振動の振幅を示す情報である。このようなAM情報を上記更新周期毎に分析することによって、所定の振幅を基準として振動振幅を時系列的に変調させる
図4に示すような情報を取得することができる。また、FM情報は、更新前の振動の周波数を基準として更新後の振動の振幅を示す情報である。このようなFM情報を上記更新周期毎に分析することによって、所定の周波数を基準として振動周波数を時系列的に変調させる
図4に示すような情報を取得することができる。
【0061】
次に、FM情報から周波数変調正弦波(FM波)を生成する。ここで、FM波は、上記更新周期毎に取得されるFM情報に応じた周波数で変位する
図4に示すような正弦波である。
【0062】
そして、AM情報をFM波に掛け合わせることによって、AMFM波を生成する。ここで、AMFM波は、上記更新周期毎に取得されるFM情報に応じた周波数、かつ、上記更新周期毎に取得されるAM情報に応じた振幅で変位する
図4に示すような波形を有する。そして、生成されたAMFM波を示す振動波形データは、メモリ37内に設定された振動波形データバッファに格納される。このように生成されたAMFM波のデューティ比に対応したビットパターンを示す振動制御信号を生成することによって、AMFM波で示される周波数および振幅でアクチュエータ30を振動させることができる。
【0063】
なお、情報処理装置2と端末装置3との間の通信データ量の削減のために、情報処理装置2から送信される振動指示データは、上記一定の更新周期より長い周期毎に送信されてもよい。例えば、情報処理装置2から同じ振動値による振動指示が続く場合、当該同じ振動値で振動することを示す振動指示データの送信を割愛して、送信周期を相対的に長く(例えば、0.5sec毎)してもよい。後述により明らかとなるが、端末装置3側では、振動指示データに基づいて生成された振動波形データの残量が所定の閾値未満となった場合、最後に受信した振動指示データに基づいた振動波形データを追加する処理を行っているため、上記送信周期を相対的に長くした場合であっても振動を継続することができる。また、端末装置3が振動しない場合、情報処理装置2から振動指示データを送信しなくてもよいし、振動しないことを示す振動指示データを送信してもよい。
【0064】
このようなAMFM伝送方式で振動指示データを送信することによって、以下のような効果を期待することができる。第1の効果として、振動波形データをそのまま送信する方式、振動波形データのサンプリングレートを落として送信する方式、振動波形データを所定の方式で圧縮して送信する方式と比較して、振動指示データを送信する際のデータ通信量を削減することができる。第2の効果として、送信されたAMFM符号データをデコードする処理負荷が相対的に低いため、リアルタイムにデコード処理してアクチュエータ30の振動制御に繋げることができる。第3の効果として、振動を制御するパラメータが周波数および振幅となるため、振動素材を生成する作業が簡素化することができる。第4の効果として、AMFM伝送方式で制御する振動周波数をアクチュエータ30の共振周波数付近に設定することによって、相対的に強い(電力効率の良い)振動をユーザに与えることができる。なお、これらの効果を期待しない場合、AMFM伝送方式とは異なる伝送方式で振動指示データを端末装置3へ送信してもかまわない。
【0065】
また、上述したAMFM伝送方式では、周波数帯域毎にAMFM符号データを送信してもよい。例えば、AMFM符号データは、振動を変調する一定の更新周期で複数の周波数帯域毎に情報処理装置2から送信され、周波数帯域毎の振動の振幅および周波数更新コマンドとして機能する。例えば、低周波数帯域(例えば、160Hz帯)を対象としたAMFM符号データと、高周波数帯域(例えば、320Hz帯)を対象としたAMFM符号データとの組が、上記振動指示データとして情報処理装置2から送信される。
【0066】
低周波数帯域を対象としたAMFM符号データは、上述した処理と同様に、所定の符号化テーブルを用いてデコードされることによって、AM情報およびFM情報が取り出され、FM情報からFM波が生成される。そして、低周波数帯域を対象としたAM情報をFM波に掛け合わせることによって、低周波数帯域を対象としたAMFM波が生成される。
【0067】
一方、高周波数帯域を対象としたAMFM符号データも、上述した処理と同様に、所定の符号化テーブルを用いてデコードされることによって、AM情報およびFM情報が取り出され、FM情報からFM波が生成される。そして、高周波数帯域を対象としたAM情報をFM波に掛け合わせることによって、高周波数帯域を対象としたAMFM波が生成される。
【0068】
そして、低周波数帯域を対象としたAMFM波と高周波数帯域を対象としたAMFM波とを足し合わせることによって、合成波が生成される。そして、生成された合成波を示す振動波形データは、メモリ37内に設定された振動波形データバッファに格納される。上記合成波は、低周波数帯域を対象としたAMFM情報および高周波数帯域を対象としたAMFM情報を併せ持っているため、複数の周波数帯域に対する周波数の情報および振幅の情報に基づいて変位する振動波形を有する。このように生成された合成波のデューティ比に対応したビットパターンを用いて振動制御信号を生成することによって、合成波で示される周波数および振幅でアクチュエータ30を振動させることができる。
【0069】
このように複数の周波数帯域毎にAMFM伝送方式で振動データを送信する場合、複数の周波数帯域毎の周波数変化および振幅変化を転送することができるため、情報処理装置2から端末装置3へ振動をより正確に伝えることができる。したがって、他の伝送方式と比較してもユーザに与える振動感触を劣化させることなく振動波形データを伝送することが可能となる。
【0070】
次に、
図5〜
図8を参照して、振動波形データバッファに格納された振動波形データから振動制御信号を生成する処理の一例について説明する。本実施例では、振動波形データバッファに格納されている振動波形データ(AMFM波)を順次読み出して、当該振動波形のデューティ比に対応したビットパターンを振動制御信号として生成し、ローパスフィルタ32を介して当該振動制御信号を増幅部31へ出力することによってアクチュエータ30を駆動させる。
【0071】
例えば、
図5に示すような均等ビットパターンの変換テーブルを用いて、振動波形データバッファに格納されている振動波形データを振動制御信号に順次変換される。以下、均等ビットパターンについて説明する。
【0072】
Nビット長の2進数において、m個の「1」およびN−m個の「0」で表される均等ビットパターンを(N,m)−ビットパターンを呼称する(ここで、0≦m≦N)。そして、(N,m)−ビットパターンa_{N,m}をNビット長の2進数で表記した際の、上位から第k桁目のビットをb_{N,m,k}とする(ここで、0≦k≦N−1)。この場合、a_{N,m}は、2進数で
a_{N,m}=b_{N,m,0}b_{N,m,1}・・・b_{N,m,N−1}
と表記される。このとき、b_{N,m,k}を
[km/N]と[(k−1)m/N]とが一致しない場合:b_{N,m,k}=1
[km/N]と[(k−1)m/N]とが一致する場合 :b_{N,m,k}=0
と定義することによって、a_{N,m}は、(N,m)−均等ビットパターンとなる。なお、[x]は、xを越えない最大の整数(すなわち、ガウス記号)を示している。
【0073】
図5は、N=16の場合の均等ビットパターンの例を記載している。例えば、デューティ比25%のデータ列を振動制御信号として出力したい場合、4個の「1」および12個の「0」で表されるデータ列を出力することになるが、4個の「1」および12個の「0」で表される(16,4)−均等ビットパターンは、
a_{16,4}=1000 1000 1000 1000
となる。
【0074】
したがって、
図6に示すように、N=64の場合のデューティ比25%のデータ列は、均等ビットパターンの場合、16進数表記で
{0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88}
となる。一方、一般的なPWMデータ列の場合、16進数表記で
{0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00}
となる。
【0075】
また、デューティ比12.5%のデータ列を振動制御信号として出力したい場合、2個の「1」および14個の「0」で表されるデータ列を出力することになるが、2個の「1」および14個の「0」で表される(16,2)−均等ビットパターンは、
a_{16,2}=1000 0000 1000 0000
となる。
【0076】
したがって、
図7に示すように、N=64の場合のデューティ比12.5%のデータ列は、均等ビットパターンの場合、16進数表記で
{0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}
となる。一方、一般的なPWMデータ列の場合、16進数表記で
{0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00}
となる。
【0077】
図6および
図7から明らかなように、N=64の場合に、均等ビットパターンを用いて振動制御信号のデータ列を生成することによって、「0」および「1」の符号の出現頻度を相対的に均等にすることができる。したがって、
図8に示すように、均等ビットパターンを用いた振動制御信号から生成されるアナログ波形のノイズを低減することができ、安定したアナログ波形を増幅部31へ出力することができる。このようにノイズが低減されたアナログ波形を出力することによって、意図した振動をアクチュエータ30から生成することができる。また、
図6に示したデューティ比25%(サンプル値が0.25)の場合、PWMデータ列では0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00が出力されるが、均等ビットパターンでは0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88が出力される。これは、均等ビットパターンを用いることによって、PWMのキャリア周波数を16倍高めることと同様の効果が得られることを示している。さらに、このような均等ビットパターンに変換した振動制御信号を用いる場合、I2Sプロトコルで用いられるデータラインから当該振動制御信号を出力して、ローパスフィルタ32によってアナログ値に変換することによって、当該アナログ値をPWM出力として用いることができる。したがって、均等ビットパターンに変換した振動制御信号を用いることによって、高コストのI2Sアンプを用いることなく低コストのアナログアンプによって増幅部31を構成することができる。
【0078】
次に、
図9を参照して、情報処理装置2および端末装置3においてデータを取り扱う手順の一例について説明する。なお、
図9は、情報処理装置2および端末装置3においてデータが取り扱われる手順の一例を示す図である。
【0079】
図9において、情報処理装置2は、端末装置3を振動させる場合、当該振動の生成を指示するためのAMFM符号データを振動指示データとして生成し、端末装置3へ送信する。例えば、情報処理装置2では、指示したいオリジナルの振動波形データが準備される。そして、複数の周波数帯域毎にAMFM符号データを送信する場合、情報処理装置2は、当該周波数帯域毎のバンドパスフィルタをそれぞれ通して各周波数帯域成分の振動波形データをそれぞれ生成し、各周波数帯域における当該振動波形のエンベロープ波形をそれぞれ生成する。また、情報処理装置2は、周波数帯域毎の振動波形データの周波数分析結果を所定の符号化テーブルを用いて符号化することによって各周波数帯域における周波数変化を示すFM情報をそれぞれ生成する。そして、情報処理装置2は、周波数帯域毎にエンベロープ波形の概形およびFM情報を符号化することによって、AMFM符号データを生成する。例えば、情報処理装置2のCPU21は、生成されたエンベロープ波形の概形およびFM情報に基づいて、周波数帯域成分毎の振幅の変化量および周波数の変化量をそれぞれ算出する。また、情報処理装置2のCPU21は、所定の符号化テーブルに基づいて、算出された振幅の変化量および周波数の変化量をエンコードすることによって、所定の振動長さ分に対応するAMFM符号データを周波数帯域毎に生成して端末装置3へ送信する。なお、上述したAMFM符号データをエンコードする処理は、情報処理装置2におけるオフライン処理において、予め分析して用意されていてもよい。
【0080】
情報処理装置2から端末装置3へ指示される振動時間は、振動指示データの送信周期に基づいて設定されるが、端末装置3の振動状況に応じて変化させることができる。例えば、情報処理装置2は、時間0ms〜15ms(例えば、端末装置3が生成する振動波形データの0〜60サンプル分に相当)の間で、端末装置3へ指示する振動時間を設定することができる。また、情報処理装置2から端末装置3へは、所定の送信周期毎(例えば、5ms毎)に振動指示データが生成されて送信され、振動を停止させる際は当該振動の停止を示すデータ(例えば、振幅が0となる振動を示すデータ)を送信して、以降の振動指示データの送信を停止する。なお、端末装置3内において所定の条件が満たされた場合に振動波形データを追加する処理が自動的に行われている場合、情報処理装置2から端末装置3へ振動指示データを送信する送信周期を指示可能な振動時間の最長時間より長く(例えば、0.5s)するとともに、指示する振動の振幅および/または周波数が変化する場合に当該変化を示す振動指示データを情報処理装置2から送信してもよい。ここで、指示する振動の振幅および/または周波数が変化する場合に送信される振動指示データは、上記送信周期とは別のタイミングで端末装置3へ送信されてもよい。
【0081】
端末装置3のCPU21は、情報処理装置2から振動指示データ(AMFM符号データ)を受信することに応じて、レポートデータを情報処理装置2へ送信する。例えば、CPU21は、端末装置3における振動状況を示す情報の一例として、レポートデータ送信時点において、メモリ37内に設定された振動波形データバッファ内に格納されている振動波形データの残量を取得する。また、CPU21は、前回のレポートデータ送信から今回のレポートデータ送信までの間に、振動波形データバッファ内に格納されている振動波形データの残量が所定量未満になる状態となったか否かを示すデータ(残量不足フラグデータ)を取得する。そして、CPU21は、振動波形データの残量および振動波形データの残量が所定量未満となったか否かを示すデータを少なくとも含むレポートデータを生成し、当該レポートデータを情報処理装置2へ送信する。なお、レポートデータは、情報処理装置2から振動指示データを受信した時点以外のタイミングでも端末装置3から送信されてもよい。例えば、振動指示データを受信とは関連しない一定周期毎にレポートデータを送信してもよいし、端末装置3から送られる他のデータ(例えば、操作部31に対する操作データ、加速度センサ35の検出データ、ジャイロセンサ35の検出データ等)にレポートデータを含ませて送信してもよい。
【0082】
そして、端末装置3のCPU21は、受信したAMFM符号データをデコードして振動波形データを生成し、当該振動波形データをメモリ37内に設定された振動波形データバッファに格納する。例えば、CPU21は、振動波形データの20サンプル分に相当するAMFM符号データを受信した場合、当該AMFM符号データを20サンプル分の振動波形データ(AMFM波データ)にデコードして、振動波形データバッファに既に格納されている振動波形データの新たなデータとして追加する。なお、CPU21は、振動波形データの0サンプル分に相当する振動指示データを受信した場合、上記デコード処理および振動波形データ格納処理をスキップする。
【0083】
振動波形データバッファに格納されている振動波形データは、CPU21によって順次読み出されて振動制御信号に変換されて振動出力部(ローパスフィルタ32)へ出力される。このとき、振動波形データバッファに格納されている振動波形データはFIFO方式で読み出され、読み出されたデータは振動波形データバッファから順次消去される。
【0084】
なお、上述した例では、レポートデータに含まれる端末装置3における振動状況を示す情報の一例として、振動波形データバッファ内に格納されている振動波形データの残量を示すデータを用いたが、他のデータを用いてもよい。例えば、振動波形データバッファにおけるデータ空き容量を示すデータ、振動波形データバッファ内から消費されたデータ量を示すデータ、振動波形データバッファの振動波形データの量が0となるまでの残り時間を示すデータが、レポートデータに含まれる振動状況を示す情報でもよい。また、レポートデータ送信時点で端末装置3が振動しているか否かを示すデータやレポートデータ送信時点で端末装置3が振動している振動パラメータ(例えば、振動の振幅や周波数)を示すデータが、レポートデータに含まれる振動状況を示す情報でもよい。さらに、端末装置3において用いられているクロックの値(例えば、クロック周波数)を示すデータが、レポートデータに含まれる振動状況を示す情報でもよい。例えば、情報処理装置2のクロックと端末装置3のクロックとがずれている場合、情報処理装置2が指示した振動時間に対して実際に端末装置3が振動する時間が短くなるまたは長くなることが考えられる。このようなクロックずれによる振動状況のずれは、情報処理装置2のクロック値と端末装置3のクロック値とを比較することによって推定することが可能であるため、端末装置3において用いられているクロックの値を端末装置3における振動状況を示す情報として用いることが可能となる。
【0085】
レポートデータを受信した情報処理装置2は、当該レポートデータに含まれている端末装置3における振動状況を示す情報に基づいて、次に送信する振動指示データにおける振動時間を調整する。例えば、振動波形データバッファ内に格納されている振動波形データの残量が想定される量より多い場合、CPU21は、次に送信する振動指示データにおける振動時間を短く調整する。また、振動波形データバッファ内に格納されている振動波形データの残量が想定される量より少ない場合、CPU21は、次に送信する振動指示データにおける振動時間を長く調整する。さらに、振動波形データバッファ内に格納されている振動波形データの残量が所定量未満になる状態が想定外のタイミングで生じている場合、次に送信する振動指示データにおける振動時間を長く調整したり、次の振動指示データの送信タイミングが早くなるように調整したりする。
【0086】
一方、端末装置3のCPU36は、振動波形データバッファ内に格納されている振動波形データの残量を一定周期毎に取得して、振動波形データの残量が所定量未満であるか否かを判定している。そして、振動波形データの残量が所定量未満である場合、CPU36は、振動波形データバッファに振動波形データを追加する振動波形データ追加処理を行う。例えば、CPU36は、振動波形データの残量が10サンプル未満となった場合、最後に受信したAMFM符号データを再度デコードして20サンプル分の振動波形データを振動波形データバッファに追加する。このような振動波形データ追加処理を行うことによって、端末装置3が情報処理装置2から一時的に振動指示データが受信できない場合であっても、振動を途切れさせることなく端末装置3を振動させることができる。また、このような振動波形データ追加処理を行うことによって、情報処理装置2が振動指示データを送信しなくても、最後に送信した振動指示データに基づいた振動を端末装置3が継続することができる。つまり、端末装置3側で振動波形データを自動的に追加する処理を行うことによって、情報処理装置2が端末装置3に送信する振動指示データの通信量を削減することができる。
【0087】
なお、端末装置3のCPU36は、振動波形データの残量が所定量未満、かつ、情報処理装置2から振動指示データの受信が一定時間以上途切れた異常状態である場合、フェードアウトデータを振動波形データバッファに追加する振動波形データ追加処理を行う。ここで、フェードアウトデータは、最後に受信したAMFM符号データを再度デコードした振動波形の振幅を漸減的に小さくする振動波形データであり、フェードアウトデータに基づいて端末装置3を振動させることによって、端末装置3に生じる振動が徐々に小さくなって停止する。また、振動指示データの受信異常を判定するための上記一定時間は、情報処理装置2が振動指示データを送信する最大周期(例えば、0.5sec)より長く設定すればよく、例えば1.0secに設定してもよい。
【0088】
また、上述した例では、振動波形データバッファ内に格納されている振動波形データの残量が所定量未満である場合に振動波形データを振動波形データバッファに追加しているが、振動波形データバッファ内に格納されている振動波形データの状況が他の条件を満たす場合に所定の振動波形データを振動波形データバッファに追加してもよい。第1の例として、振動波形データバッファ内に格納されている振動波形データが消費される変化量が所定量以上である場合に、最後に受信したAMFM符号データを再度デコードした所定量の振動波形データが振動波形データバッファに追加される。第2の例として、振動波形データバッファ内にさらに格納可能な振動波形データの量が所定量以上である場合に、最後に受信したAMFM符号データを再度デコードした所定量の振動波形データが振動波形データバッファに追加される。第3の例として、振動波形データバッファ内に格納されている振動波形データが示す振幅が所定範囲外である場合(例えば、アクチュエータ30が振動可能な振幅未満の場合、ユーザが認識可能な振動振幅未満の場合、アクチュエータ30が許容する振幅を越える場合等)、当該所定範囲外を示す振動波形データが振動波形データバッファから削除される。そして、上記削除対象となった振動波形データが示す振幅が上記所定範囲内の振幅に変換された上で、当該変換後の振動波形データが振動波形データバッファに追加される。第4の例として、振動波形データバッファ内に格納されている振動波形データが示す周波数が所定範囲外である場合(例えば、アクチュエータ30が振動可能な周波数以外の場合、人間が振動を感じることができるとされる周波数帯域(例えば、0−1000Hz)外である場合等)、当該所定範囲外を示す振動波形データが振動波形データバッファから削除される。そして、上記削除対象となった振動波形データが示す周波数が上記所定範囲内の周波数に変換された上で、当該変換後の振動波形データが振動波形データバッファに追加される。
【0089】
次に、振動指示データ(AMFM符号データ)の送信元となる情報処理装置2において行われる振動制御処理の詳細を説明する。まず、
図10を参照して、情報処理装置2の振動制御処理において用いられる主なデータについて説明する。
図10は、振動制御処理を行う際に、情報処理装置2のメモリ22に記憶される主なデータおよびプログラムの一例を示す図である。
【0090】
図10に示すように、情報処理装置2のメモリ22のデータ記憶領域には、AMFM符号データDa、送信データDb、受信データDc、振動時間データDd等が記憶される。なお、情報処理装置2のメモリ22には、
図10に示すデータの他、実行するアプリケーションで用いるデータ等、処理に必要なデータ等が記憶されてもよい。また、情報処理装置2のメモリ22のプログラム記憶領域には、振動制御プログラムを構成する各種プログラム群Paが記憶される。
【0091】
AMFM符号データDaは、情報処理装置2において予め準備されているオリジナルの振動波形データに基づいて符号化されたAMFM符号データ(振動指示データ)を示すデータである。
【0092】
送信データDbは、端末装置3へ送信するための送信データを示すデータである。受信データDcは、端末装置3から受信した受信データを示すデータである。
【0093】
振動時間データDdは、振動指示データとして指示する振動時間を示すデータである。
【0094】
次に、
図11を参照して、情報処理装置2において行われる振動制御処理の一例について説明する。なお、
図11は、情報処理装置2において実行される振動制御処理の一例を示すフローチャートである。ここで、
図11に示すフローチャートにおいては、情報処理装置2における処理のうち、振動指示データを生成して送信する処理について主に説明し、これらの処理と直接関連しない他の処理については詳細な説明を省略する。また、
図11では、情報処理装置2のCPU21が実行する各ステップを「S」と略称する。
【0095】
上記振動制御処理を行う際、CPU21は、メモリ22等を初期化し、プログラム記憶部23から振動制御プログラムをメモリに読み込む。そして、CPU21によって当該振動制御プログラムの実行が開始される。
図11に示すフローチャートは、以上の処理が完了した後に行われる処理を示すフローチャートである。
【0096】
なお、
図11に示すフローチャートにおける各ステップの処理は、単なる一例に過ぎず、同様の結果が得られるのであれば、各ステップの処理順序を入れ替えてもよいし、各ステップの処理に加えておよび/または代えて別の処理が実行されてもよい。また、本実施例では、上記フローチャートの各ステップの処理をCPU21が実行するものとして説明するが、上記フローチャートにおける一部のステップの処理をCPU21が実行し、その他のステップの処理をCPU21以外のプロセッサや専用回路が実行するようにしてもよく、上記フローチャートにおける全部のステップの処理をCPU21以外のプロセッサや専用回路が実行するようにしてもよい。
【0097】
図11において、CPU21は、初期設定を行い(ステップ61)、次のステップに処理を進める。例えば、CPU21は、端末装置3へ振動指示データ(AMFM符号データ)を送信するための初期設定を行う。一例として、CPU21は、AMFM符号データを送信する周波数帯域の数、各周波数帯域の範囲、AMFM符号データを送信する周期、振動指示する振動時間、符号化に用いる符号化テーブル等を初期設定する。
【0098】
次に、CPU21は、端末装置3に対して振動出力指示を開始するか否かを判定する(ステップ62)。例えば、情報処理装置2において実行されているアプリケーションにおいて、端末装置3が振動出力を開始するタイミングである場合、CPU21は、上記ステップ62において肯定判定する。そして、CPU21は、端末装置3に対して振動出力指示を開始する場合、ステップ63に処理を進める。一方、CPU21は、端末装置3に対して振動出力指示をしない場合、ステップ71に処理を進める。
【0099】
ステップ63において、CPU21は、端末装置3へ送信するための符号データを生成し、次のステップに処理を進める。上述したように、CPU21は、AMFM符号データを生成する対象とするオリジナルの振動波形データを用いて、送信する周波数帯域毎のエンベロープ波形およびFM情報を生成し、所定の符号化テーブルに基づいて振動振幅の変化量および振動周波数の変化量をエンコードすることによって、所定の振動時間分に対応するAMFM符号データを周波数帯域毎に生成して、AMFM符号データDaに格納する。
【0100】
次に、CPU21は、AMFM符号データDaに格納されているAMFM符号データを、他の送信データとともに送信データDbに格納する。そして、CPU21は、通信部24を介して送信データDbに格納されている送信データを端末装置3へ送信して(ステップ64)、次のステップに処理を進める。
【0101】
なお、上述したAMFM符号データをエンコードする処理(すなわち、上記ステップ63の処理)は、情報処理装置2におけるオフライン処理において予め処理されてAMFM符号データDaとして格納されていてもよいし、振動を生成する要請に応じて、リアルタイムに行われてもよい。
【0102】
次に、CPU21は、端末装置3からレポートデータを受信したか否かを判定する(ステップ65)。そして、CPU21は、端末装置3からレポートデータを受信した場合、当該受信したレポートデータを受信データDcに格納して、ステップ66に処理を進める。一方、CPU21は、端末装置3からレポートデータを受信していない場合、ステップ67に処理を進める。
【0103】
ステップ66において、CPU21は、上記ステップ65で受信したレポートデータに基づいて、次に端末装置3に対して振動指示する振動時間を決定し、ステップ67に処理を進める。例えば、CPU21は、レポートデータに含まれている端末装置3における振動状況を示す情報(例えば、振動波形データバッファ内における振動波形データの残量や振動波形データが自動的に追加されたか否かを示すデータ)に基づいて、次に送信する振動指示データにおける振動時間を決定する。一例として、振動波形データの残量が想定される量より多い場合、CPU21は、次に送信する振動指示データにおける振動時間を相対的に短い時間(例えば、前回振動指示した振動時間より短い時間や、標準的に予め定められている時間より短い時間等)に設定して、振動時間データDdを更新する。また、振動波形データの残量が想定される量より少ない場合、CPU21は、次に送信する振動指示データにおける振動時間を相対的に長い時間(例えば、前回振動指示した振動時間より長い時間や、標準的に予め定められている時間より長い時間等)に設定して、振動時間データDdを更新する。さらに、振動波形データバッファに振動波形データが想定外のタイミングで端末装置3において追加されている場合、次に送信する振動指示データにおける振動時間を相対的に長い時間に設定して振動時間データDdを更新したり、次の振動指示データの送信タイミングが早くなるように調整したりする。
【0104】
ステップ67において、CPU21は、振動指示データを端末装置3へ送信するタイミングか否かを判定する。そして、CPU21は、振動指示データを端末装置3へ送信するタイミングである場合、ステップ68に処理を進める。一方、CPU21は、振動指示データを端末装置3へ送信するタイミングでない場合、ステップ70に処理を進める。ここで、上述したように、情報処理装置2が端末装置3へ振動指示データを送信するタイミングは、端末装置3が生成する振動波形データの所定サンプル分に相当する所定の送信周期毎でもいいし、指示する振動の振幅および/または周波数が変化するタイミングでもよい。
【0105】
ステップ68において、CPU21は、振動時間データDdが示す振動時間に基づいて、端末装置3へ送信するための符号データを生成し、次のステップに処理を進める。例えば、CPU21は、AMFM符号データを生成する対象とするオリジナルの振動波形データを用いて、振動時間データDdが示す振動時間に対応する振動長さ分に対応するAMFM符号データを上記ステップ63と同様に生成して、AMFM符号データDaに格納する。なお、上記ステップ68において、CPU21は、端末装置3の振動を停止させる場合、振動の停止を示すデータ(例えば、振幅が0となる振動を示すAMFM符号データ)を生成してもよい。
【0106】
次に、CPU21は、AMFM符号データDaに格納されているAMFM符号データを、他の送信データとともに送信データDbに格納する。そして、CPU21は、通信部24を介して送信データDbに格納されている送信データを端末装置3へ送信して(ステップ69)、ステップ70に処理を進める。
【0107】
ステップ70において、端末装置3に対する振動出力指示を終了するか否かを判断する。例えば、上記ステップ68において、振動の停止を示すデータが生成されている場合、CPU21は、上記ステップ70において肯定判定する。そして、CPU21は、端末装置3に対して振動出力指示を終了する場合、ステップ71に処理を進める。一方、CPU21は、端末装置3に対する振動出力指示を継続する場合、上記ステップ65に戻って処理を繰り返す。
【0108】
ステップ71において、CPU21は、処理を終了するか否かを判断する。処理を終了する条件としては、例えば、処理を終了させる条件が満たされたことや、ユーザが処理を終了する操作を行ったこと等がある。CPU21は、処理を終了しない場合に上記ステップ62に戻って処理を繰り返し、処理を終了する場合に当該フローチャートによる処理を終了する。
【0109】
次に、AMFM符号データの転送先となる端末装置3において行われる振動出力処理について説明する。まず、
図12を参照して、端末装置3の振動出力処理において用いられる主なデータについて説明する。
図12は、振動出力処理を行う際に、端末装置3のメモリ37に記憶される主なデータおよびプログラムの一例を示す図である。
【0110】
図12に示すように、メモリ37のデータ記憶領域には、振動波形データバッファDm、受信データDn、送信データDo、振動波形データDp、振動制御信号データDq、振動出力フラグデータDr、残量不足フラグデータDs、およびレポートデータDt等が記憶される。なお、メモリ37には、
図12に示すデータの他、実行するアプリケーションで用いるデータ等、処理に必要なデータ等が記憶されてもよい。また、メモリ37のプログラム記憶領域には、振動出力プログラムを構成する各種プログラム群Pbが記憶される。例えば、各種プログラム群Pbは、振動指示データ(AMFM符号データ)を受信するための受信プログラム、AMFM符号データをデコードするためのデコードプログラム、振動制御信号を生成するための振動制御信号生成プログラム等が含まれる。
【0111】
振動波形データバッファDmは、CPU36におけるデコード処理によって生成された振動波形データを一時的に溜めておくデータ領域である。
【0112】
受信データDnは、情報処理装置2から受信した受信データを示すデータである。送信データDoは、情報処理装置2へ送信する送信データを示すデータである。
【0113】
振動波形データDpは、情報処理装置2から受信した振動指示データ(AMFM符号データ)をデコードすることによって生成された振動波形を示すデータである。振動制御信号データDqは、振動出力部(ローパスフィルタ32)へ出力する振動制御信号を示すデータである。
【0114】
振動出力フラグデータDrは、端末装置3を振動させる処理が行われている場合にオンに設定される振動出力フラグを示すデータである。残量不足フラグデータDsは、振動波形データバッファDmへ振動波形データを自動的に追加する処理が行われた場合にオンに設定される残量不足フラグを示すデータである。
【0115】
レポートデータDtは、端末装置3における振動の状況を情報処理装置2へ通知するための情報(レポートデータ)を示すデータである。
【0116】
次に、
図13を参照して、端末装置3において行われる振動出力処理の一例について説明する。なお、
図13は、端末装置3において実行される振動出力処理の前半の一例を示すフローチャートである。
図14は、端末装置3において実行される振動出力処理の後半の一例を示すフローチャートである。ここで、
図13および
図14に示すフローチャートにおいては、端末装置3における処理のうち、情報処理装置2から振動指示データを受信して振動波形データを生成する処理について主に説明する。なお、端末装置3における振動出力部で用いられる振動制御信号は、振動波形データバッファDmに格納された振動波形データがFIFO方式で適宜所定の周期で読み出されて符号化されて出力され、読み出された振動波形データは振動波形データバッファDmから順次消去されるものとする。また、これらの処理と直接関連しない他の処理については詳細な説明を省略する。また、
図13および
図14では、端末装置3のCPU36が実行する各ステップを「S」と略称する。
【0117】
端末装置3のCPU36は、メモリ37等を初期化し、端末装置3のプログラム記憶部38から振動出力プログラムをメモリ37に読み込む。そして、CPU36によって当該振動出力プログラムの実行が開始される。
図13および
図14に示すフローチャートは、以上の処理が完了した後に行われる処理を示すフローチャートである。
【0118】
なお、
図13および
図14に示すフローチャートにおける各ステップの処理は、単なる一例に過ぎず、同様の結果が得られるのであれば、各ステップの処理順序を入れ替えてもよいし、各ステップの処理に加えておよび/または代えて別の処理が実行されてもよい。また、本実施例では、上記フローチャートの各ステップの処理を端末装置3のCPU36が実行するものとして説明するが、上記フローチャートにおける一部のステップの処理をCPU36が実行し、その他のステップの処理をCPU36以外のプロセッサや専用回路が実行するようにしてもよく、上記フローチャートにおける全部のステップの処理をCPU36以外のプロセッサや専用回路が実行するようにしてもよい。
【0119】
図13において、CPU36は、初期設定を行い(ステップ81)、次のステップに処理を進める。例えば、CPU36は、情報処理装置2から振動指示データ(AMFM符号データ)を受信するための初期設定を行う。一例として、CPU36は、AMFM符号データを受信する周波数帯域の数、各周波数帯域の範囲、AMFM符号データを受信する周期、デコード処理に用いる符号化テーブル等を設定して、各パラメータを初期設定する。また、CPU36は、振動波形データバッファDmのデータ残量を制御するための処理、情報処理装置2へレポートデータを送信するための処理、振動出力部へ振動制御信号を出力するための処理等に用いる各パラメータを初期設定する。なお、上記初期設定において設定するパラメータについては、情報処理装置2から受信した受信データに記述された情報に基づいて設定してもよい。
【0120】
次に、CPU36は、情報処理装置2からデータを受信する受信処理を行い(ステップ82)、次のステップに処理を進める。例えば、CPU36は、通信部39を介して情報処理装置2から受信したデータを受信データDnとして格納する。
【0121】
次に、CPU36は、上記ステップ82で受信した受信データが振動出力を指示する振動指示データであるか否かを判定する(ステップ83)。そして、CPU36は、受信データが振動指示データである場合、ステップ84に処理を進める。一方、CPU36は、受信データが振動指示データでない場合や受信データを受信していない場合、ステップ91(
図14参照)に処理を進める。
【0122】
ステップ84において、CPU36は、振動出力フラグをオンに設定して、次のステップに処理を進める。例えば、CPU36は、振動出力フラグデータDrが示す振動出力フラグをオフの場合、当該振動出力フラグをオンに更新する。
【0123】
次に、CPU36は、振動波形データの残量を検出し(ステップ85)、次のステップに処理を進める。例えば、CPU36は、振動波形データバッファDmに格納されている振動波形データの残量を検出する。なお、後述により明らかとなるが、振動波形データバッファDmには、振動指示データのデコード処理、追加データデコード処理、およびフェードアウトデータデコード処理によって生成された振動波形データが追加格納される。また、上述したように、振動波形データバッファDmに格納されている振動波形データは、振動出力部へ出力する振動制御信号が所定の周期毎に生成されることに応じて、読み出された振動波形データが振動波形データバッファDmから順次消去される。つまり、上記ステップ85においては、振動波形データバッファDmに追加格納される振動波形データの量と振動波形データバッファDmから読み出されて消去される振動波形データの量とのバランスを検出していることになる。
【0124】
次に、CPU36は、上記ステップ85において検出した振動波形データの残量を記述したレポートデータを生成し、通信部39を介して当該レポートデータを情報処理装置2へ送信して(ステップ86)、次のステップに処理を進める。ここで、CPU36は、残量不足フラグデータDsを参照して残量不足フラグがオンに設定されている場合、振動波形データバッファDmへ振動波形データを自動的に追加する処理が行われたことを示すデータも上記レポートデータに記述して、情報処理装置2へ送信する。
【0125】
次に、CPU36は、残量不足フラグデータDsが示す残量不足フラグがオンに設定されている場合、当該残量不足フラグをオフに更新して(ステップ87)、次のステップに処理を進める。
【0126】
次に、CPU36は、上記ステップ82で受信したAMFM符号データをデコードする処理を行い(ステップ88)、次のステップに処理を進める。例えば、CPU36は、上記ステップ82で受信したAMFM符号データからAM情報およびFM情報を取り出し、取り出したFM情報から周波数変調正弦波(FM波)を生成して、AM情報に応じた振幅で変位するAMFM波を生成する。そして、CPU36は、受信したAMFM符号データの振動長さ分のAMFM波を周波数帯域毎に生成し、周波数帯域毎のAMFM波を足し合わせることによって合成波を生成して、当該合成波を示す振動波形データを振動波形データDpとして格納する。
【0127】
次に、CPU36は、上記ステップ88においてデコードされた振動波形データをFIFO方式で振動波形データバッファDmに格納し(ステップ89)、ステップ91(
図14参照)に処理を進める。
【0128】
図14に進み、ステップ89において、CPU36は、振動出力フラグデータDrが示す振動出力フラグがオンであるか否かを判定する。そして、CPU36は、振動出力フラグがオンである場合、ステップ92に処理を進める。一方、CPU36は、振動出力フラグがオフである場合、ステップ103に処理を進める。
【0129】
ステップ92において、CPU36は、振動出力処理を終了するか否かを判定する。例えば、CPU36は、情報処理装置2から受信した振動指示データが振動を停止させることを示すデータ(例えば、振幅が0となる振動を示すデータ)である場合、振動出力処理を終了すると判定する。そして、CPU36は、振動出力処理を終了しない場合、ステップ93に処理を進める。一方、CPU36は、振動出力処理を終了する場合、ステップ102に処理を進める。
【0130】
ステップ93において、CPU36は、振動波形データの残量を検出し、次のステップに処理を進める。なお、CPU36は、上記ステップ93でも振動波形データバッファDmに格納されている振動波形データの残量を検出するが、上記ステップ85における処理と同様であるため、ここでは詳細な説明を省略する。
【0131】
次に、CPU36は、上記ステップ93において検出した振動波形データの残量が所定量未満であるか否かを判定する(ステップ94)。例えば、CPU36は、振動波形データバッファDmに格納されている振動波形データの残量が10サンプル未満である場合、上記ステップ94において肯定判定する。そして、CPU36は、振動波形データの残量が所定量未満である場合、ステップ95に処理を進める。一方、CPU36は、振動波形データの残量が所定量以上である場合、ステップ103に処理を進める。
【0132】
ステップ95において、CPU36は、情報処理装置2から定期的に送信されている振動指示データの受信が所定時間以内にあったか否かを判定する。例えば、CPU36は、振動指示データを1.0sec以内に受信している場合、上記ステップ95において肯定判定する。そして、CPU36は、振動指示データの受信が所定時間以内にあった場合、ステップ96に処理を進める。一方、CPU36は、振動指示データの受信が所定時間以内にない場合、ステップ99に処理を進める。
【0133】
ステップ96において、CPU36は、追加データデコード処理を行い、次のステップに処理を進める。例えば、CPU36は、受信データDnを参照して最後に受信したAMFM符号データを所定の振動長さ分(例えば、20サンプル分)再度デコードすることによって、振動波形データバッファDmに追加する振動波形データを生成して、振動波形データDpに格納する。なお、AMFM符号データをデコードする処理については、上記ステップ88と同様であるため、ここでは詳細な説明を省略する。
【0134】
次に、CPU36は、上記ステップ95においてデコードされた所定の振動長さ分の振動波形データをFIFO方式で振動波形データバッファDmに追加格納する処理を行い(ステップ97)、次のステップに処理を進める。
【0135】
次に、CPU36は、残量不足フラグデータDsが示す残量不足フラグをオンに更新して(ステップ98)、ステップ103に処理を進める。
【0136】
一方、上記ステップ95において否定判定された場合(すなわち、振動指示データの受信が所定時間以内にない場合)、CPU36は、フェードアウトデータデコード処理を行い、次のステップに処理を進める。例えば、CPU36は、上記ステップ88または上記ステップ96において最後にデコードして生成した振動波形データに基づいて、当該振動波形が示す振幅が漸減的に小さくなって振幅が0となる振動波形を生成し、当該振動波形を示す振動波形データを振動波形データDpに格納する。
【0137】
次に、CPU36は、上記ステップ99において生成された振動波形データをFIFO方式で振動波形データバッファDmに追加格納するフェードアウトデータ追加処理を行い(ステップ100)、次のステップに処理を進める。
【0138】
次に、CPU36は、振動出力フラグデータDrが示す振動出力フラグをオフに更新して(ステップ101)、ステップ103に処理を進める。
【0139】
また、上記ステップ92において肯定判定された場合(すなわち、振動出力処理を終了する場合)、CPU36は、振動出力フラグデータDrが示す振動出力フラグをオフに更新して(ステップ102)、ステップ103に処理を進める。
【0140】
ステップ103において、CPU36は、情報処理装置2へレポートデータを送信するタイミングか否かを判定する。例えば、上記レポートデータは、上記ステップ86とは関連しない一定周期毎にレポートデータを送信してもよいし、端末装置3から送られる他のデータにレポートデータを含ませて送信してもよく、上記ステップ103では現時点が当該周期や他のデータ送信タイミングに相当するか否かが判定される。そして、CPU36は、レポートデータを送信するタイミングである場合、ステップ104に処理を進める。一方、CPU36は、レポートデータを送信するタイミングでない場合、ステップ106に処理を進める。
【0141】
ステップ104において、上記ステップ93において検出した振動波形データの残量を記述したレポートデータを生成し、通信部39を介して当該レポートデータを情報処理装置2へ送信して、次のステップに処理を進める。ここで、CPU36は、残量不足フラグデータDsを参照して残量不足フラグがオンに設定されている場合、振動波形データバッファDmへ振動波形データを自動的に追加する処理(すなわち、上記ステップ96における処理)が行われたことを示すデータも上記レポートデータに記述して、情報処理装置2へ送信する。
【0142】
次に、CPU36は、残量不足フラグデータDsが示す残量不足フラグがオンに設定されている場合、当該残量不足フラグをオフに更新して(ステップ105)、ステップ106に処理を進める。
【0143】
ステップ106において、CPU36は、処理を終了するか否かを判断する。処理を終了する条件としては、例えば、処理を終了させる条件が満たされたことや、ユーザが処理を終了する操作を行ったこと等がある。CPU36は、処理を終了しない場合に上記ステップ82(
図13参照)に戻って処理を繰り返し、処理を終了する場合に当該フローチャートによる処理を終了する。
【0144】
このように、上述した実施例に係る処理では、端末装置3から振動出力状況等を示すレポートデータが情報処理装置2へ送信される。これによって、情報処理装置2は、送信されるレポートデータを用いて適切な振動制御処理を行うことができる。例えば、上記レポートデータに端末装置3が生成する振動波形データの残量が記述されている場合、情報処理装置2は、当該残量に応じた振動長さの振動を示すAMFM符号データ符号データを端末装置3へ送信することが可能となり、適切なデータ量による振動制御が可能となる。
【0145】
また、上述した実施例に係る処理では、振動波形データバッファにおける振動波形データの残量が所定量未満となった場合に端末装置3において自動的に振動波形データが追加される。これによって、端末装置3が情報処理装置2から一時的に振動指示データが受信できない場合であっても、振動を途切れさせることなく端末装置3を振動させることができる。また、情報処理装置2が振動指示データを送信しなくても、最後に送信した振動指示データに基づいた振動を端末装置3が継続することができるため、情報処理装置2が端末装置3に送信する振動指示データの通信量を削減することができる。
【0146】
なお、上述した実施例では、情報処理装置2から送信された振動指示データを端末装置3が受信した場合、端末装置3がレポートデータを情報処理装置2へ送信した後に当該振動指示データのデコードを行っている。これによって、振動波形データバッファDmにおける振動波形データの残量が相対的に少ない状態でレポートデータを作成することができるため、レポートデータによって送信可能なビット数を用いてより詳細な残量を情報処理装置2へ通知することができる。なお、このような効果を期待しない場合、端末装置3は、受信した振動指示データのデコードを行って当該振動指示データに対応する振動波形データを振動波形データバッファDmに格納した後に、当該振動波形データバッファDmにおける振動波形データの残量を示すレポートデータを生成してもよい。
【0147】
また、上述した実施例では、情報処理装置2から端末装置3へ振動波形データを符号化することによって生成される振動指示データを送信しているが、端末装置3へ振動を指示するデータとして他の態様のデータを送信してもよい。例えば、振動波形データをそのまま振動指示データとして送信したり、振動波形データを所定の方式で圧縮したデータを振動指示データとして送信したりしてもよい。
【0148】
また、上述した実施例では、AMFM符号データをデコードすることによって生成される振動波形データを振動波形データバッファDmに格納し、振動出力部に振動波形データバッファDmに格納されている振動波形データを所定のビットパターンに変換することによって出力している。しかしながら、振動波形データバッファDmに格納するデータは、他のデータ形式でもよい。例えば、端末装置3が受信したAMFM符号データをそのまま振動波形データバッファDmに格納し、振動出力部へ出力する際に振動波形データバッファDmに格納されたAMFM符号データをその都度デコードして振動波形データを生成してもよい。また、端末装置3が受信したAMFM符号データをデコードすることによって生成された振動波形データを所定のビットパターンに変換したデータを、振動波形データバッファDmに格納してもよい。
【0149】
また、端末装置3が生成する振動は、振幅および周波数の一方が予め定められた一定値であってもよい。この場合、情報処理装置2は、上記一定値に設定されている振幅および周波数の一方に対する振動指示を行わずに振幅および周波数の他方のパラメータを指示する振動指示データ(すなわち、AM符号データまたはFM符号データ)を端末装置3へ送信すればよい。
【0150】
また、アクチュエータ30は、端末装置3の外部に設けられてもよい。例えば、端末装置3を操作するユーザの身体(例えば、頭部や足)に装着可能な外部装置内や他方の手で操作可能な外部装置内にアクチュエータ30を設けてもよい。この場合、端末装置3と外部装置との間は無線通信されてもよいし有線通信されてもよい。
【0151】
また、上述した実施例では、端末装置3にアクチュエータ30が1つ設けられている例を用いたが、ユーザに振動を与えるアクチュエータが端末装置3内部および/または端末装置3の外部に複数設けられてもよい。一例として、端末装置3内の上下または左右や、一方の手で操作する端末装置3内と他方の手で操作する外部装置内とに一対のアクチュエータを設けてもよい。この場合、CPU36は、1つの符号データからそれぞれのアクチュエータを駆動するための振動制御信号をそれぞれ生成してもいいし、それぞれ別の符号データ(例えば、一方のアクチュエータ用の符号データと他方のアクチュエータ用の符号データ)からそれぞれのアクチュエータを駆動するための振動制御信号をそれぞれ生成してもよい。後者の場合、情報処理装置2は、一方のアクチュエータ用の符号データと他方のアクチュエータ用の符号データとをセットとした振動指示データを端末装置3へ送信する。
【0152】
例えば、アクチュエータ30が複数設けられており、それぞれのアクチュエータ30から独立した振動を発生させる場合、アクチュエータ30毎に振動を制御するための振動制御信号がCPU36から出力される。この場合、ユーザの皮膚における異なる2点(一例として、端末装置3を把持するユーザの一方の手と外部装置を把持する他方の手)に刺激を与えることによって擬似的な1点の刺激を知覚させるファントムセンセーションを利用して、当該アクチュエータが設けられている位置以外の場所が振動源であるように擬似的に知覚させる振動を端末装置3のユーザに与えることも可能となる。
【0153】
また、上述した実施例では、振動指示データを送信する情報処理装置2から端末装置3へ当該振動指示データを無線で送信する例を用いたが、情報処理装置2から端末装置3へ当該振動指示データを有線で送信してもよい。
【0154】
また、振動指示データの送信先となる端末装置3は、ユーザが把持して操作する操作装置(いわゆる、コントローラ)でなくてもよく、携帯ゲーム機、携帯電話機、PDA等のデバイスであってもよい。また、情報処理装置2と無線接続される端末装置3は、複数(例えば、複数のユーザがそれぞれ把持する複数のコントローラや1人のユーザが両手にそれぞれ把持する一対のコントローラ)であってもよく、情報処理装置2とアクチュエータ30をそれぞれ内蔵した複数の端末装置3から構成されるシステム(例えば、ゲームシステム)でもよい。この場合、情報処理装置2から複数の端末装置3へ振動波形データを生成するための振動指示データが無線通信でそれぞれ送信されることによって、それぞれの端末装置3において当該振動指示データに応じた振動を生成することができる。なお、情報処理装置2では振動波形データを符号化する処理は行わず、情報処理装置2にインストールされるプログラム等に振動波形データが予め符号化されたデータが含まれていてもよい。この場合、情報処理装置2は、予め符号化された符号データを必要に応じて端末装置3に出力し、端末装置3において当該符号データをデコードすることになる。なお、情報処理装置2と単一または複数の端末装置3との間の通信は、無線であってもよいし、有線であってもよい。
【0155】
また、上述した説明では振動制御処理を情報処理装置2で行い、振動出力処理を端末装置3で行う例を用いたが、上記処理における処理ステップの少なくとも一部を他の装置で行ってもかまわない。例えば、情報処理装置2や端末装置3がさらに他の装置(例えば、別のサーバ、他のゲーム装置、他の携帯端末)と通信可能に構成されている場合、上記処理における処理ステップは、さらに当該他の装置が協働することによって実行してもよい。このように、上記処理における処理ステップの少なくとも一部を他の装置で行うことによって、上述した処理と同様の処理が可能となる。また、上述した処理は、少なくとも1つの情報処理装置により構成される情報処理システムに含まれる1つのプロセッサまたは複数のプロセッサ間の協働により実行されることが可能である。なお、少なくとも1つの情報処理装置により構成される情報処理システムは、複数の情報処理装置により構成される情報処理システム(いわゆる、複数の装置の複合体で構成されるシステム)と1つの情報処理装置によって構成される情報処理システム(いわゆる、複数のユニットが構成された単独の装置で構成されるシステム)とが考えられる。また、上記実施例においては、情報処理装置2や端末装置3の制御部が所定のプログラムを実行することによって、上述したフローチャートによる処理が行われたが、情報処理装置2や端末装置3が備える専用回路によって上記処理の一部または全部が行われてもよい。
【0156】
ここで、上述した変形例によれば、いわゆるクラウドコンピューティングのシステム形態や分散型の広域ネットワークおよびローカルネットワークのシステム形態でも本実施例を実現することが可能となる。例えば、分散型のローカルネットワークのシステム形態では、据置型の情報処理装置(据置型のゲーム装置)と携帯型の情報処理装置(携帯型のゲーム装置)との間で上記処理を協働により実行することも可能となる。なお、これらのシステム形態では、上述した処理の各ステップの処理をどの装置で行うかについては特に限定されず、どのような処理分担をしたとしても本実施例を実現できることは言うまでもない。
【0157】
また、上述した情報処理で用いられる処理順序、設定値、判定に用いられる条件等は、単なる一例に過ぎず他の順序、値、条件であっても、本実施例を実現できることは言うまでもない。また、上述した情報処理装置で用いられる各構成部品の形状、数、配置位置、部品が有する機能等は、単なる一例に過ぎず他の形状、数、配置位置であってもいいし、他の機能を有するものであっても、本実施例を実現できることは言うまでもない。また、端末装置3は、携帯型の装置より相対的に大きな手持ち型の装置または可搬型の装置でもよい。ここで、手持ち型の装置とは、ユーザが手に持って操作することができる装置であり、上述した携帯型の装置を含む概念である。また、可搬型の装置とは、当該装置を用いる際に当該装置本体を移動させたり、当該装置を用いる際に当該本体の姿勢を変えたり、当該装置本体を持ち運びしたりできる装置であり、上述した手持ち型の装置や携帯型の装置を含む概念である。
【0158】
また、上記振動制御プログラムや振動出力プログラムは、外部メモリ等の外部記憶媒体を通じて情報処理装置2や端末装置3に供給されるだけでなく、有線または無線の通信回線を通じて情報処理装置2や端末装置3に供給されてもよい。また、上記振動制御プログラムや振動出力プログラムは、情報処理装置2や端末装置3内部の不揮発性記憶装置に予め記録されていてもよい。なお、上記振動制御プログラムや振動出力プログラムを記憶する情報記憶媒体としては、不揮発性メモリの他に、CD−ROM、DVD、あるいはそれらに類する光学式ディスク状記憶媒体、フレキシブルディスク、ハードディスク、光磁気ディスク、磁気テープ、などでもよい。また、上記振動制御プログラムや振動出力プログラムを記憶する情報記憶媒体としては、上記振動制御プログラムや振動出力プログラムを記憶する揮発性メモリでもよい。このような記憶媒体は、コンピュータ等が読み取り可能な記録媒体ということができる。例えば、コンピュータ等に、これらの記録媒体のゲームプログラムを読み込ませて実行させることにより、上述で説明した各種機能を提供させることができる。
【0159】
以上、本発明を詳細に説明してきたが、前述の説明はあらゆる点において本発明の例示に過ぎず、その範囲を限定しようとするものではない。本発明の範囲を逸脱することなく種々の改良や変形を行うことができることは言うまでもない。本発明は、特許請求の範囲によってのみその範囲が解釈されるべきであることが理解される。また、当業者は、本発明の具体的な実施例の記載から、本発明の記載および技術常識に基づいて等価な範囲を実施することができることが理解される。また、本明細書において使用される用語は、特に言及しない限り、当該分野で通常用いられる意味で用いられることが理解されるべきである。したがって、他に定義されない限り、本明細書中で使用される全ての専門用語および技術用語は、本発明の属する分野の当業者によって一般的に理解されるのと同じ意味を有する。矛盾する場合、本明細書(定義を含めて)が優先する。