2013-06-26 76 views
0

現在我有一個音頻文件(2通道,44.1kHz採樣率,16位採樣大小,WAV)我想通過它到這種方法,但我不知道任何方式來轉換WAV文件轉換爲字節數組。處理16位採樣音頻

/// <summary> 
    /// Process 16 bit sample 
    /// </summary> 
    /// <param name="wave"></param> 
    public void Process(ref byte[] wave) 
    { 
     _waveLeft = new double[wave.Length/4]; 
     _waveRight = new double[wave.Length/4]; 

     if (_isTest == false) 
     { 
      // Split out channels from sample 
      int h = 0; 
      for (int i = 0; i < wave.Length; i += 4) 
      { 
       _waveLeft[h] = (double)BitConverter.ToInt16(wave, i); 
       _waveRight[h] = (double)BitConverter.ToInt16(wave, i + 2); 
       h++; 
      } 
     } 
     else 
     { 
      // Generate artificial sample for testing 
      _signalGenerator = new SignalGenerator(); 
      _signalGenerator.SetWaveform("Sine"); 
      _signalGenerator.SetSamplingRate(44100); 
      _signalGenerator.SetSamples(16384); 
      _signalGenerator.SetFrequency(5000); 
      _signalGenerator.SetAmplitude(32768); 
      _waveLeft = _signalGenerator.GenerateSignal(); 
      _waveRight = _signalGenerator.GenerateSignal(); 
     } 

     // Generate frequency domain data in decibels 
     _fftLeft = FourierTransform.FFTDb(ref _waveLeft); 
     _fftRight = FourierTransform.FFTDb(ref _waveRight); 
    } 

編輯喜遺憾的混亂。我目前對音頻信號不熟悉,所以我對我想要得到的內容的解釋是錯誤的。爲了使這種方法正常工作,我相信我只需要在wav文件中傳遞數據塊的字節數組。最終的結果是將代碼中所示的fft應用於它並將其轉換爲譜圖。謝謝。

+0

你可能想看看這個http://stackoverflow.com/questions/8754111/how-to-read-the-data-in-a-wav-file對陣數組 – MisterMetaphor

+0

嗨,感謝參考。我看了一下,發現我只想檢索包含數據塊的字節數組。在附註中,該示例給出了雙倍的返回。我將如何將其更改爲一個字節數組,將其傳遞到我的方法中。如果我在任何地方都錯了,請糾正我。 –

+0

嘗試libsoundfile或許多在線文獻中解釋如何從wav文件讀取數據。 –

回答

0

你需要:

using System.IO; 

這個代碼來獲取字節數組

byte[] data = File.ReadAllBytes(PathToFile); 

其中PathToFile.wav文件的位置(如字符串)。

編輯:

現在我有一個音頻文件(2個通道,44.1kHz的採樣率,16bit的採樣大小,WAV),我想將它傳遞到這個方法,但我不知道任何將WAV文件轉換爲字節數組的方式。

他要求一個函數從.wav文件中獲取字節數組,他沒有提到有關獲取包含音樂數據的字節數組的特定部分的任何信息。 所以Downvoting正確的答案是..

+0

這將讀取完整的文件,RIFF頭和東西。我認爲這個問題是關於處理來自WAV文件的音頻數據。 – MisterMetaphor

+0

對不起,但他問如何將.wav文件轉換爲字節數組。而不是如何獲得DataChunk ... –

+0

Sry的困惑。我舉起你的答案,因爲你給的例子是我「最初」想問的。 –