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で。

Committer:
kb10uy
Date:
Tue Jan 27 12:56:33 2015 +0000
Revision:
17:2e577c6000cf
Child:
19:f0dcf591c5dd
MIDIChannel????ControlChange?????

Who changed what in which revision?

UserRevisionLine numberNew contents of line
kb10uy 17:2e577c6000cf 1 #pragma once
kb10uy 17:2e577c6000cf 2 #include "mbed.h"
kb10uy 17:2e577c6000cf 3 #include "FMOperator.h"
kb10uy 17:2e577c6000cf 4 #include "MIDIChannel.h"
kb10uy 17:2e577c6000cf 5
kb10uy 17:2e577c6000cf 6 class MIDIChannel
kb10uy 17:2e577c6000cf 7 {
kb10uy 17:2e577c6000cf 8 public:
kb10uy 17:2e577c6000cf 9 MIDIChannel();
kb10uy 17:2e577c6000cf 10
kb10uy 17:2e577c6000cf 11 inline void setModulationMSB(char msb) {
kb10uy 17:2e577c6000cf 12 modulation = msb;
kb10uy 17:2e577c6000cf 13 }
kb10uy 17:2e577c6000cf 14 inline void setModulationLSB(char lsb) {
kb10uy 17:2e577c6000cf 15 //modulation = lsb | (modulation & 0x3f80);
kb10uy 17:2e577c6000cf 16 }
kb10uy 17:2e577c6000cf 17 inline void setPortamentoTime(char val) {
kb10uy 17:2e577c6000cf 18 portamentoTime = val;
kb10uy 17:2e577c6000cf 19 }
kb10uy 17:2e577c6000cf 20 inline void setPortamentoSwitch(bool val) {
kb10uy 17:2e577c6000cf 21 portamento = val;
kb10uy 17:2e577c6000cf 22 }
kb10uy 17:2e577c6000cf 23 inline void setVolume(char val) {
kb10uy 17:2e577c6000cf 24 volume = val;
kb10uy 17:2e577c6000cf 25 }
kb10uy 17:2e577c6000cf 26 inline void setExpression(char val) {
kb10uy 17:2e577c6000cf 27 expression = val;
kb10uy 17:2e577c6000cf 28 }
kb10uy 17:2e577c6000cf 29 inline void setPanpot(char val) {
kb10uy 17:2e577c6000cf 30 panpot = val;
kb10uy 17:2e577c6000cf 31 }
kb10uy 17:2e577c6000cf 32 inline void startHold1() {
kb10uy 17:2e577c6000cf 33 hold1 = true;
kb10uy 17:2e577c6000cf 34 }
kb10uy 17:2e577c6000cf 35 inline void endHold1() {
kb10uy 17:2e577c6000cf 36 hold1 = false;
kb10uy 17:2e577c6000cf 37 }
kb10uy 17:2e577c6000cf 38 inline void setDataEntryMSB(char msb) {
kb10uy 17:2e577c6000cf 39 dataEntryMSB = msb;
kb10uy 17:2e577c6000cf 40 }
kb10uy 17:2e577c6000cf 41 inline void setDataEntryLSB(char lsb){
kb10uy 17:2e577c6000cf 42 dataEntryLSB = lsb;
kb10uy 17:2e577c6000cf 43 }
kb10uy 17:2e577c6000cf 44 inline void setNRPNMSB(char msb){
kb10uy 17:2e577c6000cf 45 nrpnMSB = msb;
kb10uy 17:2e577c6000cf 46 }
kb10uy 17:2e577c6000cf 47 inline void setNRPNLSB(char lsb){
kb10uy 17:2e577c6000cf 48 nrpnLSB = lsb;
kb10uy 17:2e577c6000cf 49 }
kb10uy 17:2e577c6000cf 50 inline void setRPNMSB(char msb){
kb10uy 17:2e577c6000cf 51 rpnMSB = msb;
kb10uy 17:2e577c6000cf 52 }
kb10uy 17:2e577c6000cf 53 inline void setRPNLSB(char lsb){
kb10uy 17:2e577c6000cf 54 rpnLSB = lsb;
kb10uy 17:2e577c6000cf 55 }
kb10uy 17:2e577c6000cf 56
kb10uy 17:2e577c6000cf 57 void allSoundOff();
kb10uy 17:2e577c6000cf 58 void allNoteOff();
kb10uy 17:2e577c6000cf 59
kb10uy 17:2e577c6000cf 60
kb10uy 17:2e577c6000cf 61 private:
kb10uy 17:2e577c6000cf 62 char dataEntryMSB;
kb10uy 17:2e577c6000cf 63 char dataEntryLSB;
kb10uy 17:2e577c6000cf 64 char nrpnMSB;
kb10uy 17:2e577c6000cf 65 char nrpnLSB;
kb10uy 17:2e577c6000cf 66 char rpnMSB;
kb10uy 17:2e577c6000cf 67 char rpnLSB;
kb10uy 17:2e577c6000cf 68 char modulation;
kb10uy 17:2e577c6000cf 69 char portamentoTime;
kb10uy 17:2e577c6000cf 70 bool portamento;
kb10uy 17:2e577c6000cf 71 char volume;
kb10uy 17:2e577c6000cf 72 char panpot;
kb10uy 17:2e577c6000cf 73 char expression;
kb10uy 17:2e577c6000cf 74 bool hold1;
kb10uy 17:2e577c6000cf 75
kb10uy 17:2e577c6000cf 76 };
kb10uy 17:2e577c6000cf 77
kb10uy 17:2e577c6000cf 78
kb10uy 17:2e577c6000cf 79
kb10uy 17:2e577c6000cf 80
kb10uy 17:2e577c6000cf 81