前回の続きです。
今回はちょっとプログラミングのお話
まずArduinoで使用する言語はC言語とC++の一部
ライブラリも豊富にあります
今回シンセサイザーガジェットを製作するにあたりMozziというライブラリを使用しています
Mozziは合成音声に特化したライブラリでArduinoでのシンセサイザー開発には欠かせないライブラリです
よし!これで早速シンセサイザー!
というわけにはいかず。。。
まずは仕組みを作っていってシステム構成を考えなければなりません
覚えること勉強することもめちゃくちゃある
最初に私(Ximoto)はシーケンサー部分とシンクに注力してました
シンク機能は絶対つけたいという思いがありました
だって単体で動いたってつまんないじゃん
NO-XIシンセ(仮)ではシンプルというコンセプトがあったのでデカイ端子は無しということでMIDI端子は使わず3.5mmミニプラグによるパルス信号でのシンクにしようということになりました
これはkorgさんのvolcaシリーズやteenage engineeringさんのpocket operatorシリーズでも同じ規格が使われているのでこの辺と同期が取れたら楽しいということで決まりました
まだ調整中で仕様変更はあるかもしれませんがコードはこんな感じ(抜粋です)
1 2 3 4 5 6 7 8 9 |
#define SYNC_IN 2 unsigned long syncIn; unsigned long time1; unsigned long time2; time1 = pulseIn(SYNC_IN, HIGH); time2 = pulseIn(SYNC_IN, LOW); syncIn = time2/1000 + time1/100; kDelay.start(syncIn); |
kDelayというのはMozziライブラリで使用するEvent.delayという関数でdelay関数の代替えです、これでシーケンスを動かしたりします
pulseInはArduino標準の関数です
信号5Vが入力されるとHIGH、信号の入出力がなければLOW
それぞれの時間をマイクロ秒で返してくれます
パルス信号の入力があった時、パルス信号の立ち上がりから次のパルス信号が始まるまでの時間を計測すればBPMが作れるはず
ということで両方を計測して足し算します
Event.delayはミリ秒を扱います
これって単純に扱う単位が変わるだけで数字が変わらないから、例えば1000マイクロ秒をEvent.delayが読むと1000ミリ秒として扱っちゃう
だから1000マイクロ秒を1ミリ秒にしたければ割らなきゃならない
パルスの時間HIGHはvolcaの場合公式では15msなど、基本短いので割り算も一桁少なくしています
これで帳尻があってパルスの時間が計測できます
この辺はduty比でも変わってくるかもしれませんが。。。
まだもうちょっと実験が必要です
今日はここまで
疲れた〜
コメント