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: FMOscillator/FMOscillator.cpp
- Revision:
- 21:e3014c1bdf9c
- Parent:
- 20:8278e607a687
- Child:
- 23:deb76bdf6f03
--- a/FMOscillator/FMOscillator.cpp Thu Jan 29 11:09:56 2015 +0000 +++ b/FMOscillator/FMOscillator.cpp Thu Jan 29 12:27:21 2015 +0000 @@ -14,6 +14,8 @@ 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); @@ -21,11 +23,8 @@ channels = new MIDIChannel*[16]; for(int i = 0; i < 16; i++) { - channels[i] = new MIDIChannel(); + channels[i] = new MIDIChannel(lcd); } - - lcd = new AQM0802A(*i2clcd); - serial->baud(256000); serial->format(); serial->attach(this, &FMOscillator::midiReceived); @@ -166,9 +165,9 @@ lcd->printf("Note On\n"); lcd->printf("%1x: %2x,%2x", ch, note, vel); if (vel==0) { - //globalrelease((ch<<8)|note); + channels[ch]->noteOff(note, master->read_us() / 1000000.0); } else { - //globalattack((ch<<8)|note,vel); + channels[ch]->noteOn(note, vel, master->read_us() / 1000000.0); } } @@ -177,7 +176,7 @@ lcd->cls(); lcd->printf("Note Off\n"); lcd->printf("%1x: %2x,%2x", ch, note, vel); - //globalrelease((ch<<8)|note); + channels[ch]->noteOff(note, master->read_us() / 1000000.0); } void FMOscillator::midiPolyphonicKeyPressure(char ch, char note, char vel)