MIDI
AVR
FM音源
YMF825
LUFA

YMF825boardをAVRマイコンでMIDI音源化する

FM音源YMF825が載ったボードが発売されたので入手して、AVRマイコンを使いUSB-MIDIデバイスとして鳴らしてみました。

Sound Cloud Town.mid

構成

以前YMF262やYM2151をUSBの複合デバイス(MIDIとHID)としてコントロールしたのですがデバイスドライバやlibusb関係のインストールなど導入が複雑だったので今回はMIDIを2chとし制御に1ch使う事でドライバ関係のインストールを不要にしています。
無題-24bitカラー-03.jpg

ハードウェア

YMF825bordはアンプ内蔵、miniジャックまで付いているので手元にあったAtmega32U4のマイコンボードとYF825boardをSPIとリセット関係の接続をしたのみです。
YMF825.jpg

ソフトウェア(マイコン側)

USB-MIDIのライブラリはLUFAのDual MIDI Device Demo (Class Driver APIs)を使用しました、これはAtmelStudioへインストールしてメニューから選択すれば簡単にUSBデバイスを作れる優れもので他にもHID,CDC,Mouseなどいろんなデバイスをサポートしています。
無題-キャプチャされた画像-02.jpg

MIDIクラスドライバがMIDIメッセージの解読を行ってくれるので、プログラマはMIDIメッセージに対応する処理を作成するだけなので楽にMIDIデバイスが作成できます。

DualMIDI.c
            if ((ReceivedMIDIEvent.Event == MIDI_EVENT(0, MIDI_COMMAND_NOTE_OFF))){
                //ノートオフ
                ch = ReceivedMIDIEvent.Data1 & 0x0f;
                i = ReceivedMIDIEvent.Data2;
                note_off_func(ch,i);

            }

一部の処理(マイコンからYMF825へのSPIの送信割り込み処理、PitchBendの計算)は速度を稼ぐためアセンブリ言語で書き直しました。

MIDIサポート

 Velocity
 Hold
 Expression
 Modulation
 PartLevel
 システムエクルシーブメッセージによる音色送信

PC側ソフトウェア(Javaで作成したToneEditor)

以前作ったToneEditorをYMF825用に改造しました、今更swingアプリケーションです。
演奏と音色コントロールが別々のソフトウェアなので、演奏中にパラメータを触ったりして音色を変化させることが出来音色の編集が大変楽です。
無題-キャプチャされた画像-01.jpg

Java Sound APIを使いYMF825boardへMIDIのシステムエクルシーブメッセージを利用してコマンドを送っています。
こちらの記事が大変参考に成りましたJava Sound でMIDI機器を操る
4バイトのコマンドを上下4bitづつに分解してヘッダを省いた10byteのシステムエクルシーブメッセージにして送信しているので他のMIDI機器にこのデータが流れると何が起こるかは分かりません(^^;)

フォーマット 
"0xf0, COMMAND_hi, COMMAND_lo, DATA1_hi, DATA1_lo, DATA2_hi, DATA2_lo, DATA3_hi, DATA3_lo, 0xf7"


0. YMF825のリセット
1. レジスタへ書き込み DATA1=addres,DATA2=data
2.Playモード設定
  DATA1=0 mono_mode
  DATA1=1 Poly_mode
  DATA1=3 Poly_mode2: 指定チャンネルの+8チャンネルを同時発音させます
5. EEPROM write       DATA1番地へData2を書き込み
6. EEPROM tone read   EEPROMのDATA1番音色データを上位と下位4bitづつに分けた62バイトのシステムエクルシーブメッセージで返す
9. write burst          音色バッファのYMF825へ全書き込み
10. write data and burst 音色バッファをDATA1番地へDATA2を書きこみ後書き込み
11. write data only      音色バッファのDATA1番地へData2を書き込み

感想

YMF825はOPL系と言う事に成っていますがOPL3に比べてパラメータも増えてより変な深い音作りが楽しめます。

ソース

GitHub
shigosenCCneko/YMF825MIDI_CONTROL