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で。
FMOscillator/MIDIChannel.h
- Committer:
- kb10uy
- Date:
- 2015-01-31
- Revision:
- 23:deb76bdf6f03
- Parent:
- 22:500b4f2953fa
File content as of revision 23:deb76bdf6f03:
#pragma once #include "mbed.h" #include "AQM0802A.h" #include "FMOperator.h" #include "MIDIUtil.h" #include "FMAlgorithm.h" class MIDIChannel { public: MIDIChannel(); MIDIChannel(AQM0802A *l, Timer *tm, AOTTrigon *tri); ~MIDIChannel(); inline void setModulationMSB(char msb) { modulation = msb; } inline void setModulationLSB(char lsb) { //modulation = lsb | (modulation & 0x3f80); } inline void setPortamentoTime(char val) { portamentoTime = val; } inline void setPortamentoSwitch(bool val) { portamento = val; } inline void setVolume(char val) { volume = val; } inline void setExpression(char val) { expression = val; } inline void setPanpot(char val) { panpot = val; } inline void startHold1() { hold1 = true; } inline void endHold1() { hold1 = false; } void setDataEntryMSB(char msb); void setDataEntryLSB(char lsb); void setNRPNMSB(char msb); void setNRPNLSB(char lsb); void setRPNMSB(char msb); void setRPNLSB(char lsb); void allSoundOff(); void allNoteOff(); void noteOn(char key, char vel, double time); void noteOff(char key, double time); private: enum DataState { Undefined = 0, RPNDoubleData, RPNSingleData, RPNNoData, NRPNDoubleData, NRPNSingleData, NRPNNoData, }; char prkey; char dataEntryMSB; char dataEntryLSB; char nrpnMSB; char nrpnLSB; char rpnMSB; char rpnLSB; DataState state; char modulation; char portamentoTime; bool portamento; char volume; char panpot; char expression; bool hold1; FMAlgorithm *algo; AQM0802A *lcd; Timer *timer; AOTTrigon *trigon; FunctionPointer nrpnStateSetter; FunctionPointer nrpnStateProcessor; void processRPNFunction(); void setNRPNFunctions(); void nrpnUndefined(); void setStateNRPNUndefined(); void nrpnAlgorithm(); void setStateNRPNAlgorithm(); void nrpnOperator(); void setStateNRPNOperator(); };