什么是 VST 输入值范围

What is VST inputs value range

我正在尝试通过将一些简单的开源 VST(用 C++ 编写)移植到 VB.NET 语言来了解 DSP 的工作原理。
(我对C语言不是很熟悉,只能看书了。)
虽然我把VST的处理代码一行一行的copy过来了,但是还是不行,声音效果很差
不知道是我翻译的代码有误还是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 浮点格式)之间,并且是一维数组(L、R、L、R...)
我想澄清两件事:

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

您使用的是单维数组,但 processReplacing C++ 代码有两个 (inputs/outputs) 多维数组。每个通道 (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 逻辑。

希望对您有所帮助, 马克