BLE112

はーいつぶりでしょうか?
最後の投稿が 2011/10/17 ってまるまる1年以上も書いてないとか。
あれからいろいろありました。。

いえ、特に無いです。

最近wordress仕事ばっかしてたのに、自分とこじゃ更新すらしてないし
ArdOSCもメンテしてないし。。すいません。。

今回はまた別のことに興味できてメモ書き残しておこうと思い出したように書いております。

iPhone/iPadではBluetoothは当然サポートされているものの、Makerさんなど個人レベルで扱うには
どうしてもMade for iPhone(MFi)ライセンスの壁が富士山並に高く手を出せないのですが
iPhoneの4S以降の機種ではBluetooth Low Energyがサーポートされており、
MFiライセンス無用で使用できるようになりました。ナイス過ぎます。

いろいろ調べてみると
Bluegigaからでている
BLE112というモジュールが良い感じなので
これを探ってメモっておこうというエントリーでした。

無線なので日本では技適云々はありますが、、

IMG_1522


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みてくださいませ。。。


CoreMIDIの勉強

なんか去年末からごにょごにょやってたんだけど、いろいろあって遅々として進まず。
勉強するには手を動かしてコード書くのがイチバンですよねやっぱ。

CoreMIDIはぱっとみデバイス(Device,Entity,Endpoint[source/destination])の関係性がいまいちわからずもやもやしてたんですが
自分なりに関係性を図に書いてみました。

CoreMIDIの図(修正)

App側からはClientオブジェクトを作成し、これを通してMIDIデバイスとやりとりするわけですが
デバイス内のEntityがいまいちわからず。
Entity内には実際のMIDI入出力ポート(Endpoint)のSource(MIDI IN) Destination(MIDI OUT)が入っています。

よくあるMIDI IN 2 /MIDI OUT 2 みたいなMIDIインターフェースで手持ちのEDIROL UM-2Gなんかだと
Entity内にそれぞれIN 2コ/OUT 2コなんて構成になってると思いきや
IN 1/OUT 2の入ったEntityが2つ という構成になってました。

MIDI Device(UM-2G)
 |
 ◆-Entity 1 –IN 1 (Source) / OUT 1 (Destination)
 |
 ◆-Entity 2 –IN 1 (Source) / OUT 1 (Destination)

また、Device,Entity,Endpoint はそれぞれユニークなIDが振られているため、永続化に使えるのか?と想像してます。

OSXでは一度接続したMIDI機器の情報は保存される模様で、つなげていなくても全デバイス取得すると取得できちゃったりします。
ただ、Entityプロパティのオフライン情報で実際の接続の有無が確認できる模様。
iPadではこんなことはなく、MIDI機器外すと全デバイス情報もクリアされちゃうみたいです。

CoreMIDIイニシャライズの流れとしては

1 Clientオブジェクトの作成
2 Inportオブジェクト、Outportオブジェクトを作成
3 MIDI受信コールバック関数をInportオブジェクトへ登録(送信のみはいらない)
4 NotificationコールバックをClientへ登録(これは適宜)
5 受信したいEndpoint(Source)とInportオブジェクトをコネクト

これでMIDI受信すると受信コールバックが呼ばれます。
送信はMIDIパケットリストを作成し、Endpoint(Destination)を指定して送信します。

受信したいEndpoint、送信先のEndpointは総じて全部まるっこ指定してるようです。
細かく制御することも可能だと思います。

とりあえずの勉強の成果としてちょっとCoreMIDI Objective-Cラッパーを作ってみました。
ちょとアプリに組み込もうとして作ったものですけど。

受信したMIDIメッセージに対応したデリゲートと
送信用のメソッド組み込んでます。
自分の使いそうなのだけですけど。(つかうってもNote ON/OFF と CCくらい)

初めてGitHub使ってみたけどうまくいけてるんだろか。。。

RTCMidiLib

それにしてもiPadだとCoreMIDIでバッグはほんとやりにくい!
ビルド/デバッグのたびにMacかMIDIインターフェースにつなぎ変えないといけないし
そもそもデバッガ使えない!
プリントデバッグではなく実機でのUITextViewデバッグ!

激しく参考にさせていただいてます
Objective-Audio
http://objective-audio.jp/cat54/core-midi-mac/


The Loud Objects Noise Toy (3)

実はやりたいことがあってDACに関していろいろ調べててたら
Chan氏のページでAVRの出力ピンで直接スピーカーをドライブしてる作例がありました。
ありゃー。

まだブレッドボードからバラしてないのでさっそくこっちでも試してみました。
これはSP2コだけど、ステレオで鳴らさなければ1コでもいいと思う。
(サンプルではステレオネタは1コしかなかったような)
loudobjects SP Direct Drive

実際の音はこんなかんじ。
これは直径21mmのちっさいスピーカー(16Ω 0.25W)
圧電スピーカーでもいけるけどすごいピーキーな音になりました(低音無し)

loudobject_sp_direct_drive from recotana on Vimeo.


The Loud Objects Noise Toy (2)

昨日の続き

AVRに限らずこの手のマイコン扱うにはどうしても避けて通れない開発環境の構築。
Winなら特に悩む必要なくデフォの環境を選ぶべきですが、
普段からMacを使ってる人にとってはやっぱりMac上で構築したいもんですよね。

ArduinoですとMac上で走るIDEを使えば何の問題もなくビルド&書き込みできますが
Loud Objects Noise Toyのように素のAVRを使うとなるとそうはいかず
MacですとEcripseかXcode(NetBeansはわからず)になっちゃいそ

Ecripseも恐ろしく高機能でいいんですが
普段iPhoneやってるせいもあってやっぱりXcode
これでXCodeでAVRのビルド->書き込み(加えてヒューズ書き込みも)がさくっとできるようなテンプレを作っています。
(でも今となってはもっといいテンプレがあるよーな気がする。。)

その前にAVR用のツールチェイン CrossPackをインストールしておいて
http://www.obdev.at/products/crosspack/index.html

AVR Xcode Templete

これをXcodeの指定フォルダへコピーするとAVRのプロジェクトが作られるようになります。

それでもmakefileへAVRの設定などちょっぴり書くことはあるのですが

Loud Objects Noise Toy用に
チッップ ATTINY85
ライター AVRISPmkII
を使用するという前提のXcodeプロジェクトを置いておきました
http://recotana.com/files/loudobjects_xcode.zip

main.c にコードを入力するのですが
Loud Objects Noise Toyにあるサンプルコード全コピペでOKなはず
(ワーニングは出たら、引数の無い関数にvoidを入れればOK)

買ったばかりのAVRはそのままでは内蔵クロック4MHzと半分になってしまいまので、
ビルド前に最初に”Flush Fuse”してmakefileのAVRヒューズ設定(内蔵8MHz)を反映させてください。

あとはBuild & Flush Programでいけるはずです。問題が無ければ。。