gibt TMediaPlayer falsche TrackLength aus?



  • Hallo, bin auch mal auf die Idee gekommen,
    einen kleinen MediaPlayer mit hilfe von TMediaPlayer zu programmieren.
    Jetzt wollte ich, wie man das halt so macht, in ner TrackBar die Position anzeigen.
    Dazu habe ich die Eigenschaften TMediaPlayer::TrackLength und TMediaPlayer::Position verwendet. Jetzt ist es aber so, das das Lied schon am Ende
    ist, wenn der TrackBar grad mal bei der Hälfte ist.Debuggen hat ergeben, dass
    TrackLength ca 600000 ms ergibt(die genaue Zahl weiß ich nicht mehr) das würde ca 10 min entsprechen, das Lied hat aber nur 4!!! TimeFormat hab ich auf Miliseconds gestellt. Ah ja, und bei nem kurzen Track (27 sec)funzt es perfekt.

    Jemand ne Idee an was es liegen könnte?



  • Hallo,

    bei diesem Beispiel klappt das mit der Länge eigentlich immer korrekt:
    Man braucht:
    - 1 Label
    - 1 Timer
    - 1 TrackBar
    - 1 MediaPlayer
    - 1 Button
    - 1 OpenDialog

    #include <vcl.h>
    #pragma hdrstop
    #include "Unit1.h"
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    TForm1 *Form1;
    //---------------------------------------------------------------------------
    __fastcall TForm1::TForm1(TComponent* Owner)        : TForm(Owner){}
    //---------------------------------------------------------------------------
    String ZeitWandeln (long zeit)
    {
      long std=0, min=0, sek=0;
      long alles = zeit;
    //  day = alles / 86400000;
      std = (alles /*% 86400000*/) / 3600000;
      min = (alles % 3600000) / 60000;
      sek =	(alles % 60000) / 1000;
    
      return(FormatFloat("0#",std) +":"+
             FormatFloat("0#",min) +":"+
             FormatFloat("0#",sek) );
    }
    //---------------------------------------------------------------------------
    void TForm1::AnzeigeAktualisieren(void)
    {
      Label1->Caption = Zeit_wandeln(MediaPlayer1->Position) + " / " + ZeitWandeln(TrackBar1->Max);
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::Timer1Timer(TObject *Sender)
    {
      TrackBar1->Position = MediaPlayer1->Position;
      AnzeigeAktualisieren();
      if (MediaPlayer1->Position==TrackBar1->Max)
      {
        Timer1->Enabled = false;
        MediaPlayer1->Stop();
        MediaPlayer1->Rewind();
        TrackBar1->Position = 0;
        AnzeigeAktualisieren();
      }
    }
    //---------------------------------------------------------------------------
    void TForm1::DateiAbspielen(String sFileName)
    {
      if (MediaPlayer1->Mode == mpPlaying )
      {
        MediaPlayer1->Stop();
        MediaPlayer1->Close();
      }
      MediaPlayer1->DeviceType=dtAutoSelect;
    
      try
      {
        Form1->MediaPlayer1->FileName = sFileName;
        Form1->MediaPlayer1->Open();
        AnzeigeAktualisieren();
        Form1->TrackBar1->Max = Form1->MediaPlayer1->TrackLength[1];
        Timer1->Enabled=true;
        Form1->MediaPlayer1->Play();
      }
      catch (...)
      {
        Form1->Timer1->Enabled = false;
        AnsiString MPError = "Error: " + IntToStr(MediaPlayer1->Error) + ": " + MediaPlayer1->ErrorMessage;
        Application->MessageBox(MPError.c_str(),NULL, MB_OK);
      }
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
      if (OpenDialog1->Execute())
      {
         DateiAbspielen(OpenDialog1->FileName);
      }
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::FormCreate(TObject *Sender)
    {
      Timer1->Enabled = false;
      Timer1->Interval = 400;
    }
    //---------------------------------------------------------------------------
    

    Mit freundlichen Grüßen
    Barracuda



  • Ob dus glaubst, oder nich , das geht genau so wenig.
    Dein Prog meint, das Lied geht 12 min.
    Folge:TrackBar kommt nur zur knappen Hälfte, da das Lied nur 5 min geht.
    Dies trat nicht nur bei dem Lied auf, auch be anderen.Allerdings, bei manchen Liedern gehts wieder. Irgendwas stimmt mit der TrackLength Eigenschaft nicht,
    meine ich

    Gru0 Aksel



  • Hallo

    Ich kann mir nicht vorstellen das das Problem bei der VCL-Komponente liegen soll. Diese kapselt ja nur den Mediaplayer von Microsoft.
    Was wird angezeigt wenn du die fraglichen Dateien im Original Windows-Mediaplayer öffnest?

    bis bald
    akari



  • Das hab ich auch schon getestet. Dort wird die TrackLength korrekt angezeigt.


Anmelden zum Antworten