- #pragma once
- #include <string.h>
- #include "audioeffectx.h"
-
- // ============================================================================================
- // MIDI処理用の定義
- // ============================================================================================
- #define MIDIMSG_MAXNUM 255
-
- struct MidiMessage
- {
- VstInt32 deltaFrames; //MIDIメッセージを処理するタイミング
- unsigned char message; //MIDIメッセージ番号
- unsigned char channel; //MIDIチャンネル
- unsigned char data1; //MIDIデータ1
- unsigned char data2; //MIDIデータ2
- };
-
- class CMidiMsg
- {
- protected:
- int cur; //読み込み中のMIDIの位置
- int num; //受け取ったMIDIメッセージの数
- MidiMessage buf[MIDIMSG_MAXNUM]; //受け取ったMIDIメッセージを保管するバッファ
- public:
- CMidiMsg(void);
- ~CMidiMsg(void);
-
- // バッファのクリア等を行う。
- virtual void clearMidiMsg();
-
- // MIDIメッセージをバッファに追加する
- // バッファへの追加が成功すると1、失敗すると0を返す
- virtual int addMidiMsg(VstMidiEvent *midievent);
- virtual int addMidiMsg(MidiMessage msg);
-
- // バッファからMIDIメッセージを取り出す
- virtual MidiMessage getMidiMsg();
-
- // バッファ中にあるMIDIメッセージの数を返す
- virtual VstInt32 getMidiMessageNum();
-
- // バッファから最初に取り出せるMIDIメッセージのDeltaFramesを返す
- virtual VstInt32 getNextDeltaFrames();
-
- // MIDIメッセージが何かを判断し、そのメッセージに対応した
- // onMidiKeyOn()関数、onMidiControlChange()関数等を呼び出す。
- virtual void midiProc(MidiMessage mididata);
-
- // midiProc()関数から呼び出される。
- // それぞれのMIDIメッセージに応じて処理を行う
- // 以下6つはオーバーライドして使うとよい
- virtual void onMidiKeyOn (unsigned char channel, unsigned char noteNo, unsigned char velo) {}; // 関数の中身は空
- virtual void onMidiKeyOff (unsigned char channel, unsigned char noteNo, unsigned char velo) {}; // 関数の中身は空
- virtual void onMidiProgramChange(unsigned char channel, unsigned char program) {}; // 関数の中身は空
- virtual void onMidiPoliKeyPress (unsigned char channel, unsigned char noteNo, unsigned char pressure) {}; // 関数の中身は空
- virtual void onMidiChannelPress (unsigned char channel, unsigned char pressure) {}; // 関数の中身は空
- virtual void onMidiPitchBend (unsigned char channel, short pb) {}; // 関数の中身は空
- // 以下2つはあまりオーバーライドして使う必要はない
- virtual void onMidiSystemMessage(unsigned char systemmsg, unsigned char data1, unsigned char data2); // 中身はCMidiMsg.cppに記載
- virtual void onMidiControlChange(unsigned char channel, unsigned char cc, unsigned char value); // 中身はCMidiMsg.cppに記載
-
- // onMidiSystemMessage()関数より呼び出される。
- // システムメッセージに応じて処理する関数
- // オーバーライドして使うとよい
- // (ただし、ホストアプリケーションからSystem Messageが送られることはあまり無い?)
- virtual void onMidiQuarterFrame(unsigned char data) {};
- virtual void onMidiSongPointer(short songpoint) {};
- virtual void onMidiSongSelect(unsigned char data) {};
- virtual void onMidiChainRequest() {};
- virtual void onMidiTimingClock() {};
- virtual void onMidiStart() {};
- virtual void onMidiContinue() {};
- virtual void onMidiStop(){};
- virtual void onMidiActiveSensing() {};
- virtual void onMidiSystemReset() {};
-
- // onMidiControlChange()関数より呼び出される。
- // コントロールチェンジメッセージに応じて処理する関数
- // オーバーライドして使うとよい
- virtual void onMidiCC000 (unsigned char channel, unsigned char value) {};
- virtual void onMidiCC001 (unsigned char channel, unsigned char value) {}; // ModulationDepth
- virtual void onMidiCC002 (unsigned char channel, unsigned char value) {};
- virtual void onMidiCC003 (unsigned char channel, unsigned char value) {};
- virtual void onMidiCC004 (unsigned char channel, unsigned char value) {};
- virtual void onMidiCC005 (unsigned char channel, unsigned char value) {}; // PortamentTime
- virtual void onMidiCC006 (unsigned char channel, unsigned char value) {};
- virtual void onMidiCC007 (unsigned char channel, unsigned char value) {}; // ChannelVolume
- virtual void onMidiCC008 (unsigned char channel, unsigned char value) {};
- virtual void onMidiCC009 (unsigned char channel, unsigned char value) {};
- virtual void onMidiCC010 (unsigned char channel, unsigned char value) {}; // Pan
- virtual void onMidiCC011 (unsigned char channel, unsigned char value) {};
- virtual void onMidiCC012 (unsigned char channel, unsigned char value) {}; // Expression
- virtual void onMidiCC013 (unsigned char channel, unsigned char value) {};
- virtual void onMidiCC014 (unsigned char channel, unsigned char value) {};
- virtual void onMidiCC015 (unsigned char channel, unsigned char value) {};
- virtual void onMidiCC016 (unsigned char channel, unsigned char value) {};
- virtual void onMidiCC017 (unsigned char channel, unsigned char value) {};
- virtual void onMidiCC018 (unsigned char channel, unsigned char value) {};
- virtual void onMidiCC019 (unsigned char channel, unsigned char value) {};
- virtual void onMidiCC020 (unsigned char channel, unsigned char value) {};
- virtual void onMidiCC021 (unsigned char channel, unsigned char value) {};
- virtual void onMidiCC022 (unsigned char channel, unsigned char value) {};
- virtual void onMidiCC023 (unsigned char channel, unsigned char value) {};
- virtual void onMidiCC024 (unsigned char channel, unsigned char value) {};
- virtual void onMidiCC025 (unsigned char channel, unsigned char value) {};
- virtual void onMidiCC026 (unsigned char channel, unsigned char value) {};
- virtual void onMidiCC027 (unsigned char channel, unsigned char value) {};
- virtual void onMidiCC028 (unsigned char channel, unsigned char value) {};
- virtual void onMidiCC029 (unsigned char channel, unsigned char value) {};
- virtual void onMidiCC030 (unsigned char channel, unsigned char value) {};
- virtual void onMidiCC031 (unsigned char channel, unsigned char value) {};
- virtual void onMidiCC032 (unsigned char channel, unsigned char value) {};
- virtual void onMidiCC033 (unsigned char channel, unsigned char value) {};
- virtual void onMidiCC034 (unsigned char channel, unsigned char value) {};
- virtual void onMidiCC035 (unsigned char channel, unsigned char value) {};
- virtual void onMidiCC036 (unsigned char channel, unsigned char value) {};
- virtual void onMidiCC037 (unsigned char channel, unsigned char value) {};
- virtual void onMidiCC038 (unsigned char channel, unsigned char value) {};
- virtual void onMidiCC039 (unsigned char channel, unsigned char value) {};
- virtual void onMidiCC040 (unsigned char channel, unsigned char value) {};
- virtual void onMidiCC041 (unsigned char channel, unsigned char value) {};
- virtual void onMidiCC042 (unsigned char channel, unsigned char value) {};
- virtual void onMidiCC043 (unsigned char channel, unsigned char value) {};
- virtual void onMidiCC044 (unsigned char channel, unsigned char value) {};
- virtual void onMidiCC045 (unsigned char channel, unsigned char value) {};
- virtual void onMidiCC046 (unsigned char channel, unsigned char value) {};
- virtual void onMidiCC047 (unsigned char channel, unsigned char value) {};
- virtual void onMidiCC048 (unsigned char channel, unsigned char value) {};
- virtual void onMidiCC049 (unsigned char channel, unsigned char value) {};
- virtual void onMidiCC050 (unsigned char channel, unsigned char value) {};
- virtual void onMidiCC051 (unsigned char channel, unsigned char value) {};
- virtual void onMidiCC052 (unsigned char channel, unsigned char value) {};
- virtual void onMidiCC053 (unsigned char channel, unsigned char value) {};
- virtual void onMidiCC054 (unsigned char channel, unsigned char value) {};
- virtual void onMidiCC055 (unsigned char channel, unsigned char value) {};
- virtual void onMidiCC056 (unsigned char channel, unsigned char value) {};
- virtual void onMidiCC057 (unsigned char channel, unsigned char value) {};
- virtual void onMidiCC058 (unsigned char channel, unsigned char value) {};
- virtual void onMidiCC059 (unsigned char channel, unsigned char value) {};
- virtual void onMidiCC060 (unsigned char channel, unsigned char value) {};
- virtual void onMidiCC061 (unsigned char channel, unsigned char value) {};
- virtual void onMidiCC062 (unsigned char channel, unsigned char value) {};
- virtual void onMidiCC063 (unsigned char channel, unsigned char value) {};
- virtual void onMidiCC064 (unsigned char channel, unsigned char value) {}; // DumperPedal
- virtual void onMidiCC065 (unsigned char channel, unsigned char value) {}; // PortamentOnOff
- virtual void onMidiCC066 (unsigned char channel, unsigned char value) {}; // SostenutoPedal
- virtual void onMidiCC067 (unsigned char channel, unsigned char value) {}; // SoftPedal
- virtual void onMidiCC068 (unsigned char channel, unsigned char value) {};
- virtual void onMidiCC069 (unsigned char channel, unsigned char value) {};
- virtual void onMidiCC070 (unsigned char channel, unsigned char value) {};
- virtual void onMidiCC071 (unsigned char channel, unsigned char value) {}; // Resonance
- virtual void onMidiCC072 (unsigned char channel, unsigned char value) {}; // ReleaseTime
- virtual void onMidiCC073 (unsigned char channel, unsigned char value) {}; // AttackTime
- virtual void onMidiCC074 (unsigned char channel, unsigned char value) {}; // Brightness
- virtual void onMidiCC075 (unsigned char channel, unsigned char value) {}; // DecayTime
- virtual void onMidiCC076 (unsigned char channel, unsigned char value) {}; // VibratoRate
- virtual void onMidiCC077 (unsigned char channel, unsigned char value) {}; // VibratoDepth
- virtual void onMidiCC078 (unsigned char channel, unsigned char value) {}; // VibratoDelay
- virtual void onMidiCC079 (unsigned char channel, unsigned char value) {};
- virtual void onMidiCC080 (unsigned char channel, unsigned char value) {};
- virtual void onMidiCC081 (unsigned char channel, unsigned char value) {};
- virtual void onMidiCC082 (unsigned char channel, unsigned char value) {};
- virtual void onMidiCC083 (unsigned char channel, unsigned char value) {};
- virtual void onMidiCC084 (unsigned char channel, unsigned char value) {};
- virtual void onMidiCC085 (unsigned char channel, unsigned char value) {};
- virtual void onMidiCC086 (unsigned char channel, unsigned char value) {};
- virtual void onMidiCC087 (unsigned char channel, unsigned char value) {};
- virtual void onMidiCC088 (unsigned char channel, unsigned char value) {};
- virtual void onMidiCC089 (unsigned char channel, unsigned char value) {};
- virtual void onMidiCC090 (unsigned char channel, unsigned char value) {};
- virtual void onMidiCC091 (unsigned char channel, unsigned char value) {}; // ReverbSend
- virtual void onMidiCC092 (unsigned char channel, unsigned char value) {}; // ChorusSend
- virtual void onMidiCC093 (unsigned char channel, unsigned char value) {};
- virtual void onMidiCC094 (unsigned char channel, unsigned char value) {};
- virtual void onMidiCC095 (unsigned char channel, unsigned char value) {};
- virtual void onMidiCC096 (unsigned char channel, unsigned char value) {};
- virtual void onMidiCC097 (unsigned char channel, unsigned char value) {};
- virtual void onMidiCC098 (unsigned char channel, unsigned char value) {};
- virtual void onMidiCC099 (unsigned char channel, unsigned char value) {};
- virtual void onMidiCC100 (unsigned char channel, unsigned char value) {};
- virtual void onMidiCC101 (unsigned char channel, unsigned char value) {};
- virtual void onMidiCC102 (unsigned char channel, unsigned char value) {};
- virtual void onMidiCC103 (unsigned char channel, unsigned char value) {};
- virtual void onMidiCC104 (unsigned char channel, unsigned char value) {};
- virtual void onMidiCC105 (unsigned char channel, unsigned char value) {};
- virtual void onMidiCC106 (unsigned char channel, unsigned char value) {};
- virtual void onMidiCC107 (unsigned char channel, unsigned char value) {};
- virtual void onMidiCC108 (unsigned char channel, unsigned char value) {};
- virtual void onMidiCC109 (unsigned char channel, unsigned char value) {};
- virtual void onMidiCC110 (unsigned char channel, unsigned char value) {};
- virtual void onMidiCC111 (unsigned char channel, unsigned char value) {};
- virtual void onMidiCC112 (unsigned char channel, unsigned char value) {};
- virtual void onMidiCC113 (unsigned char channel, unsigned char value) {};
- virtual void onMidiCC114 (unsigned char channel, unsigned char value) {};
- virtual void onMidiCC115 (unsigned char channel, unsigned char value) {};
- virtual void onMidiCC116 (unsigned char channel, unsigned char value) {};
- virtual void onMidiCC117 (unsigned char channel, unsigned char value) {};
- virtual void onMidiCC118 (unsigned char channel, unsigned char value) {};
- virtual void onMidiCC119 (unsigned char channel, unsigned char value) {};
- virtual void onMidiCC120 (unsigned char channel, unsigned char value) {}; // AllSoundOff
- virtual void onMidiCC121 (unsigned char channel, unsigned char value) {}; // AllControlReset
- virtual void onMidiCC122 (unsigned char channel, unsigned char value) {};
- virtual void onMidiCC123 (unsigned char channel, unsigned char value) {};
- virtual void onMidiCC124 (unsigned char channel, unsigned char value) {};
- virtual void onMidiCC125 (unsigned char channel, unsigned char value) {};
- virtual void onMidiCC126 (unsigned char channel, unsigned char value) {}; // MonoModeOnOff
- virtual void onMidiCC127 (unsigned char channel, unsigned char value) {}; // PoliModeOnOff
- };
- #include "CMidiMsg.h"
-
- CMidiMsg::CMidiMsg(void)
- {
- clearMidiMsg();
- }
-
- CMidiMsg::~CMidiMsg(void)
- {
- }
-
- void CMidiMsg::clearMidiMsg()
- {
- // メンバー変数を初期化する
- cur=0;
- num=0;
- memset(buf, 0, sizeof(MidiMessage)*MIDIMSG_MAXNUM);
- }
-
- int CMidiMsg::addMidiMsg(VstMidiEvent *midievent)
- {
- MidiMessage tmp;
- tmp.deltaFrames = midievent->deltaFrames;
- tmp.message = midievent->midiData[0] & 0xF0;
- tmp.channel = midievent->midiData[0] & 0x0F;
- tmp.data1 = midievent->midiData[1];
- tmp.data2 = midievent->midiData[2];
-
- return addMidiMsg(tmp);
- }
-
- int CMidiMsg::addMidiMsg(MidiMessage msg)
- {
- // バッファがいっぱいなら0を返す
- if (num >= MIDIMSG_MAXNUM)
- return 0;
-
- buf[num] = msg;
-
- num++;
- if (num > MIDIMSG_MAXNUM) {num = MIDIMSG_MAXNUM;}
-
- return 1;
- };
-
- MidiMessage CMidiMsg::getMidiMsg()
- {
- MidiMessage tmp = buf[cur];
-
- num--;
- if( num < 0) { num = 0; }
-
- cur++;
- if( cur >= MIDIMSG_MAXNUM) { cur = MIDIMSG_MAXNUM -1;}
-
- return tmp;
- }
-
- VstInt32 CMidiMsg::getMidiMessageNum()
- {
- return num;
- }
-
- VstInt32 CMidiMsg::getNextDeltaFrames()
- {
- return buf[cur].deltaFrames;
- }
-
-
- void CMidiMsg::midiProc(MidiMessage mididata)
- {
- short msb = 0;
- short lsb = 0;
- short pitchbend = 0;
-
- switch (mididata.message & 0xF0)
- {
- case 0x80: // ノートオフメッセージ
- onMidiKeyOff(mididata.channel, mididata.data1, mididata.data2);
- break;
-
- case 0x90: // ノートオンメッセージ
- // ヴェロシティが0の場合はノートオフメッセージとして扱う
- if (mididata.data2 > 0)
- {
- onMidiKeyOn(mididata.channel, mididata.data1, mididata.data2);
- }
- else
- {
- onMidiKeyOff(mididata.channel, mididata.data1, mididata.data2);
- }
- break;
-
- case 0xA0: // キープレッシャーメッセージ
- onMidiPoliKeyPress(mididata.channel, mididata.data1, mididata.data2);
- break;
-
- case 0xB0: // コントロールチェンジメッセージ
- onMidiControlChange(mididata.channel, mididata.data1, mididata.data2);
- break;
-
- case 0xC0: // プログラムチェンジメッセージ
- onMidiProgramChange(mididata.channel, mididata.data1);
- break;
-
- case 0xD0: // チャンネルプレッシャーメッセージ
- onMidiChannelPress(mididata.channel, mididata.data1);
- break;
-
- case 0xE0: // ピッチベンドメッセージ
- lsb = (mididata.data1);
- msb = (mididata.data2);
- pitchbend = ((msb << 7) | lsb) - 8192;
- onMidiPitchBend(mididata.channel, pitchbend);
- break;
-
- case 0xF0: // システムメッセージ
- onMidiSystemMessage((mididata.message & 0xF0) | (mididata.channel & 0x0F), mididata.data1, mididata.data2);
- break;
- }
- }
-
- void CMidiMsg::onMidiSystemMessage(unsigned char systemmsg, unsigned char data1, unsigned char data2)
- {
-
- short lsb = (data1);
- short msb = (data2);
- switch(systemmsg)
- {
- case 0xF1: onMidiQuarterFrame(data1); break;
- case 0xF2: onMidiSongPointer( (msb << 7) | lsb ); break;
- case 0xF3: onMidiSongSelect(data1); break;
- case 0xF6: onMidiChainRequest(); break;
- case 0xF8: onMidiTimingClock(); break;
- case 0xFA: onMidiStart(); break;
- case 0xFB: onMidiContinue(); break;
- case 0xFC: onMidiStop(); break;
- case 0xFE: onMidiActiveSensing(); break;
- case 0xFF: onMidiSystemReset(); break;
- default: break;
- }
- }
-
- void CMidiMsg::onMidiControlChange(unsigned char channel, unsigned char cc, unsigned char value)
- {
- switch(cc)
- {
- case 0: onMidiCC000 (channel, value); break;
- case 1: onMidiCC001 (channel, value); break;
- case 2: onMidiCC002 (channel, value); break;
- case 3: onMidiCC003 (channel, value); break;
- case 4: onMidiCC004 (channel, value); break;
- case 5: onMidiCC005 (channel, value); break;
- case 6: onMidiCC006 (channel, value); break;
- case 7: onMidiCC007 (channel, value); break;
- case 8: onMidiCC008 (channel, value); break;
- case 9: onMidiCC009 (channel, value); break;
- case 10: onMidiCC010 (channel, value); break;
- case 11: onMidiCC011 (channel, value); break;
- case 12: onMidiCC012 (channel, value); break;
- case 13: onMidiCC013 (channel, value); break;
- case 14: onMidiCC014 (channel, value); break;
- case 15: onMidiCC015 (channel, value); break;
- case 16: onMidiCC016 (channel, value); break;
- case 17: onMidiCC017 (channel, value); break;
- case 18: onMidiCC018 (channel, value); break;
- case 19: onMidiCC019 (channel, value); break;
- case 20: onMidiCC020 (channel, value); break;
- case 21: onMidiCC021 (channel, value); break;
- case 22: onMidiCC022 (channel, value); break;
- case 23: onMidiCC023 (channel, value); break;
- case 24: onMidiCC024 (channel, value); break;
- case 25: onMidiCC025 (channel, value); break;
- case 26: onMidiCC026 (channel, value); break;
- case 27: onMidiCC027 (channel, value); break;
- case 28: onMidiCC028 (channel, value); break;
- case 29: onMidiCC029 (channel, value); break;
- case 30: onMidiCC030 (channel, value); break;
- case 31: onMidiCC031 (channel, value); break;
- case 32: onMidiCC032 (channel, value); break;
- case 33: onMidiCC033 (channel, value); break;
- case 34: onMidiCC034 (channel, value); break;
- case 35: onMidiCC035 (channel, value); break;
- case 36: onMidiCC036 (channel, value); break;
- case 37: onMidiCC037 (channel, value); break;
- case 38: onMidiCC038 (channel, value); break;
- case 39: onMidiCC039 (channel, value); break;
- case 40: onMidiCC040 (channel, value); break;
- case 41: onMidiCC041 (channel, value); break;
- case 42: onMidiCC042 (channel, value); break;
- case 43: onMidiCC043 (channel, value); break;
- case 44: onMidiCC044 (channel, value); break;
- case 45: onMidiCC045 (channel, value); break;
- case 46: onMidiCC046 (channel, value); break;
- case 47: onMidiCC047 (channel, value); break;
- case 48: onMidiCC048 (channel, value); break;
- case 49: onMidiCC049 (channel, value); break;
- case 50: onMidiCC050 (channel, value); break;
- case 51: onMidiCC051 (channel, value); break;
- case 52: onMidiCC052 (channel, value); break;
- case 53: onMidiCC053 (channel, value); break;
- case 54: onMidiCC054 (channel, value); break;
- case 55: onMidiCC055 (channel, value); break;
- case 56: onMidiCC056 (channel, value); break;
- case 57: onMidiCC057 (channel, value); break;
- case 58: onMidiCC058 (channel, value); break;
- case 59: onMidiCC059 (channel, value); break;
- case 60: onMidiCC060 (channel, value); break;
- case 61: onMidiCC061 (channel, value); break;
- case 62: onMidiCC062 (channel, value); break;
- case 63: onMidiCC063 (channel, value); break;
- case 64: onMidiCC064 (channel, value); break;
- case 65: onMidiCC065 (channel, value); break;
- case 66: onMidiCC066 (channel, value); break;
- case 67: onMidiCC067 (channel, value); break;
- case 68: onMidiCC068 (channel, value); break;
- case 69: onMidiCC069 (channel, value); break;
- case 70: onMidiCC070 (channel, value); break;
- case 71: onMidiCC071 (channel, value); break;
- case 72: onMidiCC072 (channel, value); break;
- case 73: onMidiCC073 (channel, value); break;
- case 74: onMidiCC074 (channel, value); break;
- case 75: onMidiCC075 (channel, value); break;
- case 76: onMidiCC076 (channel, value); break;
- case 77: onMidiCC077 (channel, value); break;
- case 78: onMidiCC078 (channel, value); break;
- case 79: onMidiCC079 (channel, value); break;
- case 80: onMidiCC080 (channel, value); break;
- case 81: onMidiCC081 (channel, value); break;
- case 82: onMidiCC082 (channel, value); break;
- case 83: onMidiCC083 (channel, value); break;
- case 84: onMidiCC084 (channel, value); break;
- case 85: onMidiCC085 (channel, value); break;
- case 86: onMidiCC086 (channel, value); break;
- case 87: onMidiCC087 (channel, value); break;
- case 88: onMidiCC088 (channel, value); break;
- case 89: onMidiCC089 (channel, value); break;
- case 90: onMidiCC090 (channel, value); break;
- case 91: onMidiCC091 (channel, value); break;
- case 92: onMidiCC092 (channel, value); break;
- case 93: onMidiCC093 (channel, value); break;
- case 94: onMidiCC094 (channel, value); break;
- case 95: onMidiCC095 (channel, value); break;
- case 96: onMidiCC096 (channel, value); break;
- case 97: onMidiCC097 (channel, value); break;
- case 98: onMidiCC098 (channel, value); break;
- case 99: onMidiCC099 (channel, value); break;
- case 100: onMidiCC100 (channel, value); break;
- case 101: onMidiCC101 (channel, value); break;
- case 102: onMidiCC102 (channel, value); break;
- case 103: onMidiCC103 (channel, value); break;
- case 104: onMidiCC104 (channel, value); break;
- case 105: onMidiCC105 (channel, value); break;
- case 106: onMidiCC106 (channel, value); break;
- case 107: onMidiCC107 (channel, value); break;
- case 108: onMidiCC108 (channel, value); break;
- case 109: onMidiCC109 (channel, value); break;
- case 110: onMidiCC110 (channel, value); break;
- case 111: onMidiCC111 (channel, value); break;
- case 112: onMidiCC112 (channel, value); break;
- case 113: onMidiCC113 (channel, value); break;
- case 114: onMidiCC114 (channel, value); break;
- case 115: onMidiCC115 (channel, value); break;
- case 116: onMidiCC116 (channel, value); break;
- case 117: onMidiCC117 (channel, value); break;
- case 118: onMidiCC118 (channel, value); break;
- case 119: onMidiCC119 (channel, value); break;
- case 120: onMidiCC120 (channel, value); break;
- case 121: onMidiCC121 (channel, value); break;
- case 122: onMidiCC122 (channel, value); break;
- case 123: onMidiCC123 (channel, value); break;
- case 124: onMidiCC124 (channel, value); break;
- case 125: onMidiCC125 (channel, value); break;
- case 126: onMidiCC126 (channel, value); break;
- case 127: onMidiCC127 (channel, value); break;
- default: break;
- }
- }
- // ============================================================================================
- // インクルードファイル
- // ============================================================================================
- #include <stdlib.h>
- #include "audioeffectx.h"
-
- #include "CMidiMsg.h"
-
- // ============================================================================================
- // 設計情報の記入
- // ============================================================================================
- #define MY_VST_INPUT_NUM 2 //入力数。モノラル入力=1、ステレオ入力=2
- #define MY_VST_OUTPUT_NUM 2 //出力数。モノラル出力=1、ステレオ出力=2
-
- #define MY_VST_UNIQUE_ID 'SMPL' //ユニークID
- //公開する場合は以下URLで発行されたユニークIDを入力する。
- //http://ygrabit.steinberg.de/~ygrabit/public_html/index.html
-
- #define MY_VST_PRESET_NUM 1 //プリセットプログラムの数
- #define MY_VST_PARAMETER_NUM 0 //パラメータの数
-
- // ============================================================================================
- // VSTの基本となるクラス
- // ============================================================================================
- class MyMidiSample2VST : public AudioEffectX , public CMidiMsg
- {
- protected:
- float volume;
- public:
- MyMidiSample2VST (audioMasterCallback audioMaster);
-
- // 音声信号を処理するメンバー関数
- virtual void processReplacing (float** inputs, float** outputs, VstInt32 sampleFrames);
-
- // MIDIメッセージをホストアプリケーションから受け取るためのメンバー関数
- VstInt32 processEvents (VstEvents* events);
-
-
- void onMidiCC007(unsigned char channel, unsigned char value);
- };
-
- // ============================================================================================
- // このVSTのを生成するための関数
- // ============================================================================================
- AudioEffect* createEffectInstance (audioMasterCallback audioMaster)
- {
- //newでこのVSTを生成したポインタを返す
- return new MyMidiSample2VST (audioMaster);
- }
-
- MyMidiSample2VST::MyMidiSample2VST (audioMasterCallback audioMaster)
- : AudioEffectX (audioMaster, MY_VST_PRESET_NUM, MY_VST_PARAMETER_NUM)
- {
- //VSTの初期化を行う。
-
- //以下の関数を呼び出して入力数、出力数等の情報を設定する。
- //必ず呼び出さなければならない。
- setNumInputs (MY_VST_INPUT_NUM); //入力数の設定
- setNumOutputs (MY_VST_OUTPUT_NUM); //出力数の設定
- setUniqueID (MY_VST_UNIQUE_ID); //ユニークIDの設定
-
- isSynth (true); //このVSTがSynthかどうかのフラグを設定。
- //Synthの場合…true、Effectorの場合…false
-
- canProcessReplacing (); //このVSTが音声処理可能かどうかのフラグを設定。
- //音声処理を行わないVSTはないので必ずこの関数を呼び出す。
-
- //上記の関数を呼び出した後に初期化を行う
- volume = 1.0f;
- }
-
- void MyMidiSample2VST::processReplacing (float** inputs, float** outputs, VstInt32 sampleFrames)
- {
- //入力、出力は2次元配列で渡される。
- //入力は-1.0f~1.0fの間で渡される。
- //出力は-1.0f~1.0fの間で書き込む必要がある。
- //sampleFramesが処理するバッファのサイズ
- float* outL = outputs[0]; //出力 左用
- float* outR = outputs[1]; //出力 右用
-
- for (int i = 0; i < sampleFrames; i++)
- {
- //ここで音声処理を行う。
-
- // MIDIメッセージがあるか確認
- if ( getMidiMessageNum() > 0)
- {
- // MIDIメッセージを処理するタイミングかどうかを確認する。
- if( getNextDeltaFrames() <= i)
- {
- // MIDIメッセージをバッファから取り出し処理する
- midiProc( getMidiMsg() );
- }
- }
-
- //出力バッファへ書き込む。
- outL[i] = volume * (float)((rand() % 256) -128) / 255.0f;
- outR[i] = volume * (float)((rand() % 256) -128) / 255.0f;
- }
- }
-
- // MIDIメッセージを処理するメンバー関数
- // processReplacing()の前に必ず1度だけ呼び出される。
- //
- VstInt32 MyMidiSample2VST::processEvents (VstEvents* events)
- {
- // MIDIのリストを初期化します。
- clearMidiMsg();
-
- int loops = (events->numEvents);
-
- // VSTイベントの回数だけループをまわす。
- for (int i = 0;i < loops; i++)
- {
- // 与えられたイベントがMIDIならばmidimsgbufにストックする
- if ((events->events[i])->type == kVstMidiType)
- {
- VstMidiEvent *midievent = (VstMidiEvent*)(events->events[i]);
- if( !addMidiMsg(midievent) )
- {
- break;
- }
- }
- }
-
- // 1を返さなければならない
- return 1;
- }
-
- //
- // onMidiCC007()関数をオーバーライドして、MIDI CC7の場合の動作を定義する。
- // ここではチャンネルに関係なく、MIDI CC7メッセージを受け取るとノイズのボリュームを
- // 変更するようにしている。
- void MyMidiSample2VST::onMidiCC007 (unsigned char channel, unsigned char value)
- {
- volume = (float)(value) / 127.0f;
- }
項目 | No. | 概要 |