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:
21:e3014c1bdf9c
Parent:
20:8278e607a687
Child:
23:deb76bdf6f03
diff -r 8278e607a687 -r e3014c1bdf9c FMOscillator/FMOscillator.cpp
--- a/FMOscillator/FMOscillator.cpp	Thu Jan 29 11:09:56 2015 +0000
+++ b/FMOscillator/FMOscillator.cpp	Thu Jan 29 12:27:21 2015 +0000
@@ -14,6 +14,8 @@
     trigon = tri;
     opcount = opc;
 
+    lcd = new AQM0802A(*i2clcd);
+    
     operators = new FMOperator*[opcount];
     for(int i = 0; i < opcount; i++) {
         operators[i] = new FMOperator(master, trigon);
@@ -21,11 +23,8 @@
 
     channels = new MIDIChannel*[16];
     for(int i = 0; i < 16; i++) {
-        channels[i] = new MIDIChannel();
+        channels[i] = new MIDIChannel(lcd);
     }
-
-    lcd = new AQM0802A(*i2clcd);
-
     serial->baud(256000);
     serial->format();
     serial->attach(this, &FMOscillator::midiReceived);
@@ -166,9 +165,9 @@
     lcd->printf("Note On\n");
     lcd->printf("%1x: %2x,%2x", ch, note, vel);
     if (vel==0) {
-        //globalrelease((ch<<8)|note);
+        channels[ch]->noteOff(note, master->read_us() / 1000000.0);
     } else {
-        //globalattack((ch<<8)|note,vel);
+        channels[ch]->noteOn(note, vel, master->read_us() / 1000000.0);
     }
 }
 
@@ -177,7 +176,7 @@
     lcd->cls();
     lcd->printf("Note Off\n");
     lcd->printf("%1x: %2x,%2x", ch, note, vel);
-    //globalrelease((ch<<8)|note);
+    channels[ch]->noteOff(note, master->read_us() / 1000000.0);
 }
 
 void FMOscillator::midiPolyphonicKeyPressure(char ch, char note, char vel)