用代码获取文件时长。
直接读取wav文件头信息,从文件起始地址偏移28个字节长度为4个字节保存的是每秒钟播放的字节数,
从文件起始地址偏移40个字节长度为4个字节保存的是声音数据的总的字节数,相除就是播放时间。
1 var 2 3 fileStream: TFileStream; 4 {文件头标志} 5 fileHeadArr: array[0..3] of Byte; 6 //每秒钟播放的字节数 7 //声音数据的总的字节数,相除就是播放时间 8 nSecByte, nCountByte: Integer; 9 begin 10 Result := -1; 11 fileStream := TFileStream.Create(strSourceFile, fmOpenRead or fmShareDenyNone); 12 try 13 try 14 fileStream.Position := 28; 15 fileStream.Read(fileHeadArr, SizeOf(fileHeadArr)); 16 17 nSecByte := StrToInt('$' + IntToHex(fileHeadArr[3], 2) + IntToHex(fileHeadArr[2], 2) + 18 IntToHex(fileHeadArr[1], 2) + IntToHex(fileHeadArr[0], 2)); 19 20 fileStream.Position := 508; 21 fileStream.Read(fileHeadArr, SizeOf(fileHeadArr)); 22 nCountByte := StrToInt('$' + IntToHex(fileHeadArr[3], 2) + IntToHex(fileHeadArr[2], 2) + 23 IntToHex(fileHeadArr[1], 2) + IntToHex(fileHeadArr[0], 2)); 24 25 Result := nCountByte div nSecByte; 26 except 27 on e:Exception do 28 begin 29 输出日志('GetFileDuration: ' + e.Message); 30 end; 31 end; 32 finally 33 fileStream.Free; 34 end;