日本語が、大好きです。(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 November >>

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
 なんとかハルヒのかんとかってアニメが「同じスジでコンテと作画が違うだけの回を延々くり返している」アニメを放映していて、一部のファンが激怒、既にスタッフでも無い奴が何故か謝罪とかする騒ぎが起きているらしいですが、世の中はそんな事とは関係なく平和です。2回分だけ見ました。凄く面白い試みなんですが、7回転全く同じ速度で回っているのが残念ですね。尺の決まってるアニメだから仕方ないんだけど。後半に行くほど早廻しして、文脈とかを崩して行ってたら面白いのになあって思った。

 そんなわけで、ArduinoでのMIDI出力の続き。Arduinoってなんぞやって方は、この日記のタグをクリック。先日までの作業は以下。

配線図
プログラムを組む
配線をする

 ってなんで、今日は実際にプログラムを実行してみる。



 ArduinoとPCをUSBで繋いで、コンパイル済のバイナリをArduinoに送信。これでサックリ動けばかなり未来は明るいハズ。・・・っと思ったんだけど、やっぱり動かない。まあ、そこまで簡単だとは思ってないけど。

□チャネル指定を間違えていた
先ず間違えていたのが、MIDIのチャネル。MIDIのチャネル指定って1~16まで指定できるんだけど、このライブラリで指定する際は0~15で指定する。つまり僕がチャネル1と思って設定していたのは実際はチャネル2だった。考えてみたら当然だよね。運が悪い事に、試験で使ったElectribe Aのチャネルが1,3だった。ここの定義を変えたら、音は出た。音はね。

□音はでたものの・・・。
 作ったプログラムは、noteの値を0~256まで順に送信するプログラム。つまり「ドド#レレ#ミファファ#・・・」と鳴るハズ。ところが、音が歯抜けする。「ド・・ファファ#・・シ」みたいな感じ。うーん、感覚的には通信速度が微妙に噛み合ってない様に感じる。

□Denkitribeさんのプログラムをパクる
 とりあえず、こういう時は先人の知恵を借りようって事で、Denkitribeさんはどうしてるんだろうと思って探したらちゃんと記事があった。

■ArduinoでMIDI制御
http://d.hatena.ne.jp/KZR/20090716/p1

 なんと、DenkitribeさんはSerialライブラリを使って、MIDI信号を自力で送信してる。スゲェ。これを参考に・・・・っていうか回路図見たら僕が作っているのと全く同じだから、ソースを丸パクリした。これで、鳴らない原因が回路なのかプログラムなのかの切り分けがつく。結果は・・・・


動いた!

つまりアレだ。ライブラリの使い方がおかしいって事だ。自分の使い方でどういう挙動になるのか、MIDIライブラリの中と、denkitribeさんのコードを見比べる。MIDIライブラリは送信関数を呼ぶと先ずリングバッファに値を突っ込んで、それを別な関数で送信レジスタに入れてるんだねー。・・・って事は、どっかで送信用の割り込み(おそらくタイマ割り込みの様な)をしているハズ。・・・と、割り込みの設定箇所を見たら謎が解けた。このMIDIライブラリ、オブジェクトを自分で定義するんじゃなくて、ヘッダで定義されてるMidioutを使うんだ!早速修正。。。っていうか、送信部分は何故かMidioutを使ってた(これが「音だけは出た」原因)ので、初期化部分だけ修正。バイナリをArduinoに送ってみると




 動いた!動いたよ!!クララが立った!!クララが立った!!(山羊と一緒に小躍り)


 動いたついでに、Denkitribeさんのソースと見比べをしたおかげで、後で調べようと思ったnoteと音階の対応も取れた。これで随分と躍進しました。イャッホウ。

 次は入力を付けるか、MIDIクロックを付けるか。。悩む!

Recent Entries from Same Category









    
処理時間 0.697168秒