Mediaplayer in eigenen Thread packen und weiteres



  • Ich möchte das die Musik Wiedergabe in einem eigenen Thread stattfindet und nicht im gleichen wie das Formular. Wegen der Prozessor leistung und ruckelfrei. Also wie spreche ich dann zum Beispiel den Button Play an oder Stop, usw.??? Wie sach ich ihm er soll das und das lied abspielen???

    Und noch eine Weitere Frage: Möchte so zusagen eine Playlist machen. Ich meine eine reinfolge von liedern die nach einander abgespielt wird. Und sollten die durch sein soll er wieder von vorne anfangen.

    Noch eine Frage: Wie kann ich nur bestimmte Button zeigen, sprich nur den Play button so das man die Stop taste zum Beispiel nicht sieht.

    Noch eine Frage: Kann ich die Funktionen der Button auch ändern. Sprich wenn ich auf Play drücke das dann zum Beispiel sich ein anderes Formular öffnet???

    Jede idee kann mir vielleicht schon helfen, und am besten gleich mit code beispielen, weil ich manchmal etwas schwer von begriff bin. Jetzt schonmal vielen dank und ein Frohes Fest



  • So viele Fragen, daher hier nur Kurzhinweise:

    - Musikwiedergabe findet immer asynchron statt (d.h. darum brauchst du dich nicht zu kümmern)

    - *.m3u (Playlist)

    - TMediaplayer::VisibleButtons bzw. EnabledButtons, ColoredButtons etc.

    - Nein, nicht direkt (aber schau dir mal die Ereignisse OnNotify, OnPostClick an)



  • Hab noch ne frage zur *.M3U playlist... Kann ich die mit dem Borland c++ Builder erstellen oder welches prog. (möglichst freeware) ist am besten dazu geeignet??? Und wie binde ich die Datei dann ein???



  • m3u-Dateien sind einfache Textdateien, in der pro Zeile die einzelnen Musik- bzw. Videodateien aufgelistet sind.
    Diese kannst du einfach programmtechnisch mit der TStringList erstellen (SaveToFile) bzw. laden(LoadFromFile).

    Ich hatte aber gedacht, daß die TMediaPlayer-Komponente schon direkt die m3u-Dateien unterstützt (wie der Windows Media Player), aber habe gerade an einem Beispiel-Programm gemerkt, daß dem nicht so ist.
    Du mußt also dann bei deinem Programm diese Liste selber verwalten, und am Ende eines Tracks zum nächsten springen.
    Ich habe mal ein ähnliches Programm geschrieben und dieses
    verwendet einen Timer (Intervall 500ms):

    void __fastcall TMovieForm::TimerTimer(TObject *Sender)
    {
    	if(MediaPlayer->Position == MediaPlayer->Length)
    		OpenNextFile();
    }
    
    void TMovieForm::OpenNextFile()
    {
    	Timer->Enabled = false;
    
    	if(m_nFile >= m_pFiles->Count)
    		m_nFile = 0; // jump to first file
    
    	MediaPlayer->FileName = m_pFiles->Strings[m_nFile++];
    	MediaPlayer->Display = MoviePanel;
    	MediaPlayer->Open();
    	MediaPlayer->DisplayRect = MoviePanel->ClientRect;
    	MediaPlayer->Play();
    	Timer->Enabled = true;
    }
    

Anmelden zum Antworten