我一直在使用此代码在 delphi 中读取 .wav 数据,并将结果与从 matlab 函数 wavread 获得的值进行比较。从中我可以说matlab函数可以自动识别哪一个是样本数据值,但不能使用delphi(但matlab和delphi代码结果是相同的)。由于我的 delphi 代码无法识别示例数据值,因此我查看了数组,发现示例数据值开始的索引每个 .wav 文件都不同。例如,我测试了一些 .wav 文件并得到了这个:
- classic1.wav 从 wavedata[].Data[] 索引号 40 开始的样本数据值
- classic2.wav 从 wavedata[].Data[] 索引号 35 开始的样本数据值
我通过查看结果得到了上述结论 y,[y, Fs, nbits, opts]=wavread('classic1.wav','double'); 然后我去结果delphi返回一个数组检查它的值,并从索引40开始找到完全相同的值,对于classic1.wav和35对于classic2.wav。我想知道是否有一种方法可以知道每个 .wav 文件的样本数据值的起始索引?
编辑:我已经更正了类似于给定参考的记录,它与标题(从 ChunkID 到 Subchunk2size)完全正确,但我仍然对它后面的示例数据感到困惑,因为与之前的结果没有任何变化。
type
TWaveHeader = packed record
Marker_RIFF: array [0..3] of char;
ChunkSize: cardinal;
Marker_WAVE: array [0..3] of char;
Marker_fmt: array [0..3] of char;
SubChunkSize: cardinal;
FormatTag: word;
NumChannels: word;
SampleRate: longint;
ByteRate: longint;
BlockAlign:word;
BitsPerSample: word;
Marker_data: array [0..3] of char;
DataBytes: longint;
end;
TChannel = record
Data : array of smallint;
end;