引数 | 説明 |
float** inputs | 入力音声信号のバッファ。2次元配列で渡される。 1次元目の大きさはVSTの初期化時にsetNumInputsで指定したサイズ。 2次元目の大きさは後述のsampleFramesとなる。 書き込まれている音声信号は-1.0~+1.0の範囲 |
float** outputs | 出力音声信号のバッファ。2次元配列で渡される。 1次元目の大きさはVSTの初期化時にsetNumOutputsで指定したサイズ。 2次元目の大きさは後述のsampleFramesとなる 音声信号は-1.0~+1.0の範囲で書き込まなければならない。 |
VstInt32 sampleFrames | 入力音声信号、出力音声信号のバッファサイズ |
- void MyTremoloVST::processReplacing (float** inputs, float** outputs, VstInt32 sampleFrames)
- {
- //入力、出力は2次元配列で渡される。
- //入力は-1.0f~1.0fの間で渡される。
- //出力は-1.0f~1.0fの間で書き込む必要がある。
- //sampleFramesが処理するバッファのサイズ
- float* inL = inputs[0]; //入力 左用
- float* inR = inputs[1]; //入力 右用
- float* outL = outputs[0]; //出力 左用
- float* outR = outputs[1]; //出力 右用
-
- float dt = 1.0f / getSampleRate (); //1フレームで進む秒数
- float pi = 3.14159265f; //円周率
-
- while (sampleFrames >= 0)
- {
- //ここで音声処理を行う。
-
- //dt分時間を進める。
- //トレモロ周期を超えた場合は、周期分戻す。
- fTime = fTime + dt;
- if (fTime > fTremoloSpeed)
- {
- fTime -= fTremoloSpeed;
- }
-
- //出力バッファへ書き込む。
- (*outL) = (*inL) * ( 1.0f - fTremoloDepth *
- (0.5f + 0.5f*sin(2.0f*pi*fTime/fTremoloSpeed)));
- (*outR) = (*inR) * ( 1.0f - fTremoloDepth *
- (0.5f + 0.5f*sin(2.0f*pi*fTime/fTremoloSpeed)));
-
- inL++;
- inR++;
- outL++;
- outR++;
- sampleFrames--;
- }
-
- }
inputs[MY_VST_INPUT_NUM][sampleFrames] //MY_VST_INPUT_NUM=2
outputs[MY_VST_OUTPUT_NUM][sampleFrames] //MY_VST_OUTPUT_NUM=2
float* inL = inputs[0]; //入力 左用
float* inR = inputs[1]; //入力 右用
float* outL = outputs[0]; //出力 左用
float* outR = outputs[1]; //出力 右用
float dt = 1.0f / getSampleRate (); //1フレームで進む秒数
float pi = 3.14159265f; //円周率
while (sampleFrames >= 0)
{
//ここで音声処理を行う。
:
:
}
fTime = fTime + dt;
if (fTime > fTremoloSpeed)
{
fTime -= fTremoloSpeed;
}
//出力バッファへ書き込む。
(*outL) = (*inL) * ( 1.0f - fTremoloDepth * (0.5f + 0.5f*sin(2.0f*pi*fTime/fTremoloSpeed)));
(*outR) = (*inR) * ( 1.0f - fTremoloDepth * (0.5f + 0.5f*sin(2.0f*pi*fTime/fTremoloSpeed)));
inL++;
inR++;
outL++;
outR++;
sampleFrames--;