以分钟/秒为单位获取wav音频的长度

时间:2011-04-05 17:40:40

标签: delphi media-player wav

使用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。

该代码是否存在明显问题,还是有更优雅的方法来实现这一目标?

一如既往,感谢您的帮助。

1 个答案:

答案 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

     

改变了   时间格式为毫秒。   所有设备类型都认可。