我试图通过将一些简单的开源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和一维数组之间(L,R,L,R.)
我想澄清两件事:
发布于 2015-03-12 13:52:09
您使用的是单维数组,但是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逻辑。
希望能帮上忙,马克
https://stackoverflow.com/questions/29001439
复制相似问题