最新リリース情報

l4P5 (beta-003)2009-05-05 20:38
Loc (beta-005)2009-05-05 20:33
wrj4p5 (alpha-011)2009-05-05 20:41

最近の更新

2012-01-01
2010-03-25
2009-12-26
2009-05-06
2009-04-12
2009-03-02
2008-12-20
2008-08-08

Wikiガイド

サイドバー

承前 Wiiリモコン

ご存知、Wiiリモコンを使うと、

  1. 体を使ってテニスが出来る。
  2. 体を使ってシューティングが出来る。
  3. 体を使って・・・が出来る。

ゲームアイテムの優れもの。

工学的には

  1. 三軸加速度センサー(上下、前後、左右方向に加わった加速度を計測)
  2. 4個のLEDランプ
  3. IR(赤外線)センサー(1024x768の二値センサーアレイ)
  4. バイブレータ
  5. 十字キー
  6. 7個のボタン(1,2,A,B,+,-,Home)
  7. 1個のパワースイッチ(Power)
  8. バイブレータ
  9. Bluethoothデバイス

を単三アルカリ二本で駆動する独立装置

Bluethoothを装着したパソコンの入出力装置としてみると、非常〜に興味深い。 でもって、P5で扱えると、あんなことや、こんなことが、いろいろ出来てしまう。 なので、Wiiリモコンを扱えるP5のクラスライブラリーを開発してみた。

クラスライブラリー Wrj4P5(WiiRemoteJ For Proce55ing)

まずは、あなたのスケッチ(PApplet)

  1. class PApplet
  2.  必要なら下記メソッドは各自用意すべし
  3. 【event handling methods】
  4. void boardPressed(int bid)
  5.  バランスボードのボタンが押されたときに呼ばれる。
  6. void boardReleased(int bid)
  7.  バランスボードのボタンが放されたときに呼ばれる。
  8. void buttonPressed(RimokonEvent ev, int rid)
  9.  Wiiリモコンのボタンが押されたときに呼ばれる。
  10. void buttonReleased(RimokonEvent ev, int rid)
  11.  Wiiリモコンのボタンが放されたときに呼ばれる。
  12. void nunchakuPressed(NunchukEvent ev, int rid)
  13.  ヌンチャクのボタンが押されたときに呼ばれる。
  14. void nunchakuReleased(NunchukEvent ev, int rid)
  15.  ヌンチャクのボタンが放されたときに呼ばれる。
  16. void kurakonPressed(KurakonEvent ev, int rid)
  17.  クラコンのボタンが押されたときに呼ばれる。
  18. void kurakonReleased(KurakonEvent ev, int rid)
  19.  クラコンのボタンが放されたときに呼ばれる。
  20. void guitarPressed(GuitarEvent ev, int rid)
  21.  ギターのボタンが押されたときに呼ばれる。
  22. void guitarReleased(GuitarEvent ev, int rid)
  23.  ギターのボタンが放されたときに呼ばれる。
  24. void drumPressed(DrumEvent ev, int rid)
  25.  ドラムのボタンやペダルが押されたときに呼ばれる。
  26. void drumReleased(DrumEvent ev, int rid)
  27.  ドラムのボタンやペダルが放されたときに呼ばれる。
  28. void disconnected(int rid)
  29.  (いずれかの)Wiiリモコンが切り離されたときに呼ばれる。
  30. void exDisconnected(int rid)
  31. (いずれかの)Wiiリモコンからヌンチャク/クラコンが切り離されたときに呼ばれる。

次はWii本体

リモコンを最大7台まで繋げられ、各リモコンにはヌンチャクかクラコンを繋げられる。

  1. class WRJ4P5
  2. 【property】
  3. int dCount 繋がっているWii装置(リモコン/ボード)の数
  4. int rCount 繋がっているWiiリモコンの数
  5. int bCount 繋がっているバランスボードの数
  6. WiiBoard board  最初に繋がったバランスボード
  7. WiiBoard board(int rid) (最大7台の)繋がっているバランスボード
  8. WiiRimokon rimokon 最初に繋がったWiiリモコン
  9. WiiRimokon rimokon(int rid) (最大7台の)繋がっているリモコン
  10. WiiNunchaku nunchaku 最初に繋がったWiiリモコンに繋がっているヌンチャク
  11. WiiNunchaku nunchaku(int rid) 各Wiiリモコンに繋がっているヌンチャク
  12. WiiKurakon kurakon 最初に繋がったWiiリモコンに繋がっているクラコン
  13. WiiKurakon kurakon(int rid) 各Wiiリモコンに繋がっているクラコン
  14. WiiGuitar guitar 最初に繋がったWiiリモコンに繋がっているギター
  15. WiiGuitar guitar(int rid) 各Wiiリモコンに繋がっているギター
  16. 【constructor】
  17. Wrj4P5(PApplet parent) 唯一のコンストラクタ
  18. 【methods】
  19. Wrj4P5 connect() 一個のWiiリモコン/ボードを繋げる(処理をブロックしない)
  20. Wrj4P5 connect(int n) = connect(n, false, false)
  21. Wrj4P5 connect(boolean ir) = connect(1, ir, false)
  22. Wrj4P5 connect(int n, boolean ir) = connect(n, ir, false)
  23. Wrj4P5 connect(int n, boolean ir, boolean log) = connect(n, ir, log, 2)
  24. Wrj4P5 connect(int n, boolean ir, boolean log, int sense)
  25. int n : 繋げるリモコン/バランスボードの数(処理をブロックしない)
  26. bool ir : EX(拡張コントローラを使う - ディフォルト) / IR(IRスポットサイズ)
  27. bool log: 詳細ログの要否(false=ラフなログ、デフォルト)
  28. int sense: IR-Cameraの感度(04、2がデフォルト)

新顔、バランスボード

  1. class WiiBoard
  2. [members]
  3. float sensed[2][2]; : 四隅の計測重量.(Kg)
  4. float psensed[2][2]; : 直前の計測値
  5. float weight; : 平均重量(Kg)
  6. float pweight; : 直前の平均重量
  7. float topRight; : 右上隅の計測重量(=sensed[0][0]
  8. float bottomLeft; : 左下隅の計測重量(=sensed[1][1]
  9. float topLeft; : 左上隅の計測重量(= sensed[0][1]
  10. float bottomRight; : 右下隅の計測重量(= sensed[1][0]
  11. boolean isIlluminated; :LEDのステータス(オン/オフ)
  12. [connection/communication]
  13. :<status>
  14. void disconnect() Wiiボードとの接続を切る
  15. boolean isConnected() Wiiボードとの接続を確かめる
  16. void requestStatus() Wiiボードの(バッテリやLED等の)最新状態を取得し始める。
  17. boolean isReadingData() Wiiボードの状態を取得中かどうかを確かめる。
  18. :<Battery>
  19. float getBatteryLevel() バッテリー残量を得る(0〜1)
  20. :<LED Lights>
  21. boolean isLED() : LEDライトの点灯を確かめる。
  22. void setLED(boolean illumination) : LEDライトをOn/Offする
  23. :<utils> 【New !
  24. Loc guessCoG() : 重心位置を推定する。(0〜1,0〜1)
  25. boolean isleftZone() : 重心位置は左サイドにあるか?
  26. boolean isTopZone() : 重心位置はトップ(前方)サイドにあるか?
  27. boolean isCentralZone(float tol) : 許容範囲内で重心位置は中央部にあるか?
  28. boolean isCentralZone() : 同上(許容範囲は0.4固定)

興味の対象、Wiiリモコン

  1. class WiiRimokon
  2. 【propaties】
  3. Loc sensed センサー計測値(G)
  4. Loc acc 加速度(m/sec/sec)
  5. // Loc vel 速度(m/sec)
  6. // Loc pos 位置(m)
  7. // Loc angAcc 角加速度(rad/sec/sec)-ヌンチャク必須
  8. // Loc angVel 角速度(rad/sec)-ヌンチャク必須
  9. // Loc direction 方向(rad)ーヌンチャク必須
  10. WiiNunchaku nunchaku
  11. WiiKurakon kurakon
  12. WiiGuitar guitar
  13. WiiDrum drum
  14. Loc[] irLights; 検出されているスポットの二次元座標と半径 (x座標、y座標、半径)
  15. - length of irLights[] is always 4.
  16. - when no light is, it¥'s value is (-1, -1, -1)
  17. - when IRMode¥'ir¥' is Wrj4P5.EX, it¥'s value is (x, y, -1), default
  18. - when IRMode¥'ir¥' is Wrj4P5.IR, it¥'s value is (x, y, s)
  19. *where x:0to1, y:0to1, s:size. (origin is at Left-Bottom)
  20. - If irMode¥'ir¥' is set to be Wrj4P5.IR, any extention is not available.
  21. 【methods】
  22. <Attitude of 'me'>
  23. float stablePitch() : 現在のピッチ(縦揺れ角、ラジアン), 安定状態の時のみ正確
  24. float stableRoll() : 現在のロール(横揺れ角、ラジアン), 安定状態の時のみ正確
  25. <connection/communication>
  26. void disconnect() Wiiリモコンとの接続を切る
  27. boolean isConnected() Wiiリモコンとの接続を確かめる
  28. boolean isExtensionConnected() Wiiリモコンに拡張デバイスが繋がっているか?
  29. void requestStatus() Wiiリモコンの(バッテリやLED等の)最新状態を取得し始める。
  30. boolean isReadingData() Wiiリモコンの状態を取得中かどうかを確かめる。
  31. <Battery>
  32. float getBatteryLevel() バッテリー残量を得る(0〜1)
  33. <LED Lights>
  34. boolean[] getLEDs() (4本の)LEDライトの状態を得る。
  35. boolean isLEDIlluminated(int light) 指定されたLEDライトの点灯を確かめる。
  36. void setLED(int light, boolean illuminated) 指定されたLEDライトをOn/Offする。
  37. void setLEDs(boolean[] lightStatus) (4本)全てのLEDライトをOn/Offする。
  38. <Speaker>
  39. void bufferSound(AudioInputStream audioIn) signed 8-bit PCM で準備する。
  40. float getSpeakerVolume() スピーカの音量(0〜1)を確かめる。
  41. void setSpeakerVolume(float volume) スピーカの音量(0〜1)をセットする。
  42. boolean isPlayingSound() サウンドを流している状態かを確かめる。
  43. void playPrebufferedSound() 準備したサウンドを流す。
  44. void playSound(AudioInputStream audioIn) AudioInputStreamサウンドを流す。
  45. void stopSound() サウンドを止める。
  46. <Vibrator>
  47. boolean isVibrating() 振動が続いているか確かめる。
  48. float getVibrationMagnitude(int magnitude) 振動の強さ(0〜1)を確かめる。
  49. void setVibrationMagnitude(int magnitude) 振動の強さ(0〜1)をセットする。
  50. void startVibrating() 現在の強さで振動を開始する。(止めるまで止まらない)
  51. void vibrateFor(long time) 現在の強さで指定時間、継続する振動を開始する。
  52. void stopVibrating() 振動を止める。

これだけじゃ、足りない。

Wiiリモコンの状態を表すクラス

  1. class RimokonEvent
  2. 【Constants】
  3. static int A Aボタン
  4. static int B Bボタン
  5. static int DOWN ↓ボタン
  6. static int HOME HOMEボタン
  7. static int LEFT ←ボタン
  8. static int MINUS -ボタン
  9. static int ONE 1ボタン
  10. static int PLUS +ボタン
  11. static int RIGHT →ボタン
  12. static int TWO 2ボタン
  13. static int UP ↑ボタン
  14. 【Constructor】
  15. RimokonEvent()
  16. 【Method】
  17. boolean isPressed(int btnMask) 指定された(複数の)ボタンが全て押されているか?
  18. boolean isOnlyPressed(int btnMask) 指定された(複数の)ボタン【だけ】が・・・?
  19. boolean isAnyPressed(int btnMask) 指定された(複数の)ボタンの【いずれか】が・・?
  20. boolean wasPressed(int btnMask) 指定された(複数の)ボタンが全て【今】・・・?
  21. boolean wasOnlyPressed(int btnMask) 指定された(複数の)ボタン【だけ】が全て【今】・?
  22. boolean wasReleased(int btnMask) 指定された(複数の)ボタンのいずれかが【今】放されたか?

おつぎはヌンチャク

  1. 三軸加速度センサー(上下、前後、左右方向に加わった加速度を計測)
  2. C、Zボタン
  3. コントロールスティック

がついている。

  1. class Nunchaku
  2. 【propaties】
  3. Loc sensed センサー計測値(G)
  4. Loc acc 加速度(m/sec/sec)
  5. // Loc vel 速度(m/sec)
  6. // Loc pos 位置(m)
  7. Loc stick スティックの位置(%)
  8. <Attitude of 'me'>
  9. float stablePitch() : 現在のピッチ(縦揺れ角、ラジアン), 安定状態の時のみ正確
  10. float stableRoll() : 現在のロール(横揺れ角、ラジアン), 安定状態の時のみ正確
これだけじゃ、足りない。

ヌンチャクの状態を表すクラス

  1. class NunchakuEvent
  2. 【Constants】
  3. static int C Cボタン
  4. static int Z Zボタン
  5. Loc Stick スティックの位置(%)
  6. 【Constructor】
  7. NunchakuEvent()
  8. 【Method】
  9. boolean isPressed(int btnMask) 指定された(複数の)ボタンが全て押されているか?
  10. boolean isOnlyPressed(int btnMask) 指定された(複数の)ボタン【だけ】が・・・?
  11. boolean isAnyPressed(int btnMask) 指定された(複数の)ボタンの【いずれか】が・・・?
  12. boolean wasPressed(int btnMask) 指定された(複数の)ボタンが全て【今】・・・?
  13. boolean wasOnlyPressed(int btnMask) 指定された(複数の)ボタン【だけ】が全て【今】・?
  14. boolean wasReleased(int btnMask) 指定された(複数の)ボタンのいずれかが【今】放されたか?

おつぎはクラコン

三軸加速度センサーは無いけど、

  1. a、b、十字、X、Y、L、R、ZR、ZLボタン(L、Rボタンはアナログ)
  2. L、Rスティック
  3. −(マイナス)/Select、Home、+(プラス)/Startボタン

がついている。

  1. class Kurakon
  2. 【propaties】
  3. Loc lStick Lスティックの位置(%)
  4. Loc rStick Rスティックの位置(%)
  5. float lTrigger; Lトリガーボタンの押され具合(0〜1)
  6. float rTrigger; Rトリガーボタンの押され具合(0〜1)
さらに加えて

クラコンの状態を表すクラス

  1. class KurakonEvent
  2. 【Constants】
  3. static int A Aボタン
  4. static int B Bボタン
  5. static int DPAD_DOWN ↓ ボタン
  6. static int DPAD_RIGHT →ボタン
  7. static int DPAD_LEFT ← ボタン
  8. static int DPAD_UP ↑ボタン
  9. static int HOME HOMEボタン
  10. static int MINUS ?ボタン
  11. static int PLUS +ボタン
  12. static int LEFT_TRIGGER Lトリガーボタン
  13. static int RIGHT_TRIGGER Rトリガーボタン
  14. static int LEFT_Z L-Zボタン
  15. static int RIGHT_Z R-Zボタン
  16. static int X Xボタン
  17. static int Y Yボタン
  18. 【Constructor】
  19. KurakonEvent()
  20. 【Method】
  21. boolean isPressed(int btnMask) 指定された(複数の)ボタンが全て押されているか?
  22. boolean isOnlyPressed(int btnMask) 指定された(複数の)ボタン【だけ】が・・・?
  23. boolean isAnyPressed(int btnMask) 指定された(複数の)ボタンの【いずれか】が・・?
  24. boolean wasPressed(int btnMask) 指定された(複数の)ボタンが全て【今】・・・?
  25. boolean wasOnlyPressed(int btnMask) 指定された(複数の)ボタン【だけ】が全て【今】・?
  26. boolean wasReleased(int btnMask) 指定された(複数の)ボタンのいずれかが【今】放されたか?

おつぎはギター

三軸加速度センサーは無いけど、

  1. BLUE, GREEN, ORANGE, RED, YELLOW, MINUS, PLUSの各ボタン
  2. ストラスアップ/ダウンのためのSTRUM_DOWN, STRUM_UPボタン
    • STRUM(ストラム奏法<パーカッシブな奏法)
    • ストラミングフィンガーで弾くストロークのこと。プリウォーブルース(戦前のブルース)では特に多用されていました。ダウンは人指し指、中指、薬指の爪側で、アップは人指し指の腹でかきあげるように弾きます。カッティングは、中指でおはじきを弾くように弾いた後、手のひらで「ジャッ」と音を止めます。
  3. WhammyBarとアナログスティック
    • whammy bar (ワーミーバー)
    • トレモロユニット、トレモロ・アーム)のことを「ビブラート・ユニット(ビブラート・アーム)」と呼称する例もある。また「ワームバー」「ギターの音程を連続して変化させる機構」に「トレモロ」という語が誤用され定着したのは、フェンダー社が自社の製品に「トレモロ」という言葉を使用したためと言われている。

がついている。

  1. class WiiGuitar
  2. 【propaties】
  3. Loc stick // latest sensed 2D(Loc) location(%) of the stick.
  4. float whammy // latest sesced pressure(%) of the WhammyBar.
さらに加えて

ギターの状態を表すクラス

  1. class GuitarEvent
  2. 【Constants】
  3. final static int BLUE
  4. final static int GREEN
  5. final static int ORANGE
  6. final static int RED
  7. final static int STRUM_DOWN
  8. final static int STRUM_UP
  9. final static int YELLOW
  10. final static int MINUS
  11. final static int PLUS
  12. 【Constructor】
  13. GuitarEvent()
  14. 【Method】
  15. boolean isPressed(int btnMask) 指定された(複数の)ボタンが全て押されているか?
  16. boolean isOnlyPressed(int btnMask) 指定された(複数の)ボタン【だけ】が・・・?
  17. boolean isAnyPressed(int btnMask) 指定された(複数の)ボタンの【いずれか】が・・・?
  18. boolean wasPressed(int btnMask) 指定された(複数の)ボタンが全て【今】・・・?
  19. boolean wasOnlyPressed(int btnMask) 指定された(複数の)ボタン【だけ】が全て【今】・?
  20. boolean wasReleased(int btnMask) 指定された(複数の)ボタンのいずれかが【今】放されたか?
  21. Loc getStick() // get the current stick 2D(Loc) position. (-1 to 1)
  22. float getWhammyBar() // get the current amount the whammy bar is pushed. (0 to 1)
  23. }

最後は新顔のドラム

三軸加速度センサーは無いけど、

  1. BLUE, GREEN, ORANGE, RED, YELLOW, MINUS, PLUS, PEDALの各ボタン/パッド
  2. Pad/PEDALへの打撃の強さを測るセンサー(直近の打撃の強さだけ)
  3. アナログスティック

がついている。

  1. class WiiDrum
  2. 【propaties】
  3. Loc stick // latest sensed 2D(Loc) location(%) of the stick.
さらに加えて

ドラムの状態を表すクラス

  1. class DrumEvent
  2. 【Constants】
  3. final static int BLUE
  4. final static int GREEN
  5. final static int ORANGE
  6. final static int RED
  7. final static int PEDAL
  8. final static int YELLOW
  9. final static int MINUS
  10. final static int PLUS
  11. 【Constructor】
  12. DrumEvent()
  13. 【Method】
  14. boolean isPressed(int btnMask) 指定された(複数の)ボタンが全て押されているか?
  15. boolean isOnlyPressed(int btnMask) 指定された(複数の)ボタン【だけ】が・・・?
  16. boolean isAnyPressed(int btnMask) 指定された(複数の)ボタンの【いずれか】が・・・?
  17. boolean wasPressed(int btnMask) 指定された(複数の)ボタンが全て【今】・・・?
  18. boolean wasOnlyPressed(int btnMask) 指定された(複数の)ボタン【だけ】が全て【今】・?
  19. boolean wasReleased(int btnMask) 指定された(複数の)ボタンのいずれかが【今】放されたか?
  20. Loc getStick() // get the current stick 2D(Loc) position. (-1 to 1)
  21. float getSoftness() // no hit (0.0) to the hardest hit(1.0), (0 to 1)
  22. int getSoftnessPad() // pad id, the softness was sensed. (symbal/bass)
  23. }