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:
- 22:500b4f2953fa
- Parent:
- 21:e3014c1bdf9c
- Child:
- 23:deb76bdf6f03
--- a/FMOscillator/MIDIChannel.cpp Thu Jan 29 12:27:21 2015 +0000 +++ b/FMOscillator/MIDIChannel.cpp Sat Jan 31 10:17:22 2015 +0000 @@ -23,6 +23,8 @@ algo = NULL; state = Undefined; lcd = l; + nrpnStateSetter.attach(this, &MIDIChannel::setStateNRPNUndefined); + nrpnStateProcessor.attach(this, &MIDIChannel::nrpnUndefined); } MIDIChannel::~MIDIChannel() @@ -43,27 +45,26 @@ void MIDIChannel::setDataEntryMSB(char msb) { dataEntryMSB = msb; + if (state == NRPNSingleData || state == RPNSingleData) nrpnStateProcessor.call(); } void MIDIChannel::setDataEntryLSB(char lsb) { dataEntryLSB = lsb; + if (state == NRPNDoubleData || state == RPNDoubleData) nrpnStateProcessor.call(); } void MIDIChannel::setNRPNMSB(char msb) { nrpnMSB = msb; - if (msb >= 0x60) { - state = NRPNSingleData; - } else { - state = NRPNDoubleData; - } + setNRPNFunctions(); } void MIDIChannel::setNRPNLSB(char lsb) { nrpnLSB = lsb; - if (state == NRPNNoData) processNRPNFunction(); + nrpnStateSetter.call(); + if (state == NRPNNoData) nrpnStateProcessor.call(); } void MIDIChannel::setRPNMSB(char msb) @@ -90,14 +91,6 @@ { } -void MIDIChannel::processNRPNFunction() -{ - switch(nrpnMSB) { - - } - state = Undefined; -} - void MIDIChannel::processRPNFunction() { switch(rpnMSB) { @@ -117,3 +110,4 @@ } state = Undefined; } +