Posts in Category: OSC(OpenSoundControl)

new ArdOSC2.1

。。。9ヶ月ぶり?
おまいさんダレ?

えとえと、久しぶりに成果物アップしました
無謀にもGitHub。
git全然わかりませんが何か?
は?フォーク?Volksは好きですもちろん

https://github.com/recotana/ArdOSC

以前とは違いごそっと変えちゃいました
メッセージのオブジェクト作って
そのオブジェクトへArgumentをAddしていきます。今っぽいですね!

あと、大きいのは
OSCアドレスごとに処理先の関数を設定できるようにしました。コールバックですね
ただ、パターンマッチまではやってないので(重くなりそうなので)単に文字列のマッチングだけです。

もひとつ、String(char *)をgetする際は予めメモリ確保を・
Exmapleでは最初に文字数を取得してから、char v[文字数]でメモリ確保し、そのポインタ渡してます
スコープ内でメモリ確保して、スコープ抜けたときに勝手にfreeするので楽かな〜と。

もし、float、stringを使わないのであれば
OSCcommon/OSCcommon.h の
#define _USE_FLOAT_
#define _USE_STRING_
それぞれコメントアウトしちゃってください。
バイナリサイズ減るはず

ドキュメントは無いので、Exampleみてくださいませ。。。

Share on Facebook

MacとiPhone/iPadをWiFiルーター無しで接続

先日東京へ行ったとき、ミュージシャンの友人から
WiFiルーターの無いハコでライブするとき、
MacとiPadなどをWiFiで通信するにゃどーやって?
(iOSCやTouchOSCなど特に問題)
という素朴な疑問を投げかけられたんですが、

フツーにWiFiルーター持ち歩くのが一番手っ取り早い方法ではあるけど
実は、OSXは標準で自身がルーターになる機能もってるのです。
ほとんど使うこともないし地味すぎてあまり知られてないだけなんですが
ネット環境のない場所でMacとiPhoneを通信させるもう一つの方法であります。
アドホックというのはちょっと語弊あるかな〜?

無線LAN無し
有線LAN無し
もちろんインターネットも無し
Macを無線LANルーターとして機能させる。
こんな想定で設定してみます。

これはたとえばのネットワーク設定
Ethernet未接続
AirMacも「入」だけどどこにも繋がっていない状態
あとは、ネットワークの設定はなにもしない。(!)

つぎに、

システム環境設定の「共有」を開きます。

「インターネット共有」を選択し(まだチェックはいれないで!)
共有する接続経路を「Ethernet」
つぎにAirMacオプションを押します。

『ネットワーク名」に適当な名前を入力
これはWiFiにおけるSSIDです。WiFiサーチするときに出てくる名前
ライブ中に他の人がアクセスしてきても困りますのでWEPの設定もしておきましょう。

ここまでできたら、先ほどすっとばした、「インターネット共有」にチェックを入れます。
インターネット共有開始確認のダイアログがでるので開始してください。
これでMacはWiFiルーターとして機能します。
もちろんEthernetにはなにもつないでいないのでインターネットなどには繋がりません。
WiFiのLANのみのネットワーク構成されます。

このとき、AirMac状態をメニューバーへ表示するようになっていたらこのような扇+↑になっているはずです。

つぎにiPhone/iPad側の設定。
こちらは通常どおりのWiFi設定だけでOKなのです。
設定/ネットワークを開くと、さきほどMac側で設定したSSIDが見えるはず。
これをタップすると・

WEPのパスワードをきいてくるので入力してください。

無事接続されたら、IPを確認してみましょう。
右端の◎>をタップすると

取得したIPアドレス。
ルーターのIPアドレス。これはホスト側(Mac)のIPということです。
じつは、先に設定したインターネット共有では独自にDHCPが効くようで
クライアント側のIP設定が不要になるナイスな機能でした。

iOSCだとhost設定で↑のルーターIPを入力したり

TouchOSCもHostへルーターIPを入力してください

もちろん制御するアプリに併せてポートなども。

ほいでこれ忘れがちですが
ライブなどが終わったらインターネット共有のチェックは外してくださいませー。

————

あ、ちょっと捕捉

これEthernet無し、他のWifiルーター未接続前提でしたが
他のWiFiルーターへの接続は同居できません。
もし他のWiFiルーターへ接続済みの場合
「共有する接続経路」がAirMacとなり
「相手のコンピューターが使用するポート」にAirMacがでてこなくなります。
要はiPhone/iPadからはこのMacが見えなくなります。
まーiPhone/iPadが他のWiFiルーターへ接続すればいいんですけどね・

あと、共有するデバイスがiPhone/iPadだけではなく、有線のデバイスがある場合(Arduino+Ethershieldとか)
上の「相手のコンピューターが使用するポート」のEthernetをチェックすればおそらく大丈夫かと思います。
DHCPから取得できないデバイスなら 10.0.2.2〜255 で
他の機器とIPがバッティングしないユニークIPを手動で設定しておいてください。

Share on Facebook

新しいOSCライブラリ(Obj-C)を作っている

こりゃー使い物になるかどうかは甚だ不明ですが
いまObjective-C版のOSCライブラリをスクラッチから書いています。
常々思うところが(後述)あっんですが、
赤松さんのBlogにて OSCライブラリの比較 という記事が後押ししたというか
いままで”OSC送受できる”というのはあれど、どのくらいのパフォーマンスなのか?というのが
ほとんど論じられてこなかったのでとても新鮮で興味深い記事でした。
最近ではArduino版を作ってきたのでちょっとかぶりつきで。

思うところといいますと、iPhone絡みで開発している以上、ライセンスの縛りも大きく
使いたいライブラリはLGPLばかりでBSDなどがいまいち少ない
しかもiPhoneではサードパーティー製のライブラリは静的リンクしかできないため、
LGPLでは有料アプリにはどうしてもそぐわなくなってしまう。
BSDのoscpackは赤松氏が書いてるようにC++との連携が必要になりどうしてもいびつな実装になってしまう。

このへんのジレンマもありなんとかせにゃな〜と常々おもってはいたんですが、
かつてAVR版、こないだはArduino版も作ってるし
コアの部分を流用して思い切ってObj-C版も作っています。

仕様としては
1 型は int32 , Float , String , Blob の4つ
2 *,?,[],{}などメッセージ受信におけるワイルドカードなどのパターンマッチは行わない。
(このメッセージがきても破棄しちゃう)
3 Bundle形式は非対応
4 Bonjour対応

1はOSC1.0の仕様で、基本的な型のみ実装
2 この手の文字列検索の処理コストってなんか勿体ないなーと。
 もしコストがかかるようであれば音楽用途だと致命的になりそうな。。
3 これはTimetagによる時間指定イベントを可能にするらしいのですが、ぶっちゃけ実装方法がわからない(笑)
4 Bonjourはこれからの通信機器に必須ということで。。

2,3 twitterでも聴いてみましたがあまり使ってる人はいなさそうということでずばっと省略。

ある程度できあがってはいるんですが
中身的には、エンコード/デコードなどは主にCで書いて、コンテナでObj-Cとやりとりする部分のみObj-Cでやってます。
NSArrayとかNSStringとか極力使わないようにしたかった。なんとなく重そうで。。

先日はOSC1.0仕様のの日本語訳を見つけたけど
これみてもBlobのデータ構造がいまいちわからんかった。。
しかたないので、ProcessingからBlogを送って、その受信バイナリを解析してました。。
こういうのはArduinoと違ってデバッガ完備でめちゃいいですね〜XCode

Share on Facebook