新しい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
ArdOSC (とArduino DHCP , Bonjour )のデモ
できたてホヤホヤのArdOSCを使ってデモってみました。
そもそも
“だれでも簡単に使える (iPhone用) 通信デバイス“
実はこのことが自分の中では大きなテーマでして
本来であればZigBeeやBluetoothも視野にいれなくちゃなんですけど
ZigBee自体相手があんましいない。iPhoneにゃ標準で付いてない。もっと汎用なのが好き
Bluetoothも何気に壁が多い(個人レベルで。特にiPhoneだとMfiライセンスの壁が。。)
となると Ethernet(Wi-fi)しか残らなくなっちゃう。
あくまでLAN内前提ですが、どうしても自デバイスのIP設定や、相手側のIP/Port設定がネック。というか面倒くさいなーと思っていたところ
Arduino用 DHCP、Bonjourライブラリというのが公開されてたのでこれがあれば設定すっとばせるので設定面倒な懸念がイッキにクリアになりました。
ちなみにこのライブラリの作者、あのFTIRマルチタッチ用のドライバの作者でもありました・親しみを覚えちゃう。
だがしかーし、
このライブラリはとんでもなく超高校級のコードサイズ
使うだけで、最新Arduinoのプログラム領域の半分くらい使っちゃう
正直、そこまでしてArduinoでカッツカツでやるもんじゃないとは思います。。(特にこだわりはないので)
とはいえ、サックリ使えるのは非常に魅力なので、なんとかこれに軽量なOSCライブラリを組み込んでiPhoneと通信させようと作ったのが
今回の ArdOSC でした
前置きながい
Arduino+Ethernet ShieldはWiFiルーターと有線接続
iPhoneはWifiでルーターへ接続
Arduino、iPhone共にDHCPによりIPを取得しています。(Arduinoは EthernetDHCPを使用)
iPhone側ではOSCサーバを起動、およびBonjourにより iPhone IP , OSCサーバポートをパブリッシュさせています。
実際にはCopyByEar(新ver) 内でOSCサーバ起動、Bonjour Publishを行っています。(”_osc._udp”)
Arduino側では
EthernetDHCPによりArduinoのIPを取得
EthernetBonjourによりiPhoneでBonjour publishされた
iPhone IP,OSCサーバポートを自動で取得しています。
具体的には ”_osc._udp”を探し出し、複数の場合は最初に見つけたデバイスを選択
同一LAN内であることと指定のポート10000(CopyByEar側での決め打ち)であることを条件に接続先を決定します。
ここまでできると、相手IP,ポートがわかるので
あとはOSCメッセージをほいほい送るだけです
デモでは、
電源投入(というかリセットからの復帰ですけど、、)
DHCPでのIP取得(LED 赤)
Bonjourでの相手IP.ポート取得成功(LED 黄)
橙ボタン : CopyByEarの再生/ポーズ
緑ボタン : CopyByEarのボタン1(10秒戻る)トリガ
白ボタン : CopyByEarの マークジャンプ/ループ開始 トリガ
をそれぞれデモってます。
iPhone Arduino OSC(ArdOSC) connect demo from recotana on Vimeo.
ArdOSC (Arduino simple OSC Library )
なぜにひさびさにArduinoやってたかとゆーと
CopyByEar用の外部デバイスとしてArduinoでコントローラを作ってしまおうと画策してまして
当然OSCを使うわけですが、どーも物足りなくなって、以前作ったOSCライブラリを作り直しておりました。
名前も一般的すぎて埋もれがちなのでバージョンアップを期に固有名詞もつけました
ArdOSC (Arduino simple Open Sound Control Protocol Library )
ArduinoOSCの略ですけど、Twitterを考慮して省略。なことなーない
前回の作っておいてなんですけど、結構ばっさり変えちゃいました。
もっとさっぱりコード少なめで書き直して、かつもうちょい使いやすくしてみてます。(かな?)
前回のは、OSCアドレス設定は2コにわけてたけど、めんどいので廃止。1つでザっと設定してしまいます。
OSCアドレスは255文字まで
Serverでの ? や * などのパターンマッチは実装しておりません。
素のOSCアドレスの取得はできるので(当然)各自で実装をお願いします。
Argumentの種類は
int32
float
string
の3種類。
timetagはRTCもないのでいれませんでした。
int32はArduinoでは “int” (16bit)ではなく “long int”(32bit)なので注意してください!
argument数は全部で16コまで入るようにしました(ほんとはもっと入るけど)
バンドル形式は実装していません。
また、標準のEthernet Shield専用です。
現在のArduino firmware0018で動作確認しております。
まだできたてホヤホヤなのでバグありそうだなー
もしへんなとこあったら優しく指摘してくださいませ。。。
exampleにはProcessingのサンプルも置いてあります。loop backテストができます
ただしProcessingはoscP5必須です。
とりあえずこんなところかなー
ArdOSCのコア(エンコード/デコード)部はほぼ普通のCなので移植も簡単かも?
OSCメッセージをバイナリ変換/逆変換できるので、シリアル系とかでもいけそ
そうそうiPhone用のOSCライブラリも作りたいところ。
久々にArduino
何ヶ月ぶりだ???
CopyByEarの開発も落ち着いたので(あとは公開準備を整える状態)
ずっと懸案だったCopyByEar用の 外部デバイス?外部コントローラ?を作るべくひっさびさにArduino
Twitter上でAdruino用 DHCP/Boonjourライブラリの存在を知ったことでちょっと自分内で作りたい病が加速とります。
このライブラリがあるとArduino側で自分のIP設定や、接続先IP設定をすっとばすことができる!
ブロードキャストでやればという話しもあるけど、、
ただ、Bonjourライブラリは超高校級のコードサイズだので
同時に動かす自前OSCライブラリを同居させるには微妙になってきました。
実際MEGA168版のArduinoだとそもそも入りきらないし!
急きょ容量2倍2倍の新しめのArduino注文して、いまは自前OSCライブラリの見直し(軽量化)しております、
Arduinoのライブラリ作るにあたってはデバッグ方法がprintデバッグしかできないので
iPhoneに慣れた体ではなかなかツライ
そんななかでiPhoneで使ってた便利マクロをArduinoへ移植
//#define _DEBUG_
#ifdef _DEBUG_
#define DBG_LOGLN(…) Serial.println(__VA_ARGS__)
#define DBG_LOG(…) Serial.print(__VA_ARGS__)
#else
#define DBG_LOGLN
#define DBG_LOG
#endif
コード中に
DBG_LOGLN(”abc”);
DBG_LOGLN(val,DEC);
みたいにいれておいて
_DEBUG_定義されてなかったらこの部分はビルドしません
直接デバッグとは関係ないけど
ライブラリにはちょっと入れておきたかったもんで
新年のご挨拶 と CopyByEarアップデート
どーもみなさま明けましておめでとうございます。
つーかいまごろか!
クリスマスになんとあのAppbankさんがCopyByEarをレビューしていただいてびっくりこいちゃいました
しかもナイスすぎるほど詳しいレビューでめちゃよかったー。
CopyByEar: 「少しだけ戻る」音楽再生アプリ。これ使える!Podcastにもご対応を!2085
その中でPodcast対応していれば・・というご指摘が
そーいえばなんでか音楽専用(iTunes上での区別)だった。なんでこれにしてたんだろう??
さくっと変更できるので即効podcast/audiobook対応でビルドし直して申請しましたよ12月30日。
ところがどっこい、大晦日に「説明文がイくない。説明文直すだけでいいのでバイナリの再アップは必要ないっすよ。」とAppleからメール。
即効直したので、こりゃー元日Ready for Saleくるかー?来年は幸先いいんでないのー?
とニヤケてたら、さっぱしRFSこない。。
1月7日になってやっと「変更確認したぜ。なんかあったときはまた連絡するわ。」とAppleからメール
おおー。やっとかよ。変更も1ヶ所だけだから即いけるよな?最近は超速審査だしな?
とおもいきや、2日経ってもまだRFSメールこない・・・
iTunesConnect見て確認してみると、なんとリジェクトされてるし!
しかもあのメールしてきた1月7日にリジェクト!
Appleはハシゴ外しの名人ですね!あほー
リジェクト理由のメールも来てないし
リジェクト理由が分からんぞボケ!と再度返事して、即効バイナリだけアップ
何事もなかったように本日Ready for Sale来てました。。。
ちなみに
In Reviewが今日の2:49
Ready for Saleが今日の7:26
約4時間ちょいで審査完了か。やっぱ速いんすね。。
とゆーわけで CopyByEar 無事更新しました。
Podcast、Audiobook に対応となりました。
ご愛顧のほどよろしくお願いします!
↓クリックするとiTunesへ飛びますよ・
iPhoneネタアプリ “CDJ PANIC” リリース!
ちょっとしょーもないもん作っちゃいました。
ぱっと思い浮かんでざっと作って一気にリリース。
初期衝動のモチベーションが消えないうちにやるってのは独り開発では結構重要かも。
CDJでDJをしたことある人ならかならず一度は失敗する様を再現するアプリ。めちゃ無意味。
プレイ中に操作失敗してホール内にジャカジャカ音を響かせた時の焦燥感はいやーなもんですよね。
平静を装ったり、痛々しくもアゲアゲなポーズを無理にしてみたり。
そんな感じを思い出しつつ、慰め(皮肉)のメッセージを噛みしめて終了してくださいませ。
ちなみに終了しない限り止まりません・(ジョークなので怒らないでね。。)
いまみたらミュージック無料のランキングで50位台につけてた。おほ〜。
リリース直後だからだろうけどちょっとうれすい。
新作CDJアプリ(ネタ、非売品)
CDJを使ってDJした人なら必ず1度はやらかすロマンティック現象を体験するアプリ
選択すると即再生する便利機能
PAUSEボタンのみの超シンプル設計
しかもこのロマンティックは止まりません
これわかる人にしかわからんよね。。プレイ中これやっちゃったときの焦り具合も
CopyByEarのバージョンアップUI画面を考えてたはずなのに脱線しちまた。
iPhone版トランシルヴァニアがある!
なんちゅー懐かしい!
当時Apple][ゲームやりたがために
高校のときApple][の海賊版を2年くらいかけてハンダ付けしながら作ったの思い出します。。
まだ、日本語のADV,RPGなどない時代でした。
ほいでもって即効購入!
色滲んでるし!
Apple][の6色表示まで再現してるw


辞書ボタンおすと、コマンド選択がでてきて、iPhoneぽい入力。
でも画面上のアイテムとか道とかタップするとGOとかLOOKとかそれっぽい動作するようになってる

ほんと、当時のゲーム画像そのまんまだよね。こゆの当時のゲームからデータ引っこ抜いてきちゃうんだろか?

ざっとやってみると、効果音がでたり(Apple][では音はなかった気がする)しゃべったり
なんだかリッチな感じ。
ほんで、タップするとイベント発生しちゃうので妙にさくさくいってしまう。
さすがにドキドキ感はないけど、懐かしさだけでも購入する価値ありですた。
recotanaアプリ ただいまセール中!
ちょうど去年の11月あたりはアプリ開発もそうですが
ドラスティックに環境変化せざるをえない出来事もあり
1年間よく乗り切ったよなあ、、と振り返るとそう思っちゃいます
依然、たいして仕事無し、されど面倒はみなくてはならんのであんま外にもでられん
という状況で綱渡りには違いないけど
また1年例のビッグウェーブに乗らせていただく所存です。すっかり通り越してレッドオーシャンか(笑)
そんなわけでiPhoneアプリ開発に手を染め、ほいで自分も1年やり過ごせたアニバーサリーとして
本日よりディスカウントセールを実施しまーす!
iOSC,Copy By Ear ともに115円(2週間限定)のご提供です。
どうぞよろしくお願いします!
CopyByEarの詳細
AppStoreリンク

iOSC詳細
AppStoreリンク

Copy By Ear ver1.2 リリース!そして近日中にセールするかも。
今朝方 Ready for Saleメールが届いてました!
10/22日サブミットなので約2週間ほどの審査期間
せめて1週間程度にしてほしいですよね。。レビュワーが十数人(だっけ?)らしいのでしゃーないですけど。
増員する気ないんだろうか? 過労死とかしちゃいそうな。
そいで、自分内アニバーサリーもあって、recotanaアプリのセールを近日中に実施しようと思いますー
購入を予定されてるかたはもちょっと待ったほうがいいかも!?
ほんとは使っていただいてる方々にもっと還元できればいいんだけど。。
そゆわけでCopy By Earのバージョンアップ
見た目はあんまり変わらないけど、主に機能要望の追加とバグフィックスです。
あと、以前から書いていたOSC(Open Sound Control)に対応しています。
(iOSCのときは審査にテストアプリが必要だったけど、今回Appleにはなにも言われなかったなあ。せっかく用意したのに)
OSCではBonjour対応のテストコントローラ(Processing製)を用意しています。
IP設定無しでコントロールできるってのはほんと楽ちん。
OSCを駆使されるみなさん、こんな感じで使ったよ!というのがありましたらぜひ教えてください〜。
AppStoreリンク
![]()
Copy By Earサポートサイト
変更箇所をStore説明文から抜き出してみます。
ーーーーーーーーーーーーーーーーーーーーーーーーーーー
OSC(open sound control)プロトコル,Bonjourサービスに対応しました。OSCによる遠隔コントロールが可能です。
テスト用コントローラを用意しました。OSX , Win(java環境が必要です)
http://recotana.com/souko/CBEController_v1.0.zip
iPodプレイヤー再生中にCopyByEarを起動した時、リストに曲を追加できるようになりました。(spoonikさんのご要望)
ジャンプボタンの設定範囲を変更しました (1-100秒)。(spoonikさんのご要望)
LibraryピッカーをOS標準ピッカーへ変更しました。インデックス選択が可能です。
プレイバックボタンの問題を解消しました。
アートワーク未設定の曲を取得した際、まれにクラッシュする問題を解消しました。
iTunes同期直後に起動した際にクラッシュする問題を解消しました。
若干のメモリリークを解消しました。
ーーーーーーーーーーーーーーーーーーーーーーーーーーー
ちなみに、OSCコントロールのテストアプリは用意してありますが
そのほか、OSCメッセージを自分で作れて送信できるものであればコントロールできます
たとえば手前味噌ですが iOSC だとこんなかんじです。(Wi-Fi経由なので当然ケーブルは繋がってません)。
max/mspやProcessingなどからでも普通に制御できちゃいますよ〜。







最近のコメント