我想记录来自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