2017年3月2日木曜日

Raspberry Pi と Arduino で楽器作り(8) - さよならArdubone

半音上げを実装していきます。


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 件のコメント:

コメントを投稿