MP3-Player bewerten



  • Hab jetzt mal ein neues kleines Projekt gemacht, um mal zu sehen, ob's bei dir an FMOD liegt. Du kannst es unter

    http://de.geocities.com/WebFritzi/Projekte/Downloads/FMODTest.ZIP

    runterladen. Probierst du das mal bitte aus?



  • Hi WebFritzi,

    mir sind noch ein paar Sachen aufgefallen:

    - Wenn man Loop aktiviert, das Lied das gerade läuft aber nicht mehr in der Playliste ist, läuft das Lied nicht nochmal, weiß nicht wie du das handhaben willst.

    - Wenn Loop aktiviert ist, das Lied in der Playliste und eigentlich alles korrekt, läuft das Lied trotzdem nicht, wenn man der Schieber zuvor verschoben hat.

    - Falls Loop funktioniert, ist die Playtaste nicht mehr eingedrückt, erst wenn man z.B. mit der Maus darüberfährt.

    - Wenn Pause gedrückt ist, und man drückt Stop, geht Play zwar raus, "Pause" jedoch nicht, das gleiche, wenn man bei pausiertem Lied Doppelklick auf den Playlist Eintrag. Beide male muss man erst wieder auf Pause *und* Play drücken damit das Lied läuft, gewollt?

    - Playliste Einträge können wenn sie aktiviert (gelb hinterlegt) sind nicht per [DEL] gelöscht werden.

    - Auch nicht schlecht wäre ein kleines Popup Menü beim Rechtsklick auf ein Eintrag mit z.B. Play, Löschen, Infos usw.

    - Und noch ein komischen Verhalten: Wenn man irgendwas in der Playliste macht oder ins Menü geht und dann auf die Titelleiste drückt verschiebt sich der Player etwas nach unten rechts.

    - Wenn man ein Lied abgespielt hat, lässt sich danach nicht mehr auf die Datei zugreifen (löschen, umbenennen usw.), auch wenn es nicht mehr läuft und auch nicht mehr in der Playliste ist!

    MfG
    yogle



  • yogle schrieb:

    Wenn man Loop aktiviert, das Lied das gerade läuft aber nicht mehr in der Playliste ist, läuft das Lied nicht nochmal, weiß nicht wie du das handhaben willst.

    Gut beobachtet. Das war mir bewusst. Hab's aber wieder verdrängt. Danke. Ja, ich ändere das noch.

    yogle schrieb:

    Wenn Loop aktiviert ist, das Lied in der Playliste und eigentlich alles korrekt, läuft das Lied trotzdem nicht, wenn man der Schieber zuvor verschoben hat.

    Sehe jetzt nicht, was du meinst. LOOP bewirkt nur, dass nach Abspielen des letzten Liedes in der Playlist wieder das erste gespielt wird. Es bezieht sich also nicht auf das gerade gespielte Lied sondern auf die gesamte Liste.

    yogle schrieb:

    Falls Loop funktioniert, ist die Playtaste nicht mehr eingedrückt, erst wenn man z.B. mit der Maus darüberfährt.

    Was meinst du mit "funktioniert"? Auch diesen Punkt verstehe ich nicht so ganz.

    yogle schrieb:

    Wenn Pause gedrückt ist, und man drückt Stop, geht Play zwar raus, "Pause" jedoch nicht, das gleiche, wenn man bei pausiertem Lied Doppelklick auf den Playlist Eintrag. Beide male muss man erst wieder auf Pause *und* Play drücken damit das Lied läuft, gewollt?

    OK, die Pause-Taste muss dann raus. Das stimmt. Ist gemerkt. Aber dass man dann wieder auf PLAY klicken muss, stimmt nicht. Nur im ersten Fall natürlich.

    yogle schrieb:

    Playlist-Einträge können wenn sie aktiviert (gelb hinterlegt) sind nicht per [DEL] gelöscht werden.

    Yep. Die Tastaturbehandlung ist noch nicht ganz abgeschlossen. 🙄

    yogle schrieb:

    Auch nicht schlecht wäre ein kleines Popup Menü beim Rechtsklick auf ein Eintrag mit z.B. Play, Löschen, Infos usw.

    OK, sowas soll dann in Version 2.0 kommen. Auch die Options. Erstmal soll die Basis gut funktioneren.

    yogle schrieb:

    Und noch ein komisches Verhalten: Wenn man irgendwas in der Playliste macht oder ins Menü geht und dann auf die Titelleiste drückt verschiebt sich der Player etwas nach unten rechts.

    Stimmt. Das schaue ich mir auch nochmal an...

    yogle schrieb:

    Wenn man ein Lied abgespielt hat, lässt sich danach nicht mehr auf die Datei zugreifen (löschen, umbenennen usw.), auch wenn es nicht mehr läuft und auch nicht mehr in der Playliste ist!

    Tatsächlich? Das ist merkwürdig. Die Einträge werden eigentlich nur mit FindFirst und FindNext eingelesen. Am Ende wird FindClose aufgerufen. Das muss gefixt werden!

    Vielen Dank! So viel habe ich echt nicht erwartet. Das ist sehr nett von dir.



  • WebFritzi schrieb:

    yogle schrieb:

    Wenn man ein Lied abgespielt hat, lässt sich danach nicht mehr auf die Datei zugreifen (löschen, umbenennen usw.), auch wenn es nicht mehr läuft und auch nicht mehr in der Playliste ist!

    Tatsächlich? Das ist merkwürdig. Die Einträge werden eigentlich nur mit FindFirst und FindNext eingelesen. Am Ende wird FindClose aufgerufen. Das muss gefixt werden!

    Hab ich gerade mal ausprobiert. Ist bei mir nicht so. Nur das gerade laufende Lied (also die Datei) kann nicht geändert werden. Was sagt dir denn Windows, wenn du das versuchst? Sind die Dateien bei dir vielleicht schreibgeschützt oder auf CD? 😉



  • Dein FMODTest läuft (bis auf den Stop-Button) korrekt.

    Greetz, Swordfish



  • Swordfish schrieb:

    bis auf den Stop-Button

    Wieso? Stoppt der den Song nicht? Bei mir geht's.

    EDIT: Hab den Player noch auf nem anderen XP-System ausprobiert, und da gab es keine Probleme.



  • WebFritzi schrieb:
    yogle schrieb:

    Wenn man ein Lied abgespielt hat, lässt sich danach nicht mehr auf die Datei zugreifen (löschen, umbenennen usw.), auch wenn es nicht mehr läuft und auch nicht mehr in der Playliste ist!

    Tatsächlich? Das ist merkwürdig. Die Einträge werden eigentlich nur mit FindFirst und FindNext eingelesen. Am Ende wird FindClose aufgerufen. Das muss gefixt werden!

    Hab ich gerade mal ausprobiert. Ist bei mir nicht so. Nur das gerade laufende Lied (also die Datei) kann nicht geändert werden. Was sagt dir denn Windows, wenn du das versuchst? Sind die Dateien bei dir vielleicht schreibgeschützt oder auf CD? 😉

    Muss es relativieren, das Lied das man gerade abgespielt *hat*, also Play und dann Stop, lässt sich mit der Meldung: "*** kann nicht gelöscht werden, da es von einem anderem Programm gerade benutzt wird bla bla bla" nicht löschen.

    WebFritzi schrieb:
    yogle schrieb:

    Wenn man ein Lied abgespielt hat, lässt sich danach nicht mehr auf die Datei zugreifen (löschen, umbenennen usw.), auch wenn es nicht mehr läuft und auch nicht mehr in der Playliste ist!

    Tatsächlich? Das ist merkwürdig. Die Einträge werden eigentlich nur mit FindFirst und FindNext eingelesen. Am Ende wird FindClose aufgerufen. Das muss gefixt werden!

    Hab ich gerade mal ausprobiert. Ist bei mir nicht so. Nur das gerade laufende Lied (also die Datei) kann nicht geändert werden. Was sagt dir denn Windows, wenn du das versuchst? Sind die Dateien bei dir vielleicht schreibgeschützt oder auf CD? 😉

    Hmm kann ich jetzt auch nicht mehr reproduzieren (hatte nur ein Lied in der Playliste), werde es aber weiter beobachten.

    yogle schrieb:

    Falls Loop funktioniert, ist die Playtaste nicht mehr eingedrückt, erst wenn man z.B. mit der Maus darüberfährt.

    Was meinst du mit "funktioniert"? Auch diesen Punkt verstehe ich nicht so ganz.

    Mit "funktioniert", meine ich Punkt 1. und 2. von meinem vorigem Post treten nicht auf, da passiert Punkt 3. 😉 Aber es tritt auch nur auf wenn nur 1 Lied in der Playliste ist und dies über Loop nochmal gespielt wird. Naja

    MfG
    yogle



  • Danke, yogle!

    Das geile ist: Jetzt bekomme ich auch Swordfishs Meldung. Genau das gleiche. Das muss also am FMOD liegen. Die FMOD-LIB, die ich hier verwende, ist nämlich recht alt. Die habe ich vor 1,5 Jahren oder so runtergeladen. Jetzt gerade habe ich mir die neuste Version runtergeladen, die alte FMOD.dll und FMOD.lib umbenannt und die neuen eingefügt. Dann sagt er mir beim Linken

    [LinkerFehler] Unresolved external 'FSOUND_Stream_OpenFile' referenced from C:\SAVED\C++\PROJEKTE\BABYPLAYER\PLAYLIST.OBJ.

    Geil. Das Ding heißt jetzt nicht mehr FSOUND_Stream_OpenFile, sondern FSOUND_Stream_Open und hat einen Parameter mehr. Naja, hab alles wieder zurückgemacht, und dann kam der Fehler.

    Die Sache ist: Der Fehler kommt dann, wenn ich die Borland C++Builder Library (VCL) mit einbinde, also eine Standalone-EXE mache. Wenn ich das unterlasse, läuft alles supi. Merkwürdig...



  • Pfft...Fragt mich nicht warum, aber jetzt geht's wieder. Ich benutze dabei die neue FMOD-Lib. Zwar ging das mit der erst auch nicht, aber nach einigem hin und her dann doch. Natürlich lad ich es gleich hoch und warte auf Swordfishs Diagnose. 😉

    http://de.geocities.com/WebFritzi/Projekte/Downloads/BabyPlayerOnly-2.ZIP



  • yogle schrieb:

    Muss es relativieren, das Lied das man gerade abgespielt *hat*, also Play und dann Stop, lässt sich mit der Meldung: "*** kann nicht gelöscht werden, da es von einem anderem Programm gerade benutzt wird bla bla bla" nicht löschen.

    Das ist auch klar, da das Programm noch im BabyPlayer geladen ist. Es wird erst wieder entladen, wenn ein neues drankommt oder wenn das Programm geschlossen wird.



  • Nö, Pustekuchen.

    Greetz, Swordfish



  • Sehr schade. Aber das kriegen wir schon noch hin. 😉 Was ging denn am STOP-Button nicht beim Test-Programm?

    TODO-List (wenn einem was ein- oder auffällt, bitte erweitern):

    [ ] Click in die TrackBar
    [ ] Playlist auch im MAC-Style
    [ ] Thread für Einlesen von Songs <-- sowieso was für überlegen
    [ ] Titel in der Playlist verschieben können per Maus
    [ ] Mehrere Titel auf einmal öffnen können
    [ ] [SHIFT] + [DOWN/UP] implementieren
    [ ] Optionen
    [ ] Problem von swordfish auf den Grund gehen
    [ ] Menus an richtiger Position nach oben aufklappen lassen
    [ ] Verhalten ändern, wenn geladenes Lied in der Playlist verschwindet (LOOP beachten)
    [x] PAUSE raus, wenn STOP gedrückt wird oder ein anderes Lied drankommt
    [x] [DEL] implementieren
    [x] Kein Verschieben mehr bei Aktivierung von frmBaby
    


  • WebFritzi schrieb:

    Was ging denn am STOP-Button nicht beim Test-Programm?

    Er stoppte die gestartete Wiedergabe nicht.

    Wie verwaltest du die Playlisteinträge? Ich glaube, dort liegt der Hund begraben.

    Greetz, Swordfish



  • Also bei mir funzt es auch, nur krieg ich am Anfang ne Fehlermeldung, dass die "LastPlaylist.txt" nicht geöffnet werden kann (weil die am Anfang natürlich nicht exisitiert). Danach ist das kein Problem mehr. Ich hab den letzten Download-Link benutzt, vielleict liegts auch daran, und die Text-Datei ist normalerweise mit dabei bzw. wird erstellt beim Installations-Programm.

    Ich hab übrigens Win98 😉 Vielleicht liegt das eine Problem doch daran, dass Win2k3 nicht mit der einen Bibliothek zurecht kommt...



  • Vielen Dank fürs Testen, nep. Ja, das mit der Playlist wird natürlich auch noch geändert. Da kommt dann eben eine leere Text-Datei dazu. 🙂

    @Swordfish: Das ist merkwürdig, denn bei mir klappt das mit dem Stoppen. Das Testprojekt ist ganz klein, deswegen stelle ich mal den Code hier hinein. Die Funktionen sind selbsterklärend. Ich kann daran keinen Fehler finden.

    BTW: Was ist eigentlich Win 2k3? Was ist daran anders?

    Die Header-Datei:

    //---------------------------------------------------------------------------
    #ifndef Unit1H
    #define Unit1H
    //---------------------------------------------------------------------------
    #include <Classes.hpp>
    #include <Controls.hpp>
    #include <StdCtrls.hpp>
    #include <Forms.hpp>
    #include <Dialogs.hpp>
    #include "fmod.h"
    //---------------------------------------------------------------------------
    class TForm1 : public TForm
    {
    __published:	// Komponenten, die von der IDE verwaltet werden
        TEdit *Edit1;
        TButton *Button1;
        TButton *Button2;
        TButton *Button3;
        TOpenDialog *OpenDialog1;
        void __fastcall Button1Click(TObject *Sender);
        void __fastcall Button2Click(TObject *Sender);
    
        void __fastcall FormClose(TObject *Sender, TCloseAction &Action);
        void __fastcall Button3Click(TObject *Sender);
    private:	// Benutzerdeklarationen
        FSOUND_STREAM*  hSoundStream;
        AnsiString FileName;
        int Channel;
    
    public:		// Benutzerdeklarationen
        __fastcall TForm1(TComponent* Owner);
    };
    //---------------------------------------------------------------------------
    extern PACKAGE TForm1 *Form1;
    //---------------------------------------------------------------------------
    #endif
    

    Und jetzt die cpp-Datei:

    //---------------------------------------------------------------------------
    #include <vcl.h>
    #pragma hdrstop
    
    #include "Unit1.h"
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    TForm1 *Form1;
    //---------------------------------------------------------------------------
    __fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
    {
       hSoundStream = NULL;
    
       FSOUND_Init(44100, 32, 0);
       FSOUND_SetVolume(FSOUND_ALL, 255);
       FSOUND_SetPanSeperation(1.0);
       FSOUND_SetPan(FSOUND_ALL, FSOUND_STEREO);
    }
    //---------------------------------------------------------------------------
    
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
       if( OpenDialog1->Execute() )
       {
          FileName = OpenDialog1->FileName;
          Edit1->Text = FileName;
       }
    }
    //---------------------------------------------------------------------------
    
    void __fastcall TForm1::Button2Click(TObject *Sender)
    {
       hSoundStream = FSOUND_Stream_OpenFile(FileName.c_str(), 0, 0);
       if( hSoundStream )
       {
          Channel = FSOUND_Stream_Play(FSOUND_FREE, hSoundStream);
          if(Channel == -1)
             ShowMessage("File can be opened but not be played");
       }
       else
          ShowMessage("The file cannot be opened");
    }
    //---------------------------------------------------------------------------
    
    void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
    {
       if(hSoundStream)
          FSOUND_Stream_Close(hSoundStream);
       FSOUND_Close();
    }
    //---------------------------------------------------------------------------
    
    void __fastcall TForm1::Button3Click(TObject *Sender)
    {
       if(hSoundStream)
       {
           FSOUND_Stream_Stop(hSoundStream);
       }
    }
    //---------------------------------------------------------------------------
    


  • Hab mir auch mal eben die Zeit genommen und...das Ding funzt perfecto!

    Meiner wird zwar schöner aber egal 😃 ... Joke 😉 . Echt gelungen 👍 .



  • Benutzt du auch FMOD?



  • Jo aber FMod Ex .... hab das inne Klasse gekapselt...dann isset übersichtlicher...aber mein Player is noch nit fertig...


Anmelden zum Antworten