我最近发现了这个由 Michael Gruhn 扩展立体声信号的实现。
http://www.musicdsp.org/showArchiveComment.php?ArchiveID=256
我自己实现了如下:
void Voice::WidenTheStereoImage( double *a_dInputBufferLeft, double *a_dInputBufferRight, double *a_dOutputBufferLeft, double *a_dOutputBufferRight size_t a_zBufferSize, double a_dWidth){
double dTemp = 1/(1.0 + a_dWidth);
double dCoefficientM = 1.0 * dTemp;
double dCoefficientS = a_dWidth * 0.5;
double dValueM = 0.0;
double dValueS = 0.0;
for(size_t i = 0; i < a_zBufferSize; i++)
{
dValueM = (a_dInputBufferLeft[i] + a_dInputBufferRight[i]) * dCoefficientM;
dValueS = (a_dInputBufferRight[i] - a_dInputBufferLeft[i]) * dCoefficientS;
a_dOutputBufferLeft[i] = dValueM - dValueS;
a_dOutputBufferRight[i] = dValueM + dValueS;
}
}
当我将此功能应用于任何信号时,我没有得到类似于输入的加宽立体声版本。我尝试将 1 到 4 的值用作 Width,但它听起来有点失真。
我想知道这个代码示例是否只是实现的一部分。我看不出信号的一侧是如何在上面延迟的,这似乎(对我来说)是立体声加宽的关键因素?
另外我认为这个信号的输出需要与原始输入混合?这些是正确的假设吗?
有人可以解释这段代码在做什么以及我必须做什么才能从中获得立体声加宽效果吗?