Nucleo F401REでFM音源を実装するやつ 外部DACとオペアンプを利用 現在はMCP4922とNJM2737

Dependencies:   AOTTrigon I2CEEPROM MCP4922 AQM0802A mbed

Fork of NuMidi401 by Yuu Kobayashi

NuFM401

Nucleo F401用の自作ソフトウェアMIDI音源

概要

だいたいそんなもんです。

特徴

  • ブレッドボードの上で組める程度には簡単な回路構成
  • 外部のDACにMCP4922を採用
  • 念のためのボルテージフォロアとしてNJM2737Dを採用
  • バンク用EEPROMに24FC1025を採用
  • シリアル経由でMIDIデータを受信することで操作

補足

シリアル <=> MIDI のドライバにはHairless-MIDISerialをオススメします。 仮想MIDIケーブルはとりあえずMIDI Yokeで。

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;
 }
+