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で。
Operator.cpp
- Committer:
- kb10uy
- Date:
- 2014-12-29
- Revision:
- 7:439c57c20593
- Child:
- 9:12a54d2ea8fc
File content as of revision 7:439c57c20593:
#include "Operator.h" static const float pi2 = 6.283185307179586476925286766559f; FMOperator::FMOperator(Timer tm, AOTTrigon t) { attack = 0.0f; delay = 0.0f; sustain = 0.0f; sustainRate = 1.0f; release = 0.0f; frequencyMultiple = 1.0f; totalLevel = 1.0f; tri=t; master = tm; startTime = 0.0; releaseTime = 0.0; baseFrequency = 1.0f; } 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)); } void FMOperator::attackNote(float freq) { baseFrequency = freq; startTime = master.read_us() / 1000000.0; } void FMOperator::releaseNote() { startTime = 0.0; releaseTime = master.read_us() / 1000000.0; }