MySynthSampleVSTクラスの実装
MySynthSampleVSTの初期化
MySynthSampleVSTの初期化では
初期化ルールに従い初期化を行っている。
MySynthSampleVST::MySynthSampleVST (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はないので必ずこの関数を呼び出す。
//上記の関数を呼び出した後に初期化を行う
}
ただし、作成するものが音源(VSTi)のためisSynth()関数の引数にtrueを入れている。
isSynth (true); //このVSTがSynthかどうかのフラグを設定。
//Synthの場合…true、Effectorの場合…false
MIDIメッセージをホストアプリケーションから受け取る
受け取ったMIDIメッセージの振り分け
受け取ったMIDIメッセージをメッセージごとに処理を振り分ける。
今回の音源のMIDI Controllerにあたる部分となる。
実装についてはCMidiMsgクラスからオーバーライドした
MidiProc()関数が該当する。
詳細については省略する。
MIDI ノードOn/Offメッセージを受け取った時の処理
今回の音源のVoice Controllerにあたる部分を実装する。
今回の音源の仕様で記述したとおり、ノートOnメッセージを受け取った場合、まず停止中(OFF状態)のボイスを探す。
停止中のボイスが見つかれば、そのボイスを発音(start)させ、停止中ボイスの検索を打ち切る。
void MySynthSampleVST::onMidiKeyOn (unsigned char channel, unsigned char noteNo, unsigned char velo)
{
// OFF状態のボイスを探す
for(int i = 0; i < MAX_VOICES; i++)
{
if(cvoice[i].getStatus() == VOICE_STATE_OFF)
{
// OFF状態のボイスをONにして検索終了
cvoice[i].start(noteNo);
break;
}
}
}
なお、上記のコードはすべて発音中の場合、それ以上音が出ないという不具合(仕様)がある。(この仕様の修正についてはそのうち説明予定。)
次にノートOnメッセージを受け取った場合であるが、これは発音中(ON状態)かつ音程(ノートナンバー)が一致するものを探し出し、見つかればそのボイスを停止(stop)させるという処理を実施している。
void MySynthSampleVST::onMidiKeyOff (unsigned char channel, unsigned char noteNo, unsigned char velo)
{
// ON状態でかつノートNoと一致するボイスを探す
for(int i = 0; i < MAX_VOICES; i++)
{
if(cvoice[i].getStatus() == VOICE_STATE_ON && cvoice[i].getNoteNo() == noteNo)
{
// ON状態のボイスをOFFにして検索終了
cvoice[i].stop();
break;
}
}
}
processReplacing()関数
作成中
同一カテゴリのTips
javascript plugin Error : このプラグインで利用できない命令または文字列が入っています。
最終更新:2011年04月18日 00:35