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.cpp
- Revision:
- 21:e3014c1bdf9c
- Parent:
- 20:8278e607a687
- Child:
- 22:500b4f2953fa
diff -r 8278e607a687 -r e3014c1bdf9c FMOscillator/MIDIChannel.cpp --- a/FMOscillator/MIDIChannel.cpp Thu Jan 29 11:09:56 2015 +0000 +++ b/FMOscillator/MIDIChannel.cpp Thu Jan 29 12:27:21 2015 +0000 @@ -2,6 +2,11 @@ MIDIChannel::MIDIChannel() { + +} + +MIDIChannel::MIDIChannel(AQM0802A *l) +{ modulation = 0; portamentoTime = 0; portamento = false; @@ -17,6 +22,7 @@ rpnLSB = 0; algo = NULL; state = Undefined; + lcd = l; } MIDIChannel::~MIDIChannel() @@ -24,10 +30,19 @@ if (algo != NULL) delete algo; } +void MIDIChannel::noteOn(char key, char vel, double time) { + prkey = key; + algo->noteOn(getNoteNumberFrequency(prkey), time); +} + +void MIDIChannel::noteOff(char key, double time) { + if (prkey != key) return; + algo->noteOff(time); +} + void MIDIChannel::setDataEntryMSB(char msb) { dataEntryMSB = msb; - } void MIDIChannel::setDataEntryLSB(char lsb) @@ -54,10 +69,10 @@ void MIDIChannel::setRPNMSB(char msb) { rpnMSB = msb; - if (msb == 0x7f){ + if (msb == 0x7f) { state = RPNNoData; } else { - state = RPNSingleData; + state = RPNSingleData; } } @@ -75,14 +90,16 @@ { } -void MIDIChannel::processNRPNFunction() { +void MIDIChannel::processNRPNFunction() +{ switch(nrpnMSB) { - + } state = Undefined; } -void MIDIChannel::processRPNFunction() { +void MIDIChannel::processRPNFunction() +{ switch(rpnMSB) { case 0x00: //LSB 0~2全部実装できないですから @@ -94,6 +111,8 @@ nrpnMSB = 0; nrpnLSB = 0; } + lcd->cls(); + lcd->printf("RPN/NRPN\nNULL"); break; } state = Undefined;