Nucleo F401REでFM音源を実装するやつ の実装途中で32ポリ音源にしたやつ 外部DACとオペアンプを利用 現在はMCP4922とNJM2737

Dependencies:   AOTTrigon I2CEEPROM MCP4922 mbed

Committer:
kb10uy
Date:
Mon Dec 29 12:48:44 2014 +0000
Revision:
11:62da91a1eaf1
32poly??????????

Who changed what in which revision?

UserRevisionLine numberNew contents of line
kb10uy 11:62da91a1eaf1 1 #include "MIDI.h"
kb10uy 11:62da91a1eaf1 2
kb10uy 11:62da91a1eaf1 3 char sysexData[128];
kb10uy 11:62da91a1eaf1 4
kb10uy 11:62da91a1eaf1 5 void getMIDIMessage()
kb10uy 11:62da91a1eaf1 6 {
kb10uy 11:62da91a1eaf1 7 unsigned char st = midis.getc();
kb10uy 11:62da91a1eaf1 8 switch(st >> 4) {
kb10uy 11:62da91a1eaf1 9 case 0x8:
kb10uy 11:62da91a1eaf1 10 midiNoteOff(st & 0xf, midis.getc(), midis.getc());
kb10uy 11:62da91a1eaf1 11 break;
kb10uy 11:62da91a1eaf1 12 case 0x9:
kb10uy 11:62da91a1eaf1 13 midiNoteOn(st & 0xf, midis.getc(), midis.getc());
kb10uy 11:62da91a1eaf1 14 break;
kb10uy 11:62da91a1eaf1 15 case 0xa:
kb10uy 11:62da91a1eaf1 16 midiPolyphonicKeyPressure(st & 0xf, midis.getc(), midis.getc());
kb10uy 11:62da91a1eaf1 17 break;
kb10uy 11:62da91a1eaf1 18 case 0xb:
kb10uy 11:62da91a1eaf1 19 char b2 = midis.getc();
kb10uy 11:62da91a1eaf1 20 if (b2 >= 120) {
kb10uy 11:62da91a1eaf1 21 midiChannelMode(st & 0xf, b2, midis.getc());
kb10uy 11:62da91a1eaf1 22 } else {
kb10uy 11:62da91a1eaf1 23 midiControlChange(st & 0xf, b2, midis.getc());
kb10uy 11:62da91a1eaf1 24 }
kb10uy 11:62da91a1eaf1 25 break;
kb10uy 11:62da91a1eaf1 26 case 0xc:
kb10uy 11:62da91a1eaf1 27 midiProgramChange(st & 0xf, midis.getc());
kb10uy 11:62da91a1eaf1 28 break;
kb10uy 11:62da91a1eaf1 29 case 0xd:
kb10uy 11:62da91a1eaf1 30 midiChannelPressure(st & 0xf, midis.getc());
kb10uy 11:62da91a1eaf1 31 break;
kb10uy 11:62da91a1eaf1 32 case 0xe:
kb10uy 11:62da91a1eaf1 33 char LSB = midis.getc();
kb10uy 11:62da91a1eaf1 34 char MSB = midis.getc();
kb10uy 11:62da91a1eaf1 35 midiPitchBend(st & 0xf, ((LSB << 7) | (MSB << 7)) + 8192);
kb10uy 11:62da91a1eaf1 36 break;
kb10uy 11:62da91a1eaf1 37 case 0xf:
kb10uy 11:62da91a1eaf1 38 int t2 = st & 0xf;
kb10uy 11:62da91a1eaf1 39 if (t2 <= 7) {
kb10uy 11:62da91a1eaf1 40 getMIDISystemCommonMessage(t2);
kb10uy 11:62da91a1eaf1 41 } else {
kb10uy 11:62da91a1eaf1 42 midiSystemRealtimeMessage(st);
kb10uy 11:62da91a1eaf1 43 }
kb10uy 11:62da91a1eaf1 44 break;
kb10uy 11:62da91a1eaf1 45 }
kb10uy 11:62da91a1eaf1 46 }
kb10uy 11:62da91a1eaf1 47
kb10uy 11:62da91a1eaf1 48 void getMIDISystemCommonMessage(char t2)
kb10uy 11:62da91a1eaf1 49 {
kb10uy 11:62da91a1eaf1 50 switch(t2) {
kb10uy 11:62da91a1eaf1 51 case 0:
kb10uy 11:62da91a1eaf1 52 //もう面倒臭いから128byteのバッファに適当に放り込んでおこう
kb10uy 11:62da91a1eaf1 53 sysexData[0] = 0xf0;
kb10uy 11:62da91a1eaf1 54 int i = 1;
kb10uy 11:62da91a1eaf1 55 char d = 0;
kb10uy 11:62da91a1eaf1 56 do {
kb10uy 11:62da91a1eaf1 57 d = midis.getc();
kb10uy 11:62da91a1eaf1 58 sysexData[i]=d;
kb10uy 11:62da91a1eaf1 59 i++;
kb10uy 11:62da91a1eaf1 60 } while(d != 0xf7);
kb10uy 11:62da91a1eaf1 61
kb10uy 11:62da91a1eaf1 62 break;
kb10uy 11:62da91a1eaf1 63 case 1:
kb10uy 11:62da91a1eaf1 64 midis.getc();
kb10uy 11:62da91a1eaf1 65 break;
kb10uy 11:62da91a1eaf1 66 case 2:
kb10uy 11:62da91a1eaf1 67 midis.getc();
kb10uy 11:62da91a1eaf1 68 midis.getc();
kb10uy 11:62da91a1eaf1 69 break;
kb10uy 11:62da91a1eaf1 70 case 3:
kb10uy 11:62da91a1eaf1 71 midis.getc();
kb10uy 11:62da91a1eaf1 72 break;
kb10uy 11:62da91a1eaf1 73 case 4:
kb10uy 11:62da91a1eaf1 74 break;
kb10uy 11:62da91a1eaf1 75 case 5:
kb10uy 11:62da91a1eaf1 76 break;
kb10uy 11:62da91a1eaf1 77 case 6:
kb10uy 11:62da91a1eaf1 78 break;
kb10uy 11:62da91a1eaf1 79 case 7:
kb10uy 11:62da91a1eaf1 80 //どうしろと
kb10uy 11:62da91a1eaf1 81 break;
kb10uy 11:62da91a1eaf1 82 }
kb10uy 11:62da91a1eaf1 83 }
kb10uy 11:62da91a1eaf1 84
kb10uy 11:62da91a1eaf1 85 void midiSystemRealtimeMessage(char mes)
kb10uy 11:62da91a1eaf1 86 {
kb10uy 11:62da91a1eaf1 87
kb10uy 11:62da91a1eaf1 88 }
kb10uy 11:62da91a1eaf1 89
kb10uy 11:62da91a1eaf1 90
kb10uy 11:62da91a1eaf1 91 void midiNoteOn(char ch, char note, char vel)
kb10uy 11:62da91a1eaf1 92 {
kb10uy 11:62da91a1eaf1 93 if (vel==0) {
kb10uy 11:62da91a1eaf1 94 globalrelease((ch<<8)|note);
kb10uy 11:62da91a1eaf1 95 } else {
kb10uy 11:62da91a1eaf1 96 globalattack((ch<<8)|note,vel);
kb10uy 11:62da91a1eaf1 97 }
kb10uy 11:62da91a1eaf1 98 }
kb10uy 11:62da91a1eaf1 99
kb10uy 11:62da91a1eaf1 100 void midiNoteOff(char ch, char note, char vel)
kb10uy 11:62da91a1eaf1 101 {
kb10uy 11:62da91a1eaf1 102 globalrelease((ch<<8)|note);
kb10uy 11:62da91a1eaf1 103 }
kb10uy 11:62da91a1eaf1 104
kb10uy 11:62da91a1eaf1 105 void midiPolyphonicKeyPressure(char ch, char note, char vel)
kb10uy 11:62da91a1eaf1 106 {
kb10uy 11:62da91a1eaf1 107
kb10uy 11:62da91a1eaf1 108 }
kb10uy 11:62da91a1eaf1 109
kb10uy 11:62da91a1eaf1 110 void midiControlChange(char ch, char ctrl, char data)
kb10uy 11:62da91a1eaf1 111 {
kb10uy 11:62da91a1eaf1 112
kb10uy 11:62da91a1eaf1 113 }
kb10uy 11:62da91a1eaf1 114
kb10uy 11:62da91a1eaf1 115 void midiChannelMode(char ch, char ctrl, char data)
kb10uy 11:62da91a1eaf1 116 {
kb10uy 11:62da91a1eaf1 117
kb10uy 11:62da91a1eaf1 118 }
kb10uy 11:62da91a1eaf1 119
kb10uy 11:62da91a1eaf1 120 void midiProgramChange(char ch, char prg)
kb10uy 11:62da91a1eaf1 121 {
kb10uy 11:62da91a1eaf1 122
kb10uy 11:62da91a1eaf1 123 }
kb10uy 11:62da91a1eaf1 124
kb10uy 11:62da91a1eaf1 125 void midiChannelPressure(char ch, char pres)
kb10uy 11:62da91a1eaf1 126 {
kb10uy 11:62da91a1eaf1 127
kb10uy 11:62da91a1eaf1 128 }
kb10uy 11:62da91a1eaf1 129
kb10uy 11:62da91a1eaf1 130 void midiPitchBend(char ch, short pb)
kb10uy 11:62da91a1eaf1 131 {
kb10uy 11:62da91a1eaf1 132
kb10uy 11:62da91a1eaf1 133 }
kb10uy 11:62da91a1eaf1 134
kb10uy 11:62da91a1eaf1 135 void midiSystemExclusiveMessage()
kb10uy 11:62da91a1eaf1 136 {
kb10uy 11:62da91a1eaf1 137
kb10uy 11:62da91a1eaf1 138 }