YMZ294を追加しました
前回のMIDI音源プログラムに音源ICとしてYMZ294を追加しました。
ソースコードはv2.0.0としてタグ打ちしました。
GitHub - nyannkov/nano_midi: usb midi and cdc device running on Longan Nano
外観はこんな感じです。
なぜ両面スルーホールの表側でもスズメッキ配線をしてしまったのか。
作成完了寸前にこの過ちに気づき、作り直そうか考えましたが
面倒くさすぎるので諦めました。
とりあえず短絡しないように裏側のスズメッキ線をちょっぴり浮かせて紙を差し込んでいます。
【追加】2020/6/7 youtubeに演奏している様子をアップしました。 www.youtube.com
回路図
回路図です。
シフトレジスタは秋月で一つ30円のSN74HC164Nを使用しました。
また、YMZ294のマスタークロック(φM)は、クリスタルオシレータではなくLongan Nanoのタイマー出力としました。
音色の制御について
今回はプログラムチェンジに対する処理は実装せず、MIDIチャンネルごとにエンベロープの形状や周波数、ノイズ/トーンの選択などを設定するようにしました。
以下の図は各MIDIチャンネルに対する設定情報になります。
記号 | 内容 | 値の範囲 |
---|---|---|
ch | MIDI チャンネル(本来のチャンネル番号から1差し引いた値) | 0-15 |
en | チャンネルEnabled(falseの場合、MIDIメッセージを無視する) | true/false |
mx | ミキサー設定 | noise/tone |
em | エンベロープモード(onの場合、エンベロープ発生器で音量制御する) | on/off |
es | エンベロープの形状(レジスタ$0Dに対応) | 0x00-0x0F |
ep | エンベロープ周波数(レジスタ$0B-$0Cに対応) | 0x0000-0xFFFF |
np | ノイズ周波数(レジスタ$06に対応) | 0x00-0x1F |
設定変更についてですが、例えばMIDIチャンネル10を有効化し、ノイズ周波数を0x10に設定したい場合、コマンドは以下のような書式としました。
:ymz294 -ch 9 -en true -np 0x10
":ymz294 -ch 番号" の後に、設定値を記述していく感じです。
デフォルト値はチャンネル10(パーカッション)以外を有効とし、エンベロープモードは全てoffとしました。 なお、設定の保存処理は未実装ですが、そのうち実装しようと思います。