YMZ294を追加しました

前回MIDI音源プログラムに音源ICとしてYMZ294を追加しました。

ソースコードはv2.0.0としてタグ打ちしました。

GitHub - nyannkov/nano_midi: usb midi and cdc device running on Longan Nano

外観はこんな感じです。
f:id:nyankov:20200602215924j:plain

なぜ両面スルーホールの表側でもスズメッキ配線をしてしまったのか。

作成完了寸前にこの過ちに気づき、作り直そうか考えましたが

面倒くさすぎるので諦めました。

とりあえず短絡しないように裏側のスズメッキ線をちょっぴり浮かせて紙を差し込んでいます。

【追加】2020/6/7 youtubeに演奏している様子をアップしました。 www.youtube.com

回路図

回路図です。

f:id:nyankov:20200603221408p:plain

シフトレジスタは秋月で一つ30円のSN74HC164Nを使用しました。

また、YMZ294のマスタークロック(φM)は、クリスタルオシレータではなくLongan Nanoのタイマー出力としました。

音色の制御について

今回はプログラムチェンジに対する処理は実装せず、MIDIチャンネルごとにエンベロープの形状や周波数、ノイズ/トーンの選択などを設定するようにしました。

以下の図は各MIDIチャンネルに対する設定情報になります。

f:id:nyankov:20200605153257j:plain

記号 内容 値の範囲
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としました。 なお、設定の保存処理は未実装ですが、そのうち実装しようと思います。

他にもいくつかコマンドを実装しましたが、詳細はgithubwikiにまとめようと考え中です。