什么是 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...)
我想澄清两件事:
- VST 输入和我的 VB.NET 输入格式相同吗?
- 我的 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 逻辑。
希望对您有所帮助,
马克
我正在尝试通过将一些简单的开源 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...)
我想澄清两件事:
- VST 输入和我的 VB.NET 输入格式相同吗?
- 我的 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 逻辑。
希望对您有所帮助, 马克