半音上げを実装していきます。
1. JSON文字列による問題
JSON文字列それ自体は非常に優秀なのですが、Arduino の処理速度とは不釣り合いなのか、長く多様なビット列を送るため(?)転送が遅くなり、
音が細切れになってしまいます。そのため前回のコードでは、ボーレートを最大の250000まで上げ、play 関数内の引数 sustain を0.3にすることでこれをごまかしています。sustain を上げると一音が長くなり、これは同時に
反応の鈍さを意味します。こうした事態はできれば避けたいのですが、いろいろ試してみても改善できませんでした。
2. 半音上げの実装
といった問題点は一度忘れて、今回は半音上げを実装します。キット内の
タクトスイッチを使って、押している間は半音上がるという仕組みにします。タクトスイッチはデジタル入力なので実装もとても簡単、前回のオクターブ上げの復習みたいな感じでできました。それよりも面倒だったのが「半音上げ#はミとシには無い」ということでしょうか。おかげで分岐書き換えがしんどかったです。
sharp = 0
if buttonsum > 0:
octave = 's' + octave
tone = tone + 1
sharp = 1
前回設定したoctave 文字列にシャープを表す小文字のsを足します。シャープはtone + 1で表されるため、これを tone に代入し、sharp 変数で現在シャープ状態なのかを判定します(ミやシのため)。
if sharp == 1:
tone = tone - 1
octave = octave[-1]
手のかかるミやシの分岐では上のようにします。もしシャープ状態なのであれば、tone を元に戻し、octave からsを抜いたものを代入しなおします。
これで結構な曲が弾けるようになったんじゃないでしょうか!しかし、先述の
遅延による演奏しにくさに加え、そもそも
テルミンという楽器の難しさからか、思い通りに演奏するのは非常に難しいという結果に終わりました……。
|
心なしか哀愁が漂っている |
「音の出るもの」は作れましたが、自由に演奏できずに楽器は名乗れません。この装置は
Ardubone という仮名がありました。この状態からさらに押したり引いたりできる機構をつけ、まるでトロンボーンのように演奏できる楽器になる予定だったのです。残念ながら Ardubone の活躍はここで終わりですが、彼のおかげでたくさんのことを学べました。Ardubone に感謝しつつ、次作る楽器はよりよいものにしようと決意しました。
0 件のコメント:
コメントを投稿