Nucleo F401REでFM音源を実装するやつ 外部DACとオペアンプを利用 現在はMCP4922とNJM2737
Dependencies: AOTTrigon I2CEEPROM MCP4922 AQM0802A mbed
Fork of NuMidi401 by
NuFM401
Nucleo F401用の自作ソフトウェアMIDI音源
概要
だいたいそんなもんです。
特徴
- ブレッドボードの上で組める程度には簡単な回路構成
- 外部のDACにMCP4922を採用
- 念のためのボルテージフォロアとしてNJM2737Dを採用
- バンク用EEPROMに24FC1025を採用
- シリアル経由でMIDIデータを受信することで操作
補足
シリアル <=> MIDI のドライバにはHairless-MIDISerialをオススメします。 仮想MIDIケーブルはとりあえずMIDI Yokeで。
Diff: FMOscillator/MIDIChannel.h
- Revision:
- 19:f0dcf591c5dd
- Parent:
- 17:2e577c6000cf
- Child:
- 20:8278e607a687
diff -r b20fdf1da8f8 -r f0dcf591c5dd FMOscillator/MIDIChannel.h --- a/FMOscillator/MIDIChannel.h Tue Jan 27 13:25:14 2015 +0000 +++ b/FMOscillator/MIDIChannel.h Thu Jan 29 11:05:37 2015 +0000 @@ -2,11 +2,13 @@ #include "mbed.h" #include "FMOperator.h" #include "MIDIChannel.h" +#include "FMAlgorithm.h" class MIDIChannel { public: MIDIChannel(); + ~MIDIChannel(); inline void setModulationMSB(char msb) { modulation = msb; @@ -35,36 +37,35 @@ inline void endHold1() { hold1 = false; } - inline void setDataEntryMSB(char msb) { - dataEntryMSB = msb; - } - inline void setDataEntryLSB(char lsb){ - dataEntryLSB = lsb; - } - inline void setNRPNMSB(char msb){ - nrpnMSB = msb; - } - inline void setNRPNLSB(char lsb){ - nrpnLSB = lsb; - } - inline void setRPNMSB(char msb){ - rpnMSB = msb; - } - inline void setRPNLSB(char lsb){ - rpnLSB = lsb; - } - + + void setDataEntryMSB(char msb); + void setDataEntryLSB(char lsb); + void setNRPNMSB(char msb); + void setNRPNLSB(char lsb); + void setRPNMSB(char msb); + void setRPNLSB(char lsb); void allSoundOff(); void allNoteOff(); - - + + private: + enum DataState { + Undefined = 0, + RPNDoubleData, + RPNSingleData, + RPNNoData, + NRPNDoubleData, + NRPNSingleData, + NRPNNoData, + }; + char dataEntryMSB; char dataEntryLSB; char nrpnMSB; char nrpnLSB; char rpnMSB; char rpnLSB; + DataState state; char modulation; char portamentoTime; bool portamento; @@ -72,7 +73,10 @@ char panpot; char expression; bool hold1; - + FMAlgorithm *algo; + + void processRPNFunction(); + void processNRPNFunction(); };