Nucleo F401REでFM音源を実装するやつ 外部DACとオペアンプを利用 現在はMCP4922とNJM2737
Dependencies: AOTTrigon I2CEEPROM MCP4922 AQM0802A mbed
Fork of NuMidi401 by
NuFM401
Nucleo F401用の自作ソフトウェアMIDI音源
概要
だいたいそんなもんです。
特徴
- ブレッドボードの上で組める程度には簡単な回路構成
- 外部のDACにMCP4922を採用
- 念のためのボルテージフォロアとしてNJM2737Dを採用
- バンク用EEPROMに24FC1025を採用
- シリアル経由でMIDIデータを受信することで操作
補足
シリアル <=> MIDI のドライバにはHairless-MIDISerialをオススメします。 仮想MIDIケーブルはとりあえずMIDI Yokeで。
Diff: Operator.cpp
- Revision:
- 9:12a54d2ea8fc
- Parent:
- 7:439c57c20593
- Child:
- 10:0ffdefe75566
diff -r 2d28956641f3 -r 12a54d2ea8fc Operator.cpp --- 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