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:
9:12a54d2ea8fc
Parent:
7:439c57c20593
Child:
10:0ffdefe75566
--- a/Operator.cpp	Mon Dec 29 02:34:49 2014 +0000
+++ b/Operator.cpp	Mon Dec 29 02:42:03 2014 +0000
@@ -2,7 +2,7 @@
 
 static const float pi2 = 6.283185307179586476925286766559f;
 
-FMOperator::FMOperator(Timer tm, AOTTrigon t)
+FMOperator::FMOperator(Timer *tm, AOTTrigon *t)
 {
     attack = 0.0f;
     delay = 0.0f;
@@ -13,7 +13,7 @@
     frequencyMultiple = 1.0f;
     totalLevel = 1.0f;
     
-    tri=t;
+    tri = t;
     master = tm;
     startTime = 0.0;
     releaseTime = 0.0;
@@ -23,16 +23,16 @@
 float FMOperator::calculate(float fmIn) {
     if (startTime == 0.0) return 0.0f;
     float pos = (pi2 * baseFrequency * frequencyMultiple);
-    double nt = (master.read_us() / 1000000.0) - startTime;
-    return tri.sin(fmIn + (float)(pos * nt));
+    double nt = (master->read_us() / 1000000.0) - startTime;
+    return tri->sin(fmIn + (float)(pos * nt));
 }
 
 void FMOperator::attackNote(float freq) {
     baseFrequency = freq;
-    startTime = master.read_us() / 1000000.0;
+    startTime = master->read_us() / 1000000.0;
 }
 
 void FMOperator::releaseNote() {
     startTime = 0.0;
-    releaseTime = master.read_us() / 1000000.0;
+    releaseTime = master->read_us() / 1000000.0;
 }
\ No newline at end of file