什么是VST输入值范围

时间:2015-03-12 03:36:57

标签: c++ vb.net vst

我正在尝试通过将一些简单的开源VST(用C ++编写)移植到VB.NET语言来学习DSP的工作原理。
(我对C语言不熟悉,我只能读它。)
虽然我逐行复制VST处理代码,但它不起作用,声音效果非常糟糕 我不知道我的翻译代码是错误的还是VST输入值范围与我的不同。

我发现VST中的processReplacing方法几乎以相同的格式写成

<!-- language: cpp -->
void Compressor::processReplacing(float **inputs, float **outputs, VstInt32 sampleFrames) {
    float *inputsL = inputs[0];
    float *inputsR = inputs[1];
    float *outputsL = outputs[0];
    float *outputsR = outputs[1];
    while(--sampleFrames >= 0) {
        float inL = *inputsL++;
        float inR = *inputsR++;
        // some code here
        *outputsL++ = outL;
        *outputsR++ = outR;
    }
}

我把它翻译成VB.NET就像这样:

<!-- language: vb -->
Public Sub processReplacing(inputs As Single(), count As Integer)
    For i = 0 To count - 1 Step 2
        inL = inputs(i)
        inR = inputs(i + 1)
        ' some code here
        inputs(i) = outL
        inputs(i + 1) = outR
    Next
End Sub

我的VB.NET输入值介于[-1..1](32位IEEE浮点格式)之间,它是1-d数组(L,R,L,R ...)
我想澄清两件事:

  1. VST输入和我的VB.NET输入是否是相同的格式?
  2. 我的VB.NET代码翻译正确或我弄错了?

1 个答案:

答案 0 :(得分:1)

您使用的是单维度数组,但processReplacing C ++代码有两个(输入/输出)多维数组。每个通道(L / R)位于不同的(子)阵列中,样本顺序为[-1.0,1.0]

float *inputsL = inputs[0];
float *inputsR = inputs[1];
float *outputsL = outputs[0];
float *outputsR = outputs[1];

这些从多维数组中提取通道。 这样的陈述:

*outputsL++

将增加索引并访问该值(在一个语句中 - 即C ++; - )

您应该使用VST.NET来处理所有这些细节,这样您就可以专注于您想要学习的DSP逻辑。

希望它有所帮助, 马克