怎样 读出 wav 文件的时间长度?(100分)

  • 主题发起人 主题发起人 SeekMyself
  • 开始时间 开始时间
S

SeekMyself

Unregistered / Unconfirmed
GUEST, unregistred user!
要求:客户指定一个wav 文件后,程序自动读出该wav文件的播放时间长度值?

不熟悉 wav的格式,知道的兄弟给个提示!
 
WAV文件的头:44字节
TPCMWaveHeader = record
rID : array[0..3] of char; { 'RIFF' Identifier }
rLen : longint;
wID : array[0..3] of char; { 'WAVE' Identifier }
fId : array[0..3] of char; { 'fmt ' Identifier }
fLen : longint; { Fixed, must be 16 }
wFormatTag : word; { Fixed, must be 1 }
nChannels : word; { Mono=1, Stereo=2 }
nSamplesPerSec : longint; { SampleRate in Hertz }
nAvgBytesPerSec : longint;
nBlockAlign : word;
nBitsPerSample : word; { Resolution, e.g. 8 or 16 }
dId : array[0..3]of char; { 'data' Identifier }
dLen : longint; { Number of following data bytes }
end;
 
to skadon :
具体怎么访问,能给个例子吗?
 
var
hwav : TPCMWaveHeader;
WAVFilein : TFileStream;
bits, mmsec : LongInt;
timelen : float;
begin
WAVFilein:=TFileStream.Create(FileName,fmOpenRead);
WAVFilein.position:=0; // 从0开始
WAVFilein.Read(hwav, SizeOf(hwav));
WAVFilein.Free;
// hwav.dLen wave数据长度,字节
//每采样点字节数
bits:=(hwav.nChannels * hwav.nBitsPerSample) div 8;
//每秒字节数
mmsec:=hwav.nSamplesPerSec * bits;
//时间长度:秒
timelen:= hwav.dLen / mmsec;
end;
 
谢了,我先试试
 
多谢 skadon ,测试正确!
 
收了,说不定以后用的着,谢谢了
 
多人接受答案了。
 
后退
顶部