WiiFitからOSC飛ばしてopenFrameworksを動かす

# はじめに


[秋葉原メイカーズ倶楽部2016](https://www.facebook.com/events/247075088987520/)に、[IAMAS](http://www.iamas.ac.jp/)勢３人で「EXC_BAD_ACCESS」という縁起の悪い名前のVJチームとして出演させて頂きました。
![DSC_0005.jpg](https://qiita-image-store.s3.amazonaws.com/0/77925/d5dedec1-e8df-392b-558e-36279ce2cd99.jpeg)


とってもたのしかったですが、**VJに使った電子工作系アイテムがクラブで使うには地味すぎて悲しい思いをした**ので、使ったいくつかのひみつ道具ネタのレシピをここで公開することで成仏させたいと思います。


第一弾

- [Arduinoを使ってNintendo64のコントローラをPCで使う](http://qiita.com/sanokazuya0306/items/24813471c43efd75b4b1)


![DSC_0356.jpg](https://qiita-image-store.s3.amazonaws.com/0/77925/b08ffba5-457f-5fba-9a5b-2fe95e69a9b4.jpeg)

第二弾はWiiFit。こいつの正式名称は[バランスWiiボード](https://ja.wikipedia.org/wiki/%E3%83%90%E3%83%A9%E3%83%B3%E3%82%B9Wii%E3%83%9C%E3%83%BC%E3%83%89)というらしい。


# あなたの家にも眠っていませんか？
ぼくの家には眠ってなかったので、イベント直前にハードオフのジャンクコーナーに走って購入。**108円。**WiiFitのボードが108円で買える世界線。まあソフトないとゲーム遊べないしね…


## 実はWiiリモコンは
すぐPCで使える。WiiリモコンをPCで使う方法はググったら無数に出てくる。

- Windows
 - [Windows PC で Wii リモコンを使う](http://www.magicvox.net/archive/2015/10181135/)
    - [WiinRemote](http://onakasuita.org/wii/)というのを使えばいけるっぽい
- mac
    - [macでwiiリモコンを使う](http://qiita.com/tukiyo3/items/9c90827f9c96ad823099)
        - [wjoy](https://code.google.com/archive/p/wjoy/downloads)というソフトを使う方法
    - [WiiリモコンのデータをOSCurator経由でProcessingに送る方法 - オートマティスム的無甲斐性](http://d.hatena.ne.jp/metya1013/20120331/1333202187)
        - [OSCulator](http://www.osculator.net/)というソフトを使う方法


今回はmacでバランスWiiボードを使って他のソフトに送れる信号を抜きたかったので、OSCを飛ばせる**OSCulator**を使用。というか上のページ見ればだいたい解決する。


# バランスWiiボードをPCにペアリング
<img width="691" alt="スクリーンショット_2016-08-24_13_43_18.png" src="https://qiita-image-store.s3.amazonaws.com/0/77925/fd5c8431-17f1-25cd-8d86-786dc9bf66b7.png">
OSCulatorを開いて、右上の**Wiimote**というボタンを押す。

<img width="451" alt="スクリーンショット 2016-08-24 13.44.58.png" src="https://qiita-image-store.s3.amazonaws.com/0/77925/3abd47d2-f484-fa96-dc99-718b20faba7e.png">
そうすると右側にこういう画面が出てくるので、**バランスWiiボードを裏返し、電池カバーを開ける。**

![IMG_5048.jpg](https://qiita-image-store.s3.amazonaws.com/0/77925/4bd83bfe-e594-0fcb-2196-e3c7bd2f8953.jpeg)

ペアリング設定用の赤いボタンがあるので押す。するとバランスWiiボードの側面にあるボタンのランプがが青く点滅するので、OSCulatorの**「Start Pairing」**ボタンを押す。

<img width="368" alt="スクリーンショット 2016-08-24 13.52.17.png" src="https://qiita-image-store.s3.amazonaws.com/0/77925/750d0d60-b1ef-7951-8228-4635ab3657c5.png">
ちょっと待つとペアリングが完了し、多分こんな感じになる。バッテリー残量まで出してくれる。優秀。


# OSC信号を出してみよう

## バランスWiiボードから出るOSC信号の種類
<img width="694" alt="スクリーンショット 2016-08-24 13.53.44.png" src="https://qiita-image-store.s3.amazonaws.com/0/77925/7d4a96fb-9960-fcfb-7775-c2c12cdecc04.png">
左側にはこういうのが出てくる。**要するに7つの信号が抜けるということ。**

- 0: 左下 (初期値0、0-1)
- 1: 右下 (初期値0、0-1)
- 2: 左上 (初期値0、0-1)
- 3: 右上 (初期値0、0-1)
- 4: 合計 (初期値0、0-1?)
    - 単純に0〜3の合計っぽい。0-1って書いてあるけど普通に１越える
- 5: virtual x　（初期値0.5、0-1）
    - 右に体重をかけると大きくなり、左に体重をかけると小さくなる
- 6: virtual y　（初期値0.5、0-1）
    - 前に体重をかけると大きくなり、後ろに体重をかけると小さくなる

上の**「Quick Look」**を押すと現在の数値が見られる。超便利。
<img width="402" alt="スクリーンショット 2016-08-24 13.59.36.png" src="https://qiita-image-store.s3.amazonaws.com/0/77925/691cc044-7927-0520-aaf9-d687a2e41fc2.png">
ぼくの体重がだいたい60kgなので、1kgw=0.01で計算されるっぽい感じ。ジャンプしたりすると当然波打つ。Quick Lookだけでもしばらく遊べる。

### 余談
Quick Look試せば試すほど、どの信号をどう使ったら良いかわかんなくなってくる。ていうかWiiFitのゲーム遊んだことなかったので任天堂のWebサイトを見てみると、めっちゃゲームの数があって驚く。
[Ｗｉｉ Ｆｉｔ:４０種類以上の『トレーニング』が楽しめる！](https://www.nintendo.co.jp/wii/rfnj/training/index.html)
[全77種目のトレーニング | Wii Fit U](https://www.nintendo.co.jp/wiiu/astj/training/index.html)
７つの信号だけでゲーム作りまくるNintendoマジすげえ。クリエイティビティとはこういうことかと感じた話。

## OSCulatorから指定のポートにOSCを飛ばす
まずはOSCulatorの上に書いてある**「Parameters」**を押す。

<img width="600" alt="スクリーンショット 2016-08-24 14.22.49.png" src="https://qiita-image-store.s3.amazonaws.com/0/77925/92bc9367-e4ab-c975-4366-5e27f1b38760.png">
そうするとこんな画面が出てくるので、1番の「OSC URL or choice from gear menu」というところをダブルクリックして`osc.udp:://localhost:****`と入力する。**上の「OSC input port」とは別の番号にしよう。**

<img width="598" alt="スクリーンショット 2016-08-24 14.26.21.png" src="https://qiita-image-store.s3.amazonaws.com/0/77925/5ad75b2c-ca39-81fe-b698-21caa4892842.png">

この場合、udpという通信を使って、BluetoothでつながっているPCの8002番のポートにOSC信号が送られるようになる。



<img width="692" alt="スクリーンショット 2016-08-24 14.33.14.png" src="https://qiita-image-store.s3.amazonaws.com/0/77925/99bd85a7-ad07-3649-03b4-5a61ff297b5b.png">
右下のCloseを押して、PCに送りたい信号の**「Event Type」を"OSC Routing"に、「Value」を"D（みたいな記号）"に変更**する。
Valueのところを押してもDが出てこない場合は、「New」を押して出てくる画面でDを選択してCloseすると出てくる。

コレで準備完了。


### 余談2
OSCulatorは課金しないとちょくちょくポップアップが出てきて課金を迫ってくる。
それだけならいいが、**ポップアップウィンドウが画面から消えてしまい、普通に終了させることすらできなくなる**ことがある。その場合は⌘+Option+Escで強制終了するしかなくなってしまうので、設定は保存しておくことをおすすめ。


## OSC信号をopenFrameworksで使う
OSCをoFで使う方法についてはこれこそ無数のリファレンスがあるので、偉大なるyoppa.orgパイセンなどに譲ります。いつもお世話になっております。
-[第10回: openFrameworks OpenSoundControlによるアプリ間の通信 – ofxOsc](http://yoppa.org/geidai_graphb12/4293.html)

### oFで受信テスト
oFでOSCをテストするときは、`examples/addons/oscReceiveExample`を使うのがオススメ（v0.9.3現在）。ポートさえ合ってればどんな信号でも拾って見せてくれる。

`oscReceiveExample`の`ofApp.h`の下記の行でポート番号をOSCulatorの設定と同じにする。
`#define PORT 8002`

OSCulatorの左上のボタンが<img width="47" alt="スクリーンショット 2016-08-24 14.45.06.png" src="https://qiita-image-store.s3.amazonaws.com/0/77925/e0de55a9-11e8-f4de-2d5c-f301ac13250a.png">になっていれば信号が送られている状態なので、これを確認してRun。

<img width="641" alt="スクリーンショット 2016-08-24 14.41.44.png" src="https://qiita-image-store.s3.amazonaws.com/0/77925/6ad449cf-74e6-74be-359a-ee2f0f510c5e.png">
こんな感じで信号を受信しまくってくれる。
`/wii/1/balance/*`で信号を指定して使用することができる。ここまでできればOSCできるマンだったらなんでもできますね。


### サンプル

<blockquote class="twitter-video" data-lang="ja"><p lang="ja" dir="ltr">WiiFitテスト <a href="https://t.co/BJkrECkEG8">pic.twitter.com/BJkrECkEG8</a></p>&mdash; さのかずや (@sanokazuya0306) <a href="https://twitter.com/sanokazuya0306/status/768351852228292608">2016年8月24日</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>

サーフィンみたいな遊びができる。楽しい！！

サンプルファイルはありあわせのものでつくったためにソースがめちゃくちゃなので、要望があれば公開します。


# 歓びの時間
**クラブで使ったけどマジ地味だった。**足元にあって見えないし、スクリーンがだいぶデカくないと映像と連動してるのかどうかもよくわからない。簡単なインスタレーションみたいなところで使ったほうが良いと思う。

![DSC_0101.jpg](https://qiita-image-store.s3.amazonaws.com/0/77925/709d130c-8baa-e03a-dac4-067f001dffdb.jpeg)
成仏してくれ

パフォーマンス形式のライブするひとがエフェクターとかに連動して使ったら面白いかも。


# 次回は
ツイートに連動してバチバチ光る電球のレシピをご紹介します