1
我使用irrKlang從麥克風獲取音頻輸入。這部分效果很好,但我在將輸出保存爲.wav時遇到了問題...保存.wav文件後出錯
波形文件似乎可以保存正常,但似乎不起作用。我想知道如果我的頭是一些如何誤格式化:
private void SaveWave(string path, AudioFormat format, byte[] waveData)
{
//Play the audio for testing purposes
ss = engine0.AddSoundSourceFromPCMData(waveData, "sound", format);
engine0.Play2D(ss, true, false, false);
// write wave header
ushort formatType = 1;
ushort numChannels = (ushort)format.ChannelCount;
ulong sampleRate = (ulong)format.SampleRate;
ushort bitsPerChannel = (ushort)(format.SampleSize * 8);
ushort bytesPerSample = (ushort)format.FrameSize;
ulong bytesPerSecond = (ulong)format.BytesPerSecond;
ulong dataLen = (ulong)format.SampleDataSize;
const int fmtChunkLen = 16;
const int waveHeaderLen = 4 + 8 + fmtChunkLen + 8;
ulong totalLen = waveHeaderLen + dataLen;
///
FileStream fs = new FileStream(path, FileMode.Create, FileAccess.Write);
BinaryWriter bw = new BinaryWriter(fs);
byte[] riff = System.Text.Encoding.ASCII.GetBytes("RIFF");
bw.Write(riff);
bw.Write(totalLen);
byte[] fmt = System.Text.Encoding.ASCII.GetBytes("WAVEfmt ");
bw.Write(fmt);
bw.Write(fmtChunkLen);
bw.Write(formatType);
bw.Write(numChannels);
bw.Write(sampleRate);
bw.Write(bytesPerSecond);
bw.Write(bytesPerSample);
bw.Write(bitsPerChannel);
byte[] data = System.Text.Encoding.ASCII.GetBytes("data");
bw.Write(data);
bw.Write(waveData.Length);
bw.Write(waveData);
bw.Close();
fs.Close();
}
嘿Vishnu,我已根據您的指示更新。同樣的問題,它確實保存了.wav,但實際上並沒有發揮作用。 WAVEfmt中的空間應該在那裏嗎? – Taurian
@Taurian嘗試我建議的編輯。這應該工作 –
無賴,沒有運氣。這裏是我得到的錯誤:http://imgur.com/gjJK0lu 我也會用我的代碼更新這篇文章。 – Taurian