从 RIFF WAV 文件中提取 BitsPerSample
Extracting BitsPerSample from a RIFF WAV File
我正在尝试使用 FileStream 从 WAV 文件中提取 BitsPerSample。根据此来源:WAV offset Table,BitsPerSample 位于偏移量 35 处,长度为 2 个字节。
这是我尝试提取它的代码:
public int getBitsPerSample()
{
int bitsPerSample;
using (var f = File.OpenRead(wavPath))
{
f.Seek(35,SeekOrigin.Begin);
byte[] val = new byte[2];
f.Read(val,0,2);
bitsPerSample = BitConverter.ToInt16(val,0);
}
return bitsPerSample;
}
现在当我在我知道是 16 位的 WAV 文件上使用它时,我得到的 bitsPerSample 是 25600?当我使用十六进制编辑器查看 te WAV 文件时,我的怀疑得到了证实,这 2 个字节实际上位于偏移量 0x22,就在它说“d a t a”之前,它应该在的位置。检查不同的 16 位 WAV 文件证实了这一点。
在 0x22 处寻找得到 2 的 bitspersample,这也是不正确的。
如果现在有人已经知道问题了,那很好,但我会继续添加一些信息以备不时之需。
当我在十六进制编辑器中打开一个 32 位 WAV 文件时,我在偏移量 0x4E 处发现了 bitsPerSample,这又与我的源完全不同,我最后的结果...
您的问题是您误解了链接资源的偏移量。它们是基于 1 的。文件搜索显然是基于 0 的。所以改为寻找字节 34 并重试。
我正在尝试使用 FileStream 从 WAV 文件中提取 BitsPerSample。根据此来源:WAV offset Table,BitsPerSample 位于偏移量 35 处,长度为 2 个字节。
这是我尝试提取它的代码:
public int getBitsPerSample()
{
int bitsPerSample;
using (var f = File.OpenRead(wavPath))
{
f.Seek(35,SeekOrigin.Begin);
byte[] val = new byte[2];
f.Read(val,0,2);
bitsPerSample = BitConverter.ToInt16(val,0);
}
return bitsPerSample;
}
现在当我在我知道是 16 位的 WAV 文件上使用它时,我得到的 bitsPerSample 是 25600?当我使用十六进制编辑器查看 te WAV 文件时,我的怀疑得到了证实,这 2 个字节实际上位于偏移量 0x22,就在它说“d a t a”之前,它应该在的位置。检查不同的 16 位 WAV 文件证实了这一点。
在 0x22 处寻找得到 2 的 bitspersample,这也是不正确的。
如果现在有人已经知道问题了,那很好,但我会继续添加一些信息以备不时之需。
当我在十六进制编辑器中打开一个 32 位 WAV 文件时,我在偏移量 0x4E 处发现了 bitsPerSample,这又与我的源完全不同,我最后的结果...
您的问题是您误解了链接资源的偏移量。它们是基于 1 的。文件搜索显然是基于 0 的。所以改为寻找字节 34 并重试。