MIDIメッセージを処理するVSTについて
ここでは
最小構成のVSTで作成したVSTを基にMIDIメッセージにあわせて動作するVSTを作成する。
作成するVSTはロードされると常にノイズを発生させる(音量注意)。このノイズのボリュームをMIDI CC7でコントロールできるVSTを作成する。
最小構成のVSTのソースコード全体は
ここにある。
- 受け取ったMIDIメッセージを確保するための変数の追加
- ホストアプリケーション(Cubase,Sonar等)からのMIDIメッセージを上記変数に保存するprocessEvents()関数の追加
- processReplacing()関数内に受け取ったMIDIメッセージを処理するコードの追加
なお、ここに記載している内容についてはMIDIメッセージについてある程度の知識があることを前提としている。
また、ここで作成するVSTサンプルのソースコード全体は
ここにある。
MIDIメッセージ用の構造体の定義
まず始めにMIDIメッセージ用の構造体を定義する。
MIDIメッセージ用の構造体ではMIDIメッセージ・チャンネル番号・MIDIデータ1・MIDIデータ2に加え、MIDIメッセージの処理タイミングを示すVstInt32型の変数を定義するとよい。
(MIDIメッセージの処理タイミングを示すVstInt32型の変数の詳細は後述。)
具体的には以下のようになる。
struct MidiMessage
{
VstInt32 deltaFrames; //MIDIメッセージを処理するタイミング
unsigned char message; //MIDIメッセージ番号
unsigned char channel; //MIDIチャンネル
unsigned char data1; //MIDIデータ1
unsigned char data2; //MIDIデータ2
};
VSTのクラス定義
続いてVSTの基本となるクラスを作成する。
最小構成のVSTに、先ほど定義したMidiMessage型のバッファとホストアプリケーションからMIDIメッセージを受け取るためのprocessEvents()関数を追加で定義する。
具体的には以下のようになる。
#define MIDIMSG_MAXNUM 255
class MyMidiSampleVST : public AudioEffectX
{
protected:
int midimsgnum; //受け取ったMIDIメッセージの数
MidiMessage midimsgbuf[MIDIMSG_MAXNUM]; //受け取ったMIDIメッセージを保管するバッファ
// ノイズのボリューム
float volume;
public:
MyMidiSampleVST (audioMasterCallback audioMaster);
// 音声信号を処理するメンバー関数
virtual void processReplacing (float** inputs, float** outputs, VstInt32 sampleFrames);
// MIDIメッセージをホストアプリケーションから受け取るためのメンバー関数
VstInt32 processEvents (VstEvents* events);
};
同一カテゴリのTips
項目 |
No. |
概要 |
MIDIメッセージ処理 |
No.1 |
MIDIメッセージ処理で最小構成の自作VSTに追加する変数・関数 |
No.2 |
VSTの初期化とMIDIメッセージ処理関連の変数の初期化 |
No.3 |
ホストアプリケーションからMIDIメッセージを受け取る方法 |
No.4 |
MIDIメッセージをprocessReplacing()関数中で処理する方法 |
No.5 |
MIDIメッセージ処理で作成したVSTのサンプルソースコード全体(暫定版) |
javascript plugin Error : このプラグインで利用できない命令または文字列が入っています。
最終更新:2013年08月06日 01:49