使用DelphiXE,我试图在标签上显示wav文件的长度。这是一个固定比特率为64kbps的wav文件,加载到tMediaPlayer中。
此任务的先前SO帖子为HERE。但是没有显示任何代码,并且与Devhood的链接似乎不再起作用,因此我无法尝试该方法。
我还尝试了HERE中的代码,但结果不正确,如下所示。
type
HMSRec = record
Hours: byte;
Minutes: byte;
Seconds: byte;
NotUsed: byte;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
TheLength: LongInt;
begin
{ Set time format - note that some devices don’t support tfHMS }
MediaPlayer1.TimeFormat := tfHMS;
{ Store length of currently loaded media }
TheLength := MediaPlayer1.Length;
with HMSRec(TheLength) do { Typecast TheLength as a HMSRec record }
begin
Label1.Caption := IntToStr(Hours); { Display Hours in Label1 }
Label2.Caption := IntToStr(Minutes); { Display Minutes in Label2 }
Label3.Caption := IntToStr(Seconds); { Display Seconds in Label3 }
end;
end;
此代码的值为24:23:4,应为0:04:28。
该代码是否存在明显问题,还是有更优雅的方法来实现这一目标?
一如既往,感谢您的帮助。
答案 0 :(得分:3)
为什么不做一些简单的小学数学?
var
sec,
min,
hr: integer;
begin
MediaPlayer1.TimeFormat := tfMilliseconds;
sec := MediaPlayer1.Length div 1000;
hr := sec div SecsPerHour;
min := (sec - (hr * SecsPerHour)) div SecsPerMin;
sec := sec - hr * SecsPerHour - min * SecsPerMin;
Caption := Format('%d hours, %d minutes, and %d seconds', [hr, min, sec]);
但为什么HMS不起作用?好吧,根据the official documentation:
MCI_FORMAT_HMS
更改时间格式 小时,分钟和秒。 由vcr和videodisc识别 设备类型。
MCI_FORMAT_MILLISECONDS
改变了 时间格式为毫秒。 所有设备类型都认可。