我应该通过什么参数来调用该方法C#
我想在BufferReady方法的末尾调用Spectrum方法,但我不知道为什么会出现错误,这告诉我将错误参数传递给它。 Raw
是int
。我应该通过什么参数来调用该方法C#
void microphone_BufferReady(object sender, EventArgs e) {
if (buffer.Length <= 0) return;
// Retrieve audio data
microphone.GetData(buffer);
double[] sampleBuffer = new double[(Utilities.NextPowerOfTwo((uint)buffer.Length))];
int index = 0;
for (int i = 0; i < 2048; i += 2) {
sampleBuffer[index] = Convert.ToDouble(BitConverter.ToInt16((byte[])buffer, i)); index++;
}
//ERROR UNDER
double[] spectrum = FourierTransform.Spectrum(sampleBuffer, Raw);// I GOT ERROR HERE
}
-----------------------
public static double[] Spectrum(ref double[] x, int method = Raw)
{
//uint pow2Samples = FFT.NextPowerOfTwo((uint)x.Length);
double[] xre = new double[x.Length];
double[] xim = new double[x.Length];
Compute((uint)x.Length, x, null, xre, xim, false);
double[] decibel = new double[xre.Length/2];
for (int i = 0; i < decibel.Length; i++)
decibel[i] = (method == Decibel) ? 10.0 * Math.Log10((float)(Math.Sqrt((xre[i] * xre[i]) + (xim[i] * xim[i])))) : (float)(Math.Sqrt((xre[i] * xre[i]) + (xim[i] * xim[i])));
return decibel;
}
添加ref
关键字Spectrum
方法调用的第一个参数
double[] spectrum = FourierTransform.Spectrum(ref sampleBuffer, Raw);
UPDATEref
关键字状态,该阵列应当参照谱法通过,如果你将分配新的值频谱方法中的x
,然后这将在microphone_BufferReady方法中为sampleBuffer
变量分配新值。但正如Jon在评论中所述,在这种特殊情况下,ref
可能会从Spectrum方法定义中删除(但您也必须修改该方法的所有其他调用)。
不知道它为什么要查找'ref' - 可能更好的是将它从'Spectrum()'中移除。 –
嗯,这是他尝试调用的方法的原始签名,因此我认为它比修改方法更好(谁知道 - 也许还有其他方法使用的地方) –
@lazyberezovsky即使在其他地方使用,如果方法(基于它的定义)不需要通过引用来传递值,只要它不在某种广泛分布的公共API中,它可能更好地将其删除并在其他地方修复它。 – Servy
你得到的错误信息是什么? – Hoeloe