0

BufferReadyメソッドの最後でSpectrumメソッドを呼び出したかったのですが、間違った引数を渡したというエラーが発生する理由がわかりません。Rawですint

  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;
                }
4

1 に答える 1

3

メソッド呼び出しrefの最初のパラメーターにキーワードを追加しますSpectrum

double[] spectrum = FourierTransform.Spectrum(ref sampleBuffer, Raw);

UPDATE refキーワードは、その配列はSpectrumメソッドへの参照によって渡される必要があることを示しています。また、xSpectrumメソッドで新しい値を割り当てる場合、これによりsampleBuffer、microphone_BufferReadyメソッドで変数に新しい値が割り当てられます。しかし、Jonがコメントで述べたように、この特定のケースでrefは、Spectrumメソッド定義から削除できます(ただし、そのメソッドの他のすべての呼び出しを変更する必要があります)。

于 2012-12-10T17:30:59.090 に答える