【问题标题】:What arguments should I pass to invoke that method C#我应该传递什么参数来调用该方法 C#
【发布时间】:2012-12-10 17:27:33
【问题描述】:

我想在 BufferReady 方法的末尾调用 Spectrum 方法,但我不知道为什么会出现错误,告诉我我向它传递了错误的参数。 Rawint

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

【问题讨论】:

  • 您收到的错误信息是什么?

标签: c# methods arguments


【解决方案1】:

Spectrum方法调用的第一个参数中添加ref关键字

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

更新 ref 关键字状态,该数组应通过引用 Spectrum 方法传递,如果您将在 Spectrum 方法中为 x 分配新值,那么这将为sampleBuffer 麦克风_BufferReady 方法中的变量。但正如 Jon 在 cmets 中所说,在这种特殊情况下,ref 可以从您的 Spectrum 方法定义中删除(但您也必须修改该方法的所有其他调用)。

【讨论】:

  • 不知道它为什么要寻找ref -- 将其从Spectrum() 中删除可能会更好。
  • 嗯,这是他试图调用的方法的原始签名,因此我认为这比修改方法更好(谁知道-也许还有其他地方使用方法)
  • @lazyberezovsky 即使它在其他地方使用,如果该方法(基于它的定义)不需要通过引用传递值,最好将其删除并在其他使用它的地方修复它,只要它不在某种广泛分布的公共 API 中。
  • @Servy,Jon 同意在这种特殊情况下ref 不会影响任何事情(因为新值未分配给数组引用)并且可以将其删除。这是一个很好的通知
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-09-26
  • 1970-01-01
  • 1970-01-01
  • 2023-03-13
  • 1970-01-01
  • 2012-06-23
  • 1970-01-01
相关资源
最近更新 更多