2012-12-10 126 views
0

我想在BufferReady方法的末尾調用Spectrum方法,但我不知道爲什麼會出現錯誤,這告訴我將錯誤參數傳遞給它。 Rawint我應該通過什麼參數來調用該方法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; 
       } 
+1

你得到的錯誤信息是什麼? – Hoeloe

回答

3

添加ref關鍵字Spectrum方法調用的第一個參數

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

UPDATEref關鍵字狀態,該陣列應當參照譜法通過,如果你將分配新的值頻譜方法中的x,然後這將在microphone_BufferReady方法中爲sampleBuffer變量分配新值。但正如Jon在評論中所述,在這種特殊情況下,ref可能會從Spectrum方法定義中刪除(但您也必須修改該方法的所有其他調用)。

+2

不知道它爲什麼要查找'ref' - 可能更好的是將它從'Spectrum()'中移除。 –

+0

嗯,這是他嘗試調用的方法的原始簽名,因此我認爲它比修改方法更好(誰知道 - 也許還有其他方法使用的地方) –

+1

@lazyberezovsky即使在其他地方使用,如果方法(基於它的定義)不需要通過引用來傳遞值,只要它不在某種廣泛分佈的公共API中,它可能更好地將其刪除並在其他地方修復它。 – Servy

相關問題