我想記錄來自Kinect的音頻流並將其保存在我的電腦中,所以我在這裏引用示例代碼。 http://channel9.msdn.com/Series/KinectQuickstart/Audio-Fundamentals通過WAVEFORMATEX從Kinect錄製音頻
這是我的部分代碼。
public static void WriteWavHeader(Stream stream, int dataLength)
{
using (var memStream = new MemoryStream(64))
{
int cbFormat = 18; //sizeof(WAVEFORMATEX)
WAVEFORMATEX format = new WAVEFORMATEX()
{
//wFormatTag = 0,
nChannels = 1,
nSamplesPerSec = 16000,
nAvgBytesPerSec = 32000,
nBlockAlign = 2,
wBitsPerSample = 16,
cbSize = 0
};
using (var bw = new BinaryWriter(memStream))
{
//RIFF header
WriteString(memStream, "data");
bw.Write(cbFormat);
WriteString(memStream, "RIFF");
bw.Write(dataLength + cbFormat + 4); //File size - 8
WriteString(memStream, "WAVE");
WriteString(memStream, "fmt ");
bw.Write(cbFormat);
//WAVEFORMATEX
bw.Write(format.wFormatTag);
bw.Write(format.nChannels);
bw.Write(format.nSamplesPerSec);
bw.Write(format.nAvgBytesPerSec);
bw.Write(format.nBlockAlign);
bw.Write(format.wBitsPerSample);
bw.Write(format.cbSize);
//data header
WriteString(memStream, "data");
bw.Write(dataLength);
memStream.WriteTo(stream);
}
}
}
在行「bw.Write(format.wFormatTag);」中出現錯誤。當我編譯代碼時,WAVEFORMATEX中的其他行沒有錯誤時,我已將「Bass.Net」添加到我的引用並使用「Un4seen.Bass」,但我仍無法修復它。
錯誤行顯示「無法傳輸從'Un4seen.Bass.WAVEFormatTag'bool'「 – Tony
根據http://www.bass.radio42.com/help/html/56c44e65-9b99-fa0d-d74a-3d9de3b01e89.htm WAVEFormatTag是一個枚舉值。將其重新轉換爲正確大小的數字。我不知道它應該是一個'short'還是'int'或其他什麼,你需要試一試。所以'bw.Write((short)format.wFormatTag)''可以工作。 –
非常感謝,它的工作原理。 – Tony