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:
23:deb76bdf6f03
Parent:
21:e3014c1bdf9c
--- a/FMOscillator/FMOscillator.cpp	Sat Jan 31 10:17:22 2015 +0000
+++ b/FMOscillator/FMOscillator.cpp	Sat Jan 31 10:44:08 2015 +0000
@@ -7,62 +7,32 @@
 
 }
 
-FMOscillator::FMOscillator(int opc, Timer *tim, Serial *ser, AOTTrigon *tri, I2C *i2clcd)
+FMOscillator::FMOscillator(Timer *tim, Serial *ser, AOTTrigon *tri, I2C *i2clcd)
 {
     master = tim;
     serial = ser;
     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);
-    }
 
     channels = new MIDIChannel*[16];
     for(int i = 0; i < 16; i++) {
-        channels[i] = new MIDIChannel(lcd);
+        channels[i] = new MIDIChannel(lcd, master, trigon);
     }
     serial->baud(256000);
     serial->format();
     serial->attach(this, &FMOscillator::midiReceived);
     master->start();
-
-    lcd->cls();
-    lcd->printf("Welcome\n   to   ");
-    wait_ms(1000);
-
+    
     lcd->cls();
     lcd->printf("NuFM401\nFMDriver");
-    wait_ms(1000);
-
-    lcd->cls();
-    lcd->printf("FMOpe\n%dbytes",sizeof(FMOperator)*opcount);
-    wait_ms(1000);
-
-    lcd->cls();
-    lcd->printf("FMOsc\n%dbytes",sizeof(FMOscillator));
-    wait_ms(1000);
-
-    lcd->cls();
-    lcd->printf("MIDICh\n%dbytes",sizeof(MIDIChannel)*16);
-    wait_ms(1000);
-
-    lcd->cls();
-    lcd->printf("NuFM401\nSTAND BY");
 }
 
 FMOscillator::~FMOscillator()
 {
-    for(int i = 0; i < opcount; i++) {
-        delete operators[i];
-    }
     for(int i = 0; i < 16; i++) {
         delete channels[i];
     }
-    delete[] operators;
     delete[] channels;
     delete lcd;
 }