我正在尝试通过将一些简单的开源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 ...)
我想澄清两件事:
答案 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逻辑。
希望它有所帮助, 马克