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:
14:06785925915e
Parent:
13:e11380ceb460
Child:
15:b03677948732
diff -r e11380ceb460 -r 06785925915e FMOscillator/FMOscillator.cpp
--- a/FMOscillator/FMOscillator.cpp	Sat Jan 17 03:57:58 2015 +0000
+++ b/FMOscillator/FMOscillator.cpp	Sat Jan 17 03:58:48 2015 +0000
@@ -15,31 +15,31 @@
     unsigned char st = serial->getc();
     switch(st >> 4) {
         case 0x8:
-            midiNoteOff(st & 0xf, midis.getc(), midis.getc());
+            midiNoteOff(st & 0xf, serial->getc(), serial->getc());
             break;
         case 0x9:
-            midiNoteOn(st & 0xf, midis.getc(), midis.getc());
+            midiNoteOn(st & 0xf, serial->getc(), serial->getc());
             break;
         case 0xa:
-            midiPolyphonicKeyPressure(st & 0xf, midis.getc(), midis.getc());
+            midiPolyphonicKeyPressure(st & 0xf, serial->getc(), serial->getc());
             break;
         case 0xb:
             char b2 = midis.getc();
             if (b2 >= 120) {
-                midiChannelMode(st & 0xf, b2, midis.getc());
+                midiChannelMode(st & 0xf, b2, serial->getc());
             } else {
-                midiControlChange(st & 0xf, b2, midis.getc());
+                midiControlChange(st & 0xf, b2, serial->getc());
             }
             break;
         case 0xc:
-            midiProgramChange(st & 0xf, midis.getc());
+            midiProgramChange(st & 0xf, serial->getc());
             break;
         case 0xd:
-            midiChannelPressure(st & 0xf, midis.getc());
+            midiChannelPressure(st & 0xf, serial->getc());
             break;
         case 0xe:
-            char LSB = midis.getc();
-            char MSB = midis.getc();
+            char LSB = serial->getc();
+            char MSB = serial->getc();
             midiPitchBend(st & 0xf, ((LSB << 7) | (MSB << 7)) + 8192);
             break;
         case 0xf: