ラベル MIDI の投稿を表示しています。 すべての投稿を表示
ラベル MIDI の投稿を表示しています。 すべての投稿を表示

2013年11月13日水曜日

eVocaloid eVY1 シールド



YAMAHA のeVocaloid 音源を搭載したNSX-1 チップ、を搭載したSwitch Science 製 eVY1 シールドが発売されました。

iKero 推しの私としては悩ましいところですが、結局 MFT2013 の会場で購入しました。

自分用メモを兼ねて、いくつか分かった事/ハマった事をまとめます。

○どうやって制御する?
MIDI 準拠。Arduino から送り易いように、ボード上で UART TX ピン(D1) またはSoftwareSerial 用にD3 ピン の切り替えができるようになっている。

USB MIDI に対応しており、PC などのUSB ホスト機器から直接コントロールできる。
Web MIDI API を使用したサンプルがYAMAHA から公開されている。

MIDI は基本的に、3byte で1つのMIDI メッセージを形成している。
MIDI の解説ページは音楽作成ソフト視点のものが多く、実際にどういうバイト列が送られるのか、調べるのが大変だった。


○歌詞はどうやって送る?
MIDI の System Exclusive Message で歌詞を送る。歌詞は PA (Phonetic Alphabet) という書式で、PA およびSysEx の書き方は仕様書(このページの一番下のPDF)を参照。
(Switch Science のページにあるArduino 用サンプルコードもわかりやすい)

一度に持てる歌詞データは 128音まで(単位不明)。日本語の1つの音で1〜4Byte 使用し、音の区切り文字にも1Byte 使うため、30〜40音程度しか持つ事が出来ない。
→1曲歌うには、数フレーズごとに歌詞を送りながら演奏することになる?


○発音タイミングは?
NOTE ON メッセージを送る。
あらかじめ送った歌詞を順番に発音し、最後まできたら先頭に戻る。
1つ前の音に戻ったりは出来ない模様。

○同時発音は可能?
GM 音源との同時発音は可能。eVocaloid は単音のみ。

○電源は?
Arduino の電源ピン(5V-GND) から供給。USB MIDI として使う場合は、USB から供給。
USB MIDI が優先されるようで、電源だけを USB から供給し場合も、シリアルMIDI は受け付けない。

○音程はどうやって変える?
発音時のNOTE ON で指定 + ピッチベンド(Pitch Bend) コントロールチェンジで変える。
ピッチンベンドの幅(ベンドレンジ (Bend Range)/ピッチベンドセンシティビティ(Pitch Bend Sensitivity))も指定可能。

(eVocaloid は0ch)
NOTE ON    0x90, note, velocity
NOTE OFF  0x90, note, 0 (velocity = 0 の NOTE ON メッセージ)
または    0x80, note, velocity(本来のNOTE OFF メッセージ)

ピッチベンド 0xE0, LSB, MSB

※データはすべて 7bit なので注意。
8bit のように[ MSB ×256 +LSB]  ではなく、[MSB ×128 +LSB]  となる。

MSB LSB(HEX)  = MSB LSB (DEC)  = 符号無し整数 = 符号付き整数 = ベンド効果(%)
(7F  7F)  = (127 127) =  (16383) = (8191) = +100%
(40  00)   = (64  0 ) =  (8192) = (0)  =  0%
(00  00)   = (0   0) = (0) =(-8192) =  -100%

ピッチベンドは% で指定するので、実際にどれくらい音程が変わるかは、ピッチベンドセンシティビティに依る。デフォルトは2 (± 2半音 = ± 1全音 )。


ピッチベンドセンシティビティは RPN という方法で指定
(規定のCCメッセージを組み合わせて指定する)
CC#100 0, CC#101 0, CC#6 [ベンド幅], CC#38 0
でOK。
バイト列にすると
CC#100  0xB0, 100, 0
CC#101  0xB0, 101, 0
CC#6   0xB0,  6 ,  [ベンド幅]
CC#38    0xB0, 8, 0

[ベンド幅] は デフォルト値 2 (±2半音 = ±1全音)。12で1オクターブ。最大 24 (±2オクターブ = 4オクターブ) 

MIDI のNote No は 半音刻みになっているので、NOTE ON 60 から中間の音を出しながら、連続的に変化させたい場合

(Note No)
60 (ド) NOTE ON 60 + Pitch Bend 0 (%)
60.25 NOTE ON 60 + Pitch Bend [+0.25 / Pitch Bend Sensitivity *100 (%)]
60.5 NOTE ON 60 + Pitch Bend [+0.5 / Pitch Bend Sensitivity *100 (%)]
60.75 NOTE ON 60 + Pitch Bend [+0.75 / Pitch Bend Sensitivity *100 (%)]
61 (ド#) NOTE ON 60 + Pitch Bend [+1.0 / Pitch Bend Sensitivity *100 (%)]
61.25  NOTE ON 60 + Pitch Bend [+1.25 / Pitch Bend Sensitivity *100 (%)]
...
のように指定することができる。


これらを iPad アプリとして実装した結果
iKeromin ライクな制御(1本のスライダーで連続敵に音程をコントロール)ができました。




(以下のページが大変参考になりました)
http://www1.plala.or.jp/yuuto/midi/p0302.html
http://odasan.s48.xrea.com/dtm/wheel.html
http://www.geocities.co.jp/Hollywood-Miyuki/9008/basic/b_03.html



2013年2月4日月曜日

Pure Data を中心にしたソフト&ハードの連携 その1

MSM2012 で紹介した、「音や映像に合わせて、LED を点滅させる」をおこなったときの構成を紹介します。


要件をまとめると、あらかじめ時間に沿ったLEDの色データ打ち込み、映像または音声と同時に再生したい、ということです。
何らかのシーケンサーが必要なので、MIDI を使用しました。

予算が全く無かったので、こんな感じでした。

・Garage Band →MIDI  エディター&MIDI 出力 (midiO プラグイン)
・PureData →MIDI 入力&シリアル出力 (XBee)
・QuickTime Player7 pro →映像出力

これらのソフトをApple Script で連携させました。
この構成で約6分の曲をループ状態にして、1日回しっぱなし(10時-18時) の展示会を乗り切りました。

、、、さすがに複雑すぎるので、今後構成を見直したく、思っています。


まずは現状の紹介

○Audio MIDI 設定でIAC の設定をする
アプリケーション > ユーティリティ > Audio MIDI 設定

1) MIDI スタジオ画面
ウインドウ > MIDI ウインドウを表示

2) IAC のプロパティ 画面
IAC をダブルクリック で開く


・装置がオンラインになっていることを確認
・ポート名などに日本語が入っていると、表示できないソフトがあるので、
 名前を英数のみに変えておく

IAC は Inter-Application Communication のことで、ソフト同士のMIDI 入出力を仮想的に接続します。ソフトA のMIDI 出力に IAC のポート1(上図だと IAC:IAC-1)を設定し、ソフトB のMIDI 入力にIAC のポート1(同じく IAC:IAC-1)を設定することで、ソフトA のMIDI 信号がソフトB に入力されるということです。

○Garage Band からMIDI 信号を出力する
midiO プラグインの使い方はこちらのサイトが詳しい


midiO の設定画面(上図「ソフトウェア音源 > 編集 > サウンドジェネレータ」にあるmidiO のアイコンをクリックすると開く)で、MIDI Destination に IAC-1を指定する。


○Pure Data のMIDI 入力を設定(0.43.4 は日本語対応!)
メディア > MIDI 設定...
入力デバイス に IAC-1 を設定

○Pure Data でMIDI 信号を受ける
今回は単純なNote On/Off だけで制御しているので、
notein パッチとstripnote (ノートNo とベロシティの分離)でOK。

こんな感じ。

MIDI 信号と色の対応は自分で適当に割り当てています。
曲の終わりに特定の信号を用意して、Apple Script を呼び出すことで、QuickTime のビデオ再生を同期させました。

AppleScript はこんな感じ。
GarageBand の巻き戻し&再生と、QuickTime Player の巻き戻し&再生

立ち上げ時もこのスクリプトを使ってスタートできるのですが、初回はQT がフルスクリーンになる(ウィンドウが拡大するアニメーションをする)時間がかかるため、ずれます。
2周目から合う用に、Garage Band でちょっとずつずらしては再生の繰り返し、で合わせました。

Pure Data (Pd-extended) 0.43.4

Pure Data (Pd-extended) の0.43.4 がリリースされていました。

パフォーマンスの改善やメニューの他言語対応(含む日本語!)など、大きく進化しています。

私が使用しているのはMac 版 (0.42.5 からのバージョンアップ) ですが、とりあえず気づいた点

・MIDI 設定、Audio 設定の位置がPreferences から Media に変わった。
 →MIDI の設定が記憶されるようになった。
 (これまでも、Audio Settings のSave all settings ボタンで記憶できたらしい。)
 →MIDI の設定で、デバイス名にUTF-8 の文字列が表示できるようになった。

・Pd ウィンドウが閉じられるようになった。
 →これまでは閉じるとPd の終了になっていたが、終了しなくなった。
 →ドキュメント ウィンドウを閉じるときに警告が欲しい場合は
  編集 > パフォーマンスモード をON にする

他にも、マジックグラスや自動ヒントなど、GUI まわりで多数の改善があります。
GUI を拡張する GUI plugins というものもあるそうです。


Arduino IDE もそうですが、ずっと英語版だったものが日本語化されると、嬉しい反面、もの凄い違和感ですね。検索するときに他言語のユーザーの情報が得られなくなってしまうのも残念。


そしてこのタイミングで、新しい日本語書籍も出ています。
ようやく Pd が日の目をみる時がきたのでしょうか?


2012年8月11日土曜日

ハンドルをまわそう


ハンドルをまわす。
ただそれだけ。

そんなインターフェイスの提案です。

つまみが一つあるだけ、というBOX。
これだけでも、Maker 諸氏には受けが良いのですが、、、



さらに素敵なアタッチメントをつけることで、ハンドルに変身!



このアタッチメントの正体は六角レンチとなべの取手(両方ダイソー)。

初出は MOSAの新年会(2012/1/26@渋谷) で、まわりに居た人にデモをおこないました。

iPhone のDock ポート仕様になっていますが、、、



中に YAMAHA のMIDI インターフェイスが内蔵されています。
Dock 延長ケーブルを使うと、あたかもDock 機器を自分で開発したかの様に!

つまみは回転検出用のロータリーエンコーダーです。
Fio、LiPo バッテリー、、、これ実はテトラコントローラーの1/4版です。

元々の出発点は、博物館などにある、「映像と連動するハンドル」を作りたかったのですが、いろいろと活用できそうです。

今回は メロディを鳴らすMusic Handle にしてみました。
あらかじめ用意した音の列を、回転速度に合わせて、再生します。
音が小さいですが、圧電スピーカーを直接駆動して、BOX から音が出ています。




皆さんには思い出のハンドルはありますか?
これを持って、何に使えるか、どんなものを思い出すか聞いて回った所、
これまでで一番の答えは「昔、水門をあける仕事してたよ」でした! ステキ!!

2012年1月28日土曜日

MIDI Library for Arduino 1.0


Arduino でMIDI を扱うネタはこれまで何度か紹介しています。
今回は Arduino IDE 1.0 でMIDI ライブラリを使う方法を紹介します。
回路はこちらのシールドを使用します。

MIDI 送信は標準のサンプルがあります。
File > Examples > 4.Communication > MIDI

以前のサンプルと異なり、
Serial.print(val,BYTE);
ではなく、
Serial.write(val);
を使っています。
BYTE を指定する書き方は、Arduino 1.0 IDE ではエラーになるので、以前の書き方で作ったスケッチは修正する必要があります。


受信には、MIDI メッセージのパースが必要なので、ライブラリを使います。
MIDI のライブラリは Arduino Playground で紹介されている Arduino MIDI Library と、以前紹介した Tymm's MIDI Library などがあります。
Playground の MIDI Library v3.1 はまだ1.0 対応していないようです(簡単な修正で使えます)。

Tymm's MIDILibrary は1.0 テスト版があるので、こちら紹介します。

サンプルコードは MidiSendExample、MidiReceiveExample、MidiPneumaticsExample があります。
(Pneumatics は内容が良くわかりません。)

MidiReceiveExample を使ってみましょう。
MIDI の送信は iOS アプリとMIDI アダプタを使って、iPod Touch から行ないます。

このサンプルは Note On メッセージで LED On、Note Off でLED Off という簡単なものです。
これは、MIDI 対応 鍵盤アプリを使って簡単に試す事が出来ます。(例えば bs-16i など)。



次に、MIDI スライダーを使って、LED の明るさをコントロールしてみましょう。
スライダーが使える iOS アプリの Touch OSC または、MIDI Monitor などを使います。


MIDI Monitor の Mixed Control では CC #11 からCC #16 がスライダーに割り当てられています。


Touch OSC の Simple Layout はCC #0からCC #3 が スライダー(縦)に割り当てられています。


CC (ControlChange) メッセージ を受け取るには、handleNoteOn, handleNoteOff などにつづいて、handleControlChange を実装します。
(コメントアウトされた状態で用意されています。)


例えば
void handleControlChange(unsigned int channel, unsigned int controller, unsigned int value){
if (controller==0 || controller==11){
analogWrite(3, map(value,0,127,0,255));
}
if (controller==1 || controller==12){
analogWrite(5, map(value,0,127,0,255));
}
if (controller==2 || controller==13){
analogWrite(6, map(value,0,127,0,255));
}

}

この例では、CC #0 またはCC #11 で 3番ピンを、CC #1 または CC#12 で 5番ピンを、 CC #2 または CC #13 で6番ピンを、それぞれ PWM 制御しています。
PWM の使えるピンは 3,5,6,9,10,11 の6本なので、これらのピンを使ってRGB 制御をすることができます。(→こちらの記事参照)
MIDI で送るデータは、0から127 の128 段階なので、map 関数で0から255 に範囲を変えています。(128段階なのは変わりません)

Note On/Off や ControlChange 以外のMIDI メッセージもこのライブラリで扱う事が出来ます。
何を何に割り当てるかは自分で自由に決められるので 本来のMIDI の枠に捕われずに使って良いと思います。



2011年7月21日木曜日

MIDI 受信回路

MIDI の送信回路はとても簡単ですが、受信側はフォトカプラを使って受ける必要があります。MIDI は古くから自作派の人々に愛されて来たので、回路例はネット上に沢山あります。

フォトカプラをいろいろ試している例が散見されますが、少々高くても定番品を使うのが無難でしょう。

ど定番の 東芝 TLP552 は千石電商で220円でした。

メーカーのサイトにある、フォトカプラ・フォトリレー [PDF](東芝セミコンダクター)というカタログから引用します。手に入るなら、この欄のやつどれでも良いと思います。


MIDI の回路も載ってますが、、、コネクタがいい加減で悩みます。


ちょっと書き直しました。(実際に使った定数です。)外付けのダイオードは普通の汎用小信号用で良いそうなので、秋月で50本100円の1N4148 にしました。


ピンアサインは以前にも使ったこの図を参考にしてください。

フォトカプラがちょっと高いですが、これでMIDI シールドも不要ですね。

もうひとつの定番、SHARP の PC900V というのも買ったのですが、まだ使っていません。マルツで115円でした。(いつのまにかマルツ電波からマルツエレックに名前変わったんですね。)
置き換えは、上の回路図の1kΩのところを280Ω にすれば良いようです。(280って中途半端なので270とか、近い値で良いはず。)ピン配置などはデータシートで確認して下さい。

2011年7月14日木曜日

MIDI によるLED カラーコントロール


前回とほぼ同様の内容です。
前回は明るさの制御をしましたが、LED コントロールと言ったら、やっぱりRGB 制御です。

最近はいろんな色のLED (夕日色とか) が出てきましたが、原理的には3原色(RGB) をコントロールすることで、好きな色を作る事が出来ます。

今回は 100均(ダイソー) で買ったレイボーライト(7色+グラデーション)を外部制御します。


これで100円。電池も入ってる。フルカラーLED も安くなったなーと思って中をあけたら、単色のLED が3つ入ってました。どっちが安いのだろう、、、




arduino 側のプログラムは前回とほぼ同様。
MIDI のスライダーを受信して、PWM 出力( analogWrite() )に割り当てています。
点滅には Timer2 を制御するライブラリのMSTimer2 を使用しています。
(Timer2 を使うと、PWM3, PWM11 が使用できないので注意。ハマりました。)

MIDI 受信回路はシールドを使わず、バラックで組んでみました。(回路図後日)



MIDI アダプタは前回はYAMAHA だったので、今回はLine6 のアダプタでやってみました。
YAMAHA のアダプタは見た目になんだかわからないので、こちらの方が好きです。


2011年7月12日火曜日

MIDI アダプタで送受信


これまでは「MIDI アダプタを使って、iPhone 用のソフト音源を鳴らす」という事をやっていました。

この MIDI アダプタを使えば、送信と受信の双方向に通信ができるはず、、、
ということで、送受信のデモができるアプリを探してみました。

TouchOSC (600円)
OSC (Open Sound Control) のコントローラソフトとして有名。
Mac 上のソフト(TouchOSC Editor) を使って画面レイアウトを作ることができる。
Core MIDI, MIDI Mobilizer 両対応。
(古いバージョンを使っていた場合、アプリをバージョンアップしても MIDI 対応でない古いレイアウトを引き継いでしまう様です。
 その場合はアプリを一度削除して再ダウンロードするか、新しいバージョンのTouchOSC Editor から、新しいレイアウトを転送します。)


MIDI Monitor (無料)
MIDI 信号の内容を表示する。無料なのでとりあえず入れておくべき。スライダーやボタンが使える。
Core MIDI, MIDI Mobilizer 両対応。

MIDI アダプタも2つ持っているので、上記ソフト同士をMIDI 接続して送受信などのテストを行いました。とりあえず期待通りに動いています。




動画はYAMAHA のiMX-1 とTouchOSC の組み合わせで、Arduino の Analog Input に繋いだスライダーの読み取りと、LED のPWM 制御を行っています。


Arduino のMIDI 送受信はこちらの記事を参考にして下さい。

2011年7月8日金曜日

iPhone 用 MIDI アダプタ




当サイトに何度か登場している iPhone 用レガシーMIDI アダプターの「Line6 MIDI Mobilizer」ですが、ヤマハから同種の製品「YAMAHA i-MX1」が登場しました。

特徴は、なんと言ってもCore MIDI 対応。MIDI Mobilizer は iPhone がCore MIDI をサポートする以前の製品なので、独自API でした。
現時点ではCore MIDI / MIDI Mobilizer 両対応のアプリも多いですが、MIDI Mobilizer 対応のアプリを作るには Line6 と別途契約(無料) が必要なため、今後は Core MIDI のみをサポートするアプリが増えてくるのではないでしょうか?MIDI Mobilizer も Firm Ware のアップデートでCore MIDI に対応できないのかな?

※(追記)Line6 から、Core MIDI 対応の MidiMobilizer II が出ました。


付属のケーブルは 丸形DIN 5ピン <-> 2.5mm ステレオ超ミニプラグ(笑) です。
両製品とも同じコネクタ、同じ長さ(約1.5m) で、ピンアサインも同じでした。




YAMAHA のケーブルは細身でプラグもコンパクトです。個人的にはMIDI Mobilizer のケーブルの方がしっかりしてて良いかなと。金メッキだし。(MIDI なので音が良いとか、そういうのはないですが。)
本体形状も YAMAHA の方がコンパクト。ピアノブラックはカッコいいですが、傷つきやすそう。欲を言えば Dock直さしアダプタではなく、短いひも付きのドングルの方が良かったです。さらに欲を言うと外部給電端子が欲しい、、、

既にMIDI Mobilizer を持っているので、これは必要なかったのですが、表サイトで告知している DEMOsa の発表内容とぴったりだったので、買ってしまいました。
同時にTENORI-ON を始めとする YAMAHA 純正アプリがいくつか出ていますが、未購入。
そろそろ DEMOsa のデモで使うソフトを決めないと。。(できれば無料アプリがいいのですが、、、)


2011年5月26日木曜日

XBee を使ったWireless MIDI 送信

以前、XBee のAT コマンドによる設定で、通信速度を任意の値に設定できることを紹介しました。
MIDI の速度(31.25kbps) にセットすれば、原理的にはMIDI も飛ばせるはずです。
タイミングがずれたり、データの取りこぼしがあると演奏が台無しなので、実用にはならないかも知れませんが、実験してみます。
(MIDI は NOTE OFF が取れなくて音が鳴りっぱなし、ということが良く有ります。)

まずは XBee (series 1) のATコマンドの要点を復習します。

・+++ を送り、1秒経過後に AT コマンドモードに入る
・ATCN を送るか、最後のコマンドから 10秒たつとATコマンドモードを抜ける
・ATBD で通信速度を変更した場合、AT コマンドモード終了時から、新しい通信速度になる
・ATWR で設定保存をしない場合、電源OFF で元の値に戻る

ここで重要なのは、「31.25kbps」という値が一般的なものではない、という事です。
Arduino IDE や CoolTerm では31.25kbps の通信ができないため、一度設定すると接続できません。※Arduino を使って戻す方法を後述します。
XBee の設定値は ATBD に続けて16進数で入力します。(31.25kは 31250、16進数では 0x7A12です。)

今回のコマンド入力の流れ

+++ :1秒まつ
ATBD7A12:通信速度の設定コマンド(7A12 は 31250 bps)
ATWR:設定保存コマンド
ATCN:コマンド終了


これを、送信側・受信側、2台のXBee に行います。


構成はこのようになります。




Fio は電源として使っているだけなので、プログラムは不要です。
(受信側は純粋なXBee モジュールだけで OK です。)

Arduino Uno のプログラムはこの回と全く同じです。
実際に音を鳴らしているのは、iOS App のbs-16i です。詳細はこの回を参照して下さい。





追記:Arduino によるXBee の通信速度設定です。31.25kbps を選択できるシリアルターミナルはないと思うので、元の設定に戻すときにこれを使いました。(Serial.begin の値が現在の値、ATBD が変更後の値です。)

//
// XBee baud rate settings using AT Command by Arduino.
// This sample set baud rate from 31.25kbps to 57.6kbps.
//

void setup() {
pinMode(13, OUTPUT);
digitalWrite(13, HIGH); // LED on

// Set MIDI baud rate:
Serial.begin(31250); // XBee's current baud rate.

delay(1000);
Serial.write("+++"); // Enter AT command mode.
delay(2000);


Serial.write("ATBD6"); // Select baud rate for XBee.
Serial.write(0x0D); // Send Carriage Return code.

// ATBD3 :9600
// ATBD4 :19200
// ATBD5 :38400
// ATBD6 :57600 ... for Firmata, for Fio wireless programming
// ATBD7 :115200
// ATBD7A12 :31250 ... for MIDI


delay(2000);
Serial.write("ATWR"); // Save settings.
Serial.write(0x0D);
delay(2000);
Serial.write("ATCN"); // Exit AT Command mode.
Serial.write(0x0D);
delay(100);

}

void loop() {
digitalWrite(13, HIGH); // LED on
delay(1000);
digitalWrite(13, LOW); // LED off
delay(1000);
}


2011年5月21日土曜日

Arduino Uno DFU プログラミング

***(9/28)追記:Arduino Uno R2 というバージョンが出たので、こちらも参考にしてください。
***


Arduino Uno とそれ以前のArduino シリーズでは、USB シリアル変換部が異なります。以前は FT232RL という専用IC でしたが、Uno は atmega8u2 という、AVR マイコンを使用しています。

これまで、特に意識せずに使って来ましたが、このマイコン自体もプログラミング可能です。USB HID (キーボード、マウス、ジョイスティック)やUSB-MIDI などのデバイスも作成可能とされています。

もともと、そこに興味があってUno を購入したのですが、Arduino IDE とは別にAVR の開発環境が必要だったり、書き込みのためのプログラムが必要だったりと、不明な点が多々有り、手を出せずにいました。
最近、制作例やドキュメントがWeb 上にあがってきたので、挑戦してみます。

参考にしたのは以下のサイトです。

Arduino.cc - Updating the Atmega8U2 on an Uno or Mega2560 using DFU

darran さんのArduino Hacking

Arduino.cc - MIDI Note Player using the MIDI firmware for the 8U2 (Uno and Mega2560 only)


言葉の整理
通常のArduino 開発で使わない用語が出てくるので、解説します。

DFU (Device Firmware Upgrade) モード:atmega8u2 のプログラムを書き込むモード。
Arduino Uno の atmega8u2 には「DFU ブートローダ」が書き込み済みで、AVR ライタなどがなくても、通常のUSB 接続でプログラムを転送することができます。

LUFA (Lightweight USB Framework for AVRs) :AVR 用の様々なUSB デバイスクラスのライブラリを公開しているプロジェクト。

dfu-programmer:Mac でDFU モードのAVR デバイスにプログラムを転送するためのソフト(コマンド)。
MacPorts のdfu-programmer は0.5.2 で、このバージョンではNG かと思ったのですが、このバージョンでの実行例がArduino.cc にありました。

HEX ファイル:コンパイル後のプログラム、AVR に転送する。

atmega8u2 を書き換えてしまうと、メインのatmega328p にプログラムの転送ができなくなります。
ICSP などの手段が無い場合は、メインプログラムの更新時に再度 DFU モードでUSB シリアル変換のプログラムを書き込みます。

・Arduino-Uno オリジナルの USB-Serial 変換用HEX (Arduino-usbserial-uno.hex)
 Arduino IDE のバンドル(Arduino.app)の中にもあります。

・darran さんのキーボード用 HEX Arduino UNO Keyboard HID version 0.3 (Arduino-keyboard-0.3.hex)

・morecat_lab さんの MocoLUFA (MIDI.hex)

書き込み手順
1) Arduino のメインプログラムをatmega 328p に書き込む
2) atmega8u2 をDFU モードにする (→参考:http://arduino.cc/en/Hacking/DFUProgramming8U2)
3) atmega8u2 にプログラムを転送する

Arduino プログラム更新手順
1) atmega8u2 をDFU モードにする
2) atmega8u2 にUSBシリアル変換のプログラムを転送する
3) Arduino のメインプログラムをatmega 328p に書き込む
4) atmega8u2 をDFU モードにする
5) atmega8u2 にプログラムを転送する


非常に面倒なので、本格的にデバッグすることを考えると、別の書き込み手段が欲しくなりますね。


iPad Camera Connection Kitで iPad に、USB Keyboard やUSB MIDI として認識させることができました。

残念ながら、このアダプタはiPhone/iPod Touch では使用できません。また、あまり大きな電流を取ることができません。

2011年5月17日火曜日

Puredata で簡易サンプラー その3

その1 で作った簡易サンプラーに音階をつけてみました。


もともと、再生速度を変えられるようにしていたので、それを使っています。
1オクターブ上の音は周波数が 2倍になるので、再生時間を2倍にします。
その中間の音は、平均率の場合、 n 半音上の音は 2^(n/12) 倍にします。(12半音=1オクターブ で2倍になる)

C とかD とか、音名が振ってありますが、録音した音を C とした、相対音階です。
(音程の調整はしていません。)

サンプラーの呼び出し部は、それぞれの音毎にあるので、外部サブパッチにまとめました。


鍵盤状にBang を並べて、MIDI 入力にも対応させました。

MIDI を使うときは、Pd-extended メニューの Preferences から、MIDI settings ... を設定します。

上手く行かないときは、Media メニューの Test Audio and MIDI もチェックしてください。



このMIDI はケロミンを想定しています。
ちょっと大掛かりですが、これでケロミンを自分の声で演奏することができました。



2011年4月17日日曜日

Fritzing を使ってみた

Fritzing はArduino 系のweb ページによくある回路図(実体配線図)が描けます。
今回初めて使ってみました。

ここからMac 版 (Mac OSX 10.5) をダウンロード。すでに日本語化もされています。
配線図だけでなく、回路図、PCB の図面も作成できるようです。
Arduino やブレッドボードが部品として登録されているのが面白いですね。

私の環境(Mac OSX 10.6) では書き出し(エクスポート)がうまく行かず、、、

PNG やPDF、JPG では、点だけになったり、部品が欠けたりしてしまいました。
「SVG 用」というので、上手く書き出しできました。(白い線が消えてしまいましたが)

SVG はSafari で開けるので、Safari からプリントプレビューをしてPNG に変換したのが上の図です。
この程度ならアプリ画面のスクリーンショットで充分ですね。

内容は前回のMIDI Theremin です。


2011年4月16日土曜日

MIDI Shield その4



簡単なセンサーを付けて、MIDI を鳴らす実験です。
よくあるテルミンもどき。
センサーは秋月で売ってるシャープの距離センサー : GP2Y0A21YK

MIDI Shield と言いながら、シールドが無くなってます。
MIDI の送信だけならば、抵抗だけで作れます。
(Sparkfun の回路図はコネクタのピン番号が間違ってるので要注意)

MIDI は5pin のコネクタのうち、3pin しか使っておらず、MIDI Mobilizer では2.5mm の3極ミニプラグを使用しています。(正式名称は「2.5mm ステレオ超ミニプラグ」)

Arduino 側もそれに合わせてみました。
折角なので(ギターの)シールドっぽいケーブルにしてみました。



2011年4月12日火曜日

MIDI Shield その3

前回までに、Arduino のMIDI 送受信ができるようになりました。
これで楽器を作るのも良いのですが、当サイトの目的に、iPhone とArduino の通信があります。

実は、iPhone には LINE6 MIDI Mobilizer という、Dock コネクタに差すMIDI インターフェイスがあります。
これを使うと、iPhone でMIDI の送受信ができるようになります。
iPhone, iPod Touch, iPad で使えます。

対応ソフトは App Store からダウンロードします。メーカー(Line 6) 純正のSDK もあるので、頑張ればコマンド主体の通信ソフトを作れるかもしれません。

とりあえず、MIDI Mobilizer 対応ソフトの1つ、bismark さんの bs-16i を使ってみました。
サウンドフォント対応で、音色を変える事が出来るソフトシンセです。
(こちらに紹介記事あり)


Arduino から、Note ON, Note OFF を送り、bs-16i (iOS ソフト) を鳴らしているところです。
有線方式の通信手段として、使えるのではないでしょうか。

MIDI Shield その2

Arduino によるMIDI 通信の紹介です。

前回は送信だったので、今回は受信を行います。
基本的には普通のシリアル通信ですが、MIDI のメッセージを扱うためには、外部ライブラリが必要です。

私はtymm さんの Arduino MIDI Library を使っています。現時点での最新版はver1.2.2 です。
ダウンロード&解凍したフォルダをlibrary に入れます。(→こちらの記事を参考にして下さい)

サンプルをコンパイルすると、こちらもIDE ver 0022 ではエラーになります。


error: 'Serial' was not declared in this scope

こちら(オフィシャルページ)によると、以下のコードを先頭に追加すればよいそうです。

#include "WProgram.h"

(※コピー& ペーストの際にダブルクォーテーション " が別の文字に化けることがあります。)
これで受信もできるようになりました。


このライブラリに付属するサンプルは、メッセージを受信するとLED が点灯するだけなので、LCD を繋げて受信したメッセージを出すようにしました。


基板の向きがおかしいのは気のせいです。

MIDI Shield その1

Arduino のMIDI 通信を紹介します。


MIDI は主に電子楽器を接続するための規格で、演奏情報(何番のキーをどの強さで押した、など)をやりとりします。
MIDI メッセージを受けて音を出す装置(MIDI 音源) や、演奏情報を保存した音楽ファイル(SMF: Standard MIDI File)などもMIDI の仲間ですが、このMIDI Shield でできることはMIDI 信号の送受信だけで、音はでません。

sparkfun のMIDI インターフェースボード はMIDI IN, MIDI OUT, MIDI THRU の3つの端子があります。あとはフォトカプラが付いているだけで、MIDI メッセージの処理はすべてArduino 側で行います。

MIDI の送信は、Arduino IDE に標準でサンプルコードがついています。

File > Examples > 4.Communication > MIDI

低い音から高い音へ半音ずつあがるサンプルです。31.25kbps でシリアル通信を行っているだけなので簡単です。
IDE ver 0022 のサンプルはバグがあり、コンパイルするとエラーになります。


対処法は、エラーが出ている「int note」の間に半角スペースをいれてください。


PC とUSB MIDI インターフェイスで接続します。(写真はRoland UM-1。古い。)

MIDI 入力で音を鳴らすソフトを使用します。Mac なら標準でついているGarageband で鳴らせます。


ソフトウェア音源で音が鳴れば成功です。