2011-04-05 91 views
1

使用DelphiXE,我試圖在標籤上顯示wav文件的長度。這是一個以64kbps的固定比特率加載到tMediaPlayer中的wav文件。以分鐘/秒爲單位獲取wav音頻的長度

以前的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。

該代碼是否存在明顯的問題,或者是否有一些更優雅的方式來實現?

一如既往,感謝您的幫助。

回答

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

更改 時間格式爲毫秒。 被所有設備類型識別。

+0

適合我!我想這只是一個有時最簡單的答案沒有發生的情況。再次感謝安德烈亞斯! – Bobby 2011-04-05 18:05:44

相關問題