現在我有一個音頻文件(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應用於它並將其轉換爲譜圖。謝謝。
你可能想看看這個http://stackoverflow.com/questions/8754111/how-to-read-the-data-in-a-wav-file對陣數組 – MisterMetaphor
嗨,感謝參考。我看了一下,發現我只想檢索包含數據塊的字節數組。在附註中,該示例給出了雙倍的返回。我將如何將其更改爲一個字節數組,將其傳遞到我的方法中。如果我在任何地方都錯了,請糾正我。 –
嘗試libsoundfile或許多在線文獻中解釋如何從wav文件讀取數據。 –