MIDI対応 アナログリズム音源 Drumstar

製作:2016年4月29日~5月5日
執筆:2016年5月14日
全景 13年前に作ったエレキットのリズムマシンに新たなパーカッションを追加し、小型化するために新たなパターンを作り直しました。 マニュアルプレイ用のプッシュスイッチが付いているのでMIDIが無くても遊べます。

昔作ったリズムマシンの問題点と今回の改善ポイント

以前リズムマシンを作った時に発生した音源の問題点として3つ挙げられます。

スネア、ハイハット、シンバルの音が全部同じ

フィルタ ハイハット、シンバルのパートにはコイルとコンデンサで構成されたパンドパスフィルタが付いていました。 当時コイルを付けると音が出なくなったと書いていたのですが、つい最近100mHのコイルを100μHと間違えていたことに気づきました。 フィルタが付いていないとスネア、ハイハット、シンバルが全てホワイトノイズになってしまいますが、フィルタを付けると特有の音に変わります。
no filter フィルタなし filterd フィルタあり

MIDIの信号ノイズが音源回路に混入する

TLP552 当時はPICが処理をするときのノイズだと思い、パスコンを付けたのですが結局改善していませんでした。 PICを取り外してもノイズが出るのでフォトカプラではないかと思いいろいろ調べていると、 フォトカプラは回路的に分離されていても静電容量での結合がある事がルネサスの技術解説のページ「汎用フォトカプラ特有のノイズ」に詳しく記載されていました。 TLP552には静電シールドが内蔵されていないため、入力側の電流制限抵抗を大きいものに変更してノイズを低減させることにしました。あまり大きい抵抗にすると入力側が発光しなくなるので2.5kΩくらいが限界です。 下のサンプルでは冒頭でのギギーという音やアクティブセンシングの音がかなり大きく入っていますが、変更後はかなり低減されていることが分かります。
220ohm 220Ω 2kohm 2kΩ

MIDIの処理プログラムにバグがあり、稀に停止することがあった。

どこが悪いのかを探すのが面倒で放ったらかしにしていました。せっかく作ったリズムマシンを使わなくなった最大の原因になっていました。

新しいハードウエア

新しい回路で大きく変更された部分は以下の項目です。
パーカッションのトリガーパルスはアクティブHigh、ノイズジェネレータにはその筋に定評のある2SC828を使っています。

ソフトウエア

ソースリスト Ver.0.06
MIDIの解析プログラムはMidiTalkのプログラムを流用しているため、わずか2日で完成しています。

プログラム中で特にポイントなのが、パーカッションをトリガーするパルス幅生成のためのタイマー割り込みです。 トリガーパルスの幅が短すぎると発音する音量が小さくなり、逆に大きすぎると連打に対する反応が悪くなります。 トリガーパルスをONした後は、0.1msのタイマー割り込みを40回カウントしてからパルスをOFFにするようにしています。 タイマーのプリスケーラで分周比を高くするとカウントのばらつきが大きくなるので、MIDIの受信(0.32ms)に影響を与えない範囲で小さくするよう工夫しました。

MIDIインプリメンテーション

FW Ver.0.03受信備考
ベーシックチャンネル電源ON時1-16自由に定義できる。
リセット・電源オフで初期に戻る。
設定可能1-16
モード電源ON時モード3SysExで複数のチャンネルを受信できる設定が可能なので、モードの概念が無い。
メッセージ×
代用×
ノートナンバー0-127SysExでパーカッションを自由なノートにアサインできる。
ベロシティノートオン1-127SysExでハイハットのベロシティが奇数か偶数かによってシンバルをミュートさせる。
ノートオフ× 
アフタータッチ× 
ピッチベンド× 
コントロールチェンジ7メインボリュームMSB、0の時トリガー動作を行わない。
11エクスプレッションMSB、0の時トリガー動作を行わない。
64ホールド1
0-63の時シンバルのミュート用パルスを送出する。
プログラムチェンジ124-127EEPROMからノートアサインのプリセットを呼び出す。
エクスクルーシブメーカーIDは7Dh、デバイスIDは00h
コモンメッセージ× 
リアルタイム× 
その他アクティブセンシング× 
システムリセット× 

エクスクルーシブメッセージ

リセット電源投入時と同じリセットを実行する。
受信チャンネル定義受信するチャンネルにフラグを立てる。フラグなので複数のチャンネルも受信できる。
ノートアサイン0~127のノートにパーカッションを割り当てる。レイヤーはできない。
シンバルカットの動作シンバルに続くハイハットが来たとき、シンバルを強制的にミュートするかどうかを選択。HHのベロシティの偶数・奇数の条件でカットを行うか、強制的にカットするかが選べる。
他社音源のリセット受信フラグGM1オン/オフ・GM2オン・GSリセット・88モードセット・XGオンを受信した時にリセットを実行する。
ノートアサインをクリア全てのノートのアサインをクリアする。
ノートアサインを保存現在のノートアサインをプログラムチェンジの124~127に保存する。

製作過程で苦労した点


実装
LEDパターン
実装
Drumstar

使用楽曲