簡體   English   中英

在VST儀器中快速(實時)下采樣96至44.1 kHz音頻

[英]Downsampling 96 to 44.1 kHz audio fast (realtime) in a VST instrument

我正在嘗試在VSTi(c ++)中實現快速下采樣功能,但是要使其工作起來有些困難。 這就是我擁有的以及我正在嘗試做的。 首先是低通濾波器。

void resetFilter()
{
     c = 1.0 / tan(3.14159265359 * 22050 / 96000.0); // 1.0 / tan(PI * filter_freq / samplerate)
     r = 2.2; // resonance factor

     a1 = 1.0 / ( 1.0 + r * c + c * c);
     a2 = 2* a1;
     a3 =a1;
     b1=2.0 * ( 1.0 - c*c) * a1;
     b2 =( 1.0 - r * c + c * c) * a1;
     in1 = 0;
     in2 = 0;
     in3 = 0;
     out1 = 0;
     out2 = 0;

}
float lowpass(float NewSample)
{
        float output = (a1 * NewSample) + (a2 * in1) + (a3 * in2) - (b1 * out1) - (b2 * out2);
        in2 = in1;
        in1 = NewSample;
        out2 = out1;
        out1 = output;

return output;
}

使用上述低通濾波器后,我通過步進96000/44100 = 2,1769來播放緩沖區。 截斷意味着我將通過pp-> cOffset [o] 2、4、6、8、10、13、15、17、19、21、23、26、28、30等獲得索引(int)系列。從96kHZ緩沖區。 我可以聽到濾波器在高頻下取得了成功,但是由於我從緩沖區讀取系列的方式,因此發出了更深的金屬聲。

然后,我嘗試添加以下內容進行處理(請不要笑):

if ((pp->cOffset[o]-(int)pp->cOffset[o])>=.5 && (pp->cOffset[o]-(int)pp->cOffset[o])<1)
{
 float sum1 = (readPreBuffers[0][0][pI][(VstInt32)pp->cOffset[o]]); // the pp->cOffset[o] is a float
 float sum2 = (readPreBuffers[0][0][pI][(VstInt32)pp->cOffset[o]+1]);
 float sum = ((sum1*0.8) + (sum2*1.2))/2.0;
 outputs[0][i] += (sum / 32768.0)*(pp->cVelocity[o]/127.0);
 outputs[1][i] += (sum / 32768.0)*(pp->cVelocity[o]/127.0);
}
else
read as normal..

這使一些金屬聲音消失了,但並沒有全部消失,我迷失了方向,不知道如何去做。 現在我的頭上的頭發比昨天少!

輸出是主機的輸出緩沖區,主機設置為44.1kHz采樣率,而我的波形采樣為96kHz。

請讓我找到繼續前進的方法。

我發現了,所有深沉的金屬聲音都消失了。

我像以前一樣使用低通濾波器,但是現在從濾波后的聲音緩沖區中讀取時,我使用的是以下方法,而不是問題中的方法。

float deciI2 = (pp->cOffset[o]-(int)pp->cOffset[o]);
float deciI1 = 1 - deciI2;

float sum1 = (readPreBuffers[0][0][pI][(VstInt32)pp->cOffset[o]]);
float sum2 = (readPreBuffers[0][0][pI][(VstInt32)pp->cOffset[o]+1]);
float sum = ((sum1*deciI1) + (sum2*deciI2))/2.0;
outputs[0][i] += (sum / 32768.0)*(pp->cVelocity[o]/127.0);
outputs[1][i] += (sum / 32768.0)*(pp->cVelocity[o]/127.0);

這是可行的,如果有人有更好的方法,我將很高興看到它。 如果有人在工作中需要它,希望與他人分享。

問候,摩根

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM