日本語が、大好きです。(Sorry, Japanese Only.)
  1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30     
<< 2024 April >>

no fun nolife
NEW ENTRIES
RECENT COMMENTS
CATEGORIES
rss
 はてなアンテナに追加
 はてなRSSに登録
 Bloglinesで閲読登録
 Subscribe with livedoor Reader
 Add to Google
 My Yahoo!に追加
LINK
ARCHIVES
music
LOGIN
現在のモード: ゲストモード
USER ID:
PASS:
logout
というわけで、ついにできた、ArduinoによるMIDIコントローラ。名付けて「アルペジエー太1号」機械側から、機器のスタート/ストップ、クロックが出てきて、それに前回の可変抵抗によるスケール出力を合わせて出す。

 なんか、最後の追い上げ的に動くところまで作ってしまったけど、MIDIクロックの吐き出しを出来るようにしたので、それについて書いていきたい。最新の「Make:vol.09」を参考に、あと、ウィキペディアのMIDIの項目も。

 ウィキペディアを調べてみると、MIDIクロックというのは「タイミングクロック」という名前で、どうやら0xF8をタイミングに合わせて投げればいいらしい。投げるタイミングは、前回の「タイマ割り込みを使う」で作ったタイマ割り込みを使う。タイミングクロックの仕様は「4分音符ごとに24カウントされる。」となっているので、前回のタイマ割り込みでは遅くなってしまう(前回は16分で割り込みをしていたので)。

 つづきます。



// タイマ割り込み設定(bpm)
void setTimerBpm(void (*isr)(),int bpm)
{
// bpmから割り込み時間を計算、割り込み関数を定義する
// = 1分/bpm    (1分間に刻むビート)
//   * 1000000  (μ秒)
// = *4 (1拍を4分割)

    long time = (60 * 1000000) / bpm / 24 ;// 変更

    Timer1.initialize(time);        // 割り込み間隔を設定
    Timer1.attachInterrupt(isr);    // コールバック関数を設定

}

 「なんで24なの?」って言うのは良く判らないが、たぶん3拍子にも対応するためだと思う。

 ついでに、スタート/エンド(0xFA/0xFC)の実装も。


 それぞれの吐き出しは、Midioutクラス()のsetSendByte()関数を使ういます。ええ?それだけ?それだけでした。簡単だ!!!


// スタート
Midiout.setSendByte(0xFA,ON_FULL_WAIT);

// ストップ
Midiout.setSendByte(0xFC,ON_FULL_WAIT);

// クロック送信
Midiout.setSendByte(0xF8,ON_FULL_WAIT);



そしてできたのがこれ。



ダイアル一個と、ボタン4個だから、オペレーションとしてはこれが限界かなあ。これを足がかりに作りやすい形を整えよう(クラスとか)

さて、次はどういうのを作ろうかな!

Recent Entries from Same Category









    
処理時間 0.626882秒