我正在 跨平台应用程序框架 中实施音频,并在开始使用wave文件时遇到一些麻烦。
UInt32 type = rd.ReadUInt32();
UInt32 size = rd.ReadUInt32();
UInt32 waveType = rd.ReadUInt32();
UInt32 fmtType = rd.ReadUInt32();
if (type != MAGIC_RIFF || waveType != MAGIC_WAVE || fmtType != MAGIC_fmt)
{
throw new InvalidDataException("Data is not of WAVE format");
}
“fmt”幻数不正确它实际上是 0x4b4e554a 。 Windows-Media-Player可以轻松播放文件,但我没有找到任何信息这个块可能是什么。根据定义,必须出现“fmt”块 如果我加载另一个文件,“fmt”块正在出现,那么块实际包含的是什么信息(不能是数据块,因为它的值是 0x61746164 。
答案 0 :(得分:0)
fmt 块不需要是标头之后的第一个块。有一个简单的解决方案可以跳过标题和 fmt 块之间的块:
UInt32 fmtType = rd.ReadUInt32();
while (fmtType != MAGIC_fmt)
{
rd.ReadBytes(rd.ReadInt32());
fmtType = rd.ReadUInt32();
}