gpt4 book ai didi

c++ - 什么是 VST 输入值范围

转载 作者:行者123 更新时间:2023-11-28 06:23:12 26 4
gpt4 key购买 nike

我正在尝试通过将一些简单的开源 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 浮点格式)之间,并且是一维数组(L、R、L、R...)
我想澄清两件事:

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

最佳答案

您使用的是单维数组,但 processReplacing C++ 代码有两个(输入/输出)多维数组。每个 channel (L/R) 位于不同的(子)数组中,样本是连续的,范围为 [-1.0,1.0]

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

这些从多维数组中提取 channel 。像这样的语句:

*outputsL++

将递增索引并访问值(在一条语句中 - 那是 C++ ;-)

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

希望对你有帮助马克

关于c++ - 什么是 VST 输入值范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29001439/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com