-1

クロスプラットフォームアプリケーションフレームワークにAudioを実装していますが、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であるため、データチャンクにすることはできません) 。

4

1 に答える 1

-1

fmtチャンクは、ヘッダーの後の最初のチャンクである必要はありません。ヘッダーfmtチャンクの間のチャンクをスキップする簡単な解決策があります。

UInt32 fmtType = rd.ReadUInt32();

while (fmtType != MAGIC_fmt)
{
    rd.ReadBytes(rd.ReadInt32());
    fmtType = rd.ReadUInt32();

}
于 2013-01-14T18:16:59.597 に答える