audio play klappt nach stop nicht



  • hi Ich habe ein paar Programmschnipsel aus dem Forum zusammengebastelt und alles klappt auch ganz gut 🙂
    Nun möchte ich aber nachdem ich eine Audio Datei gestoppt habe auch wieder eine andere abspielen könne ... doch leider klappt das nicht !
    kann mir da bitte einer weiterhelfen ! Danke

    // Spielt AudioFile ab:
    int PlayAudio(char *filename)
    {
        char cmd[500];
    
        // Eine Datei öffnen und als Device-Alias "mp3player" setzen:
        wsprintf(cmd,"open \"%s\" alias audio",filename);
        if (mciSendString(cmd,NULL,NULL,NULL)!=0)
        {
            // Hat nicht geklappt!
            MessageBox(0,"Unable to open file","mci-error",0);
            return 0;
        }
    
        // Das Zeitformat auf Millisekunden setzen:
        wsprintf(cmd,"set audio time format milliseconds");
        if (mciSendString(cmd,NULL,NULL,NULL)!=0)
        {
            // Hat nicht geklappt!
            MessageBox(0,"Unable to set time format ","mci-error",0);
            return 0;
        }
    
        // Die Wiedergabe starten:
        wsprintf(cmd,"play audio",filename);
        if (mciSendString(cmd,NULL,NULL,NULL)!=0)
        {
            // Hat nicht geklappt!
            MessageBox(0,"Unable to play","mci-error",0);
            return 0;
        }
    }
    
    String PlayPos(void)
    {
    
        char cmd[500];
        char retval[500];
        DWORD retVal;
        int ms;
        int sek, sek2;
        int min, min2;
        int hours;
        String Text;
    
        // Position in Milisekunden holen:
            wsprintf(cmd,"status audio length");
            retVal=mciSendString(cmd, retval, 500, NULL);
    
        // Ein bisschen rumrechnen:
        ms=atoi(retval);    // Position in Millisekunden
        sek=ms/1000;        // Milisekunden umgerechnet in Sekunden
        min=sek/60;         // Die Sekunden umgerechnet in Minuten
        hours=min/60;       // Die Minuten umgerechnet in Stunden
        sek2=sek-(hours*60)-(min*60);   // Sekunden darf nicht größer als 60 sein..
        Text ="Gesammtlänge: "+IntToStr(hours)+":"+IntToStr(min)+":"+IntToStr(sek2);
        // Position in Milisekunden holen:
            wsprintf(cmd,"status audio position");
            retVal=mciSendString(cmd, retval, 500, NULL);
    
        // Ein bisschen rumrechnen:
        ms=atoi(retval);    // Position in Millisekunden
        sek=ms/1000;        // Milisekunden umgerechnet in Sekunden
        min=sek/60;         // Die Sekunden umgerechnet in Minuten
        hours=min/60;       // Die Minuten umgerechnet in Stunden
        sek2=sek-(hours*60)-(min*60);   // Sekunden darf nicht größer als 60 sein..
        Text= Text+"  Position: "+IntToStr(hours)+":"+IntToStr(min)+":"+IntToStr(sek2);
    
        return Text;
    
    }
    // stoppt die Wiedergabe
    int PlayStop()
    {
        char cmd[500];
        DWORD retVal;
    
        // Wiedergabe stoppen:
            wsprintf(cmd, "stop audio");
            retVal=mciSendString(cmd, NULL, 0, NULL);
            if (retVal!=0)
            {
                // Hat nicht geklappt!
                MessageBox(0,"Unable to stop playback","mci-error",0);
                return 0;
            }
    
        return 1;
    }
    


  • Liegt evtl. daran, dass bei PlayAudio() die Datei geöffnet wird, aber bei PlayStop() das abspielen nur gestoppt wird, aber die Datei nicht geschlossen wird...

    Der Alias 'audio' ist also beim 2. Aufruf von PlayAudio() noch gültig und kann nicht doppelt vergeben werden...

    (Achtung: Der gesamte Post besteht nur aus Annahmen!)



  • das hilft auch nicht viel, habe den PlayStop wie folgt umgeschrieben !

    int PlayStop()
    {
        char cmd[500];
        DWORD retVal;
    
        // Wiedergabe stoppen:
            wsprintf(cmd, "stop audio");
            retVal=mciSendString(cmd, NULL, 0, NULL);
            if (retVal!=0)
            {
                // Hat nicht geklappt!
                MessageBox(0,"Unable to stop playback","mci-error",0);
                return 0;
            }
            wsprintf(cmd, "close audio");
    
        return 1;
    }
    

    weiß da keiner eine Lösung ?



  • ohne mciSendString für "close audio" kann sich wohl nichts ändern 😉



  • und was soll mir das nun sagen ?
    wie kann man das denn nun lösen ?
    bitte bitte helft mir ...



  • Das soll Dir sagen das wsprintf keinen String an mci sendet.

    Was meinst Du, welche Funktion sendet einen String an mci (vielleicht fällt der Groschen ja jetzt)?



  • Evtl. willste beim open-cmd evtl. auch noch "shareable" mit angeben, sonst wird die geöffnete Datei evtl. von Windows gesperrt bis "audio" geschlossen wurde...

    Hmm, das "close audio" fehlt beim "mp3 abspielen" in der FAQ auch noch, könnte evtl. nen moderator mal irgendwann da noch einbauen 😉



  • @geeky: Nur bevor ich was falsches einfüge (in PlayStop vor return 1)

    // Device wieder schließen und die damit verbundenen Ressourcen freigeben
    wsprintf(cmd,"close mp3player");
    if (mciSendString(cmd,NULL,NULL,NULL)!=0)
    {
        // Hat nicht geklappt!
        MessageBox(0,"Unable to close device","mci-error",0);
        return 0;
    }
    

    Könntest du das mal testen? 😋



  • flenders mit deinem Zusatz klappt es 1a 🙂
    jetzt würde nur noch ein Spoolen fählen 😉 in dem FAQ
    Das man so eine Trackleiste nimmt, wo man vorspoolen kann :p
    weiß jemand wie das geht ?



  • jo, klappt. Kann in der faq dazugepackt werden 😉

    "Spulen" geht mit 'seek':
    http://msdn.microsoft.com/library/default.asp?url=/library/en-us/multimed/htm/_win32_seek.asp



  • done 🙂


Anmelden zum Antworten