首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >VST输入值范围是多少?

VST输入值范围是多少?
EN

Stack Overflow用户
提问于 2015-03-12 03:36:57
回答 1查看 384关注 0票数 0

我试图通过将一些简单的开源VST (在C++中写)移植到VB.NET语言来学习DSP的工作原理。

(我对C语言不太熟悉,我只会读。)

虽然我已经逐行复制了VST处理代码,但它不起作用,声音效果非常糟糕。

我不知道我的翻译代码是错的,还是VST输入值范围与我的不同。

我发现VST中的processReplacing方法几乎是以相同格式写的。

代码语言:javascript
复制
<!-- 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就像这样:

代码语言:javascript
复制
<!-- 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.)

我想澄清两件事:

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

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-03-12 13:52:09

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

代码语言:javascript
复制
float *inputsL = inputs[0];
float *inputsR = inputs[1];
float *outputsL = outputs[0];
float *outputsR = outputs[1];

这些方法从多维阵列中提取通道。像这样的声明:

代码语言:javascript
复制
*outputsL++

将增加索引并访问该值(在一条语句中-即C++ ;-)

您应该使用负责处理所有这些细节的VST.NET,这样您就可以集中精力学习正在学习的DSP逻辑。

希望能帮上忙,马克

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29001439

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档