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:
19:f0dcf591c5dd
Parent:
17:2e577c6000cf
Child:
20:8278e607a687
--- 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();
 };