tutorials.de Buch-Aktion 05/2012
ERLEDIGT
JA
ANTWORTEN
1
ZUGRIFFE
1013
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Cappaja Cappaja ist offline Mitglied Silber
    Registriert seit
    May 2009
    Ort
    Konstanz
    Beiträge
    85
    hallo,

    dies ist ein etwas komplexeres problem wobei ich mir noch nicht einmal 100% sicher bin ob es daran überhaupt liegen könnte.

    ich nutze die message MM_WOM_DONE aus der mmsystem.h. sie wird aufgerufen wenn eine audiodatei erfolgreich abgespielt wurde. jetzt habe ich bei mir eine checkbox für ein replay (endlosschleife) der audiodatei. der datenpuffer liegt in einem WAVEHDR struct bereit (lpData) und wird beim ersten start ausgeführt (funktioniert). danach sollte der zeiger auf den anfang des buffers zeigen und die daten erneut abspielen. genau da ist mein problem. irgendwie verarbeitet das MSG struct meinen zeiger auf die daten nicht richtig, ich bekomme eine vollkommen andere adresse welche nicht zum vorherigen buffer passt. ich vermute das die message nicht richtig verarbeitet wird. ich habe unter MESSAGE.message den wert 0 stehen. eigentlich sollte da doch die nachrichten nummer darin stehen. im rotmarkierten bereich wird meinem LPWAVEHDR struct die falsche adresse übergeben weswegen mir das programm aussteigt.

    hat schon einmal jemand etwas mit dieser nachricht zu tun gehabt sodass er mir weiterhelfen kann? ist sie in der message map richtig eingebunden?

    die anderen funktionen habe ich oft genug durch debugged, da kann der fehler definitiv nicht liegen. ich vermute eine falsche nachrichtenverarbeitung...

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    
    void CWiwoDlg::MMWOMDone(MSG &Message)
    {
        // current data buffer block that has
        // completed playback, reload and requeue
        char       mesg[MSG_LEN_S];
        LPWAVEHDR  lpwho;
        MMRESULT   rc;
        MMTIME     mmtime;
        static int deltat;
     
        if(!(oup_ing || io_ing))        // no output process started
            return;                     // skip this WOM_DONE message
     
        [COLOR="Red"]lpwho = (LPWAVEHDR)Message.lParam;[/COLOR]
        
        if(lpwho == NULL)
            return;
        /*-------------------------------------------*/
        mmtime.wType = TIME_SAMPLES;
        waveOutGetPosition(hwo, &mmtime, sizeof(MMTIME));
        deltat = mmtime.u.sample;
     
        if(iOuCnt >= GlPar.nMBuffers)
        {
            if(OutRep)
                iOuCnt = 0;
            else
            {
                SendMessage(CM_OUPCOMPLETE, (WPARAM)0, (LPARAM)0);
                return;
            }
        }
        if(oup_ing)
        {
            OutputDataProc(lpwho);
            iOuCnt++;
        }
        /*-------------------------------------------*/
        if(io_ing)
            IOOutDataProc(lpwho);    // EN8 #####
     
        rc = waveOutPrepareHeader(hwo, lpwho, sizeof(WAVEHDR));
     
        if(rc == MMSYSERR_NOERROR)
            rc = waveOutWrite(hwo, lpwho, sizeof(WAVEHDR));
        else
        {
            waveOutGetErrorText(rc, mesg, MSG_LEN_S);
            MessageBox("WMM Done", mesg, MB_OK);
            CloseWaveOutput(GetSafeHwnd());
        }
     
        /* used only to check processing time in output phase*/
        mmtime.wType = TIME_SAMPLES;
        waveOutGetPosition(hwo, &mmtime, sizeof(MMTIME));
    }

    in der message map habe ich die nachricht wie folgt integriert:
    Code :
    1
    
    ON_MESSAGE(MM_WOM_DONE, MMWOMDone)
     

  2. #2
    Cappaja Cappaja ist offline Mitglied Silber
    Registriert seit
    May 2009
    Ort
    Konstanz
    Beiträge
    85
    habs gelöst...

    seltsamerweise erhalte ich beim zugriff über das MSG STRUCT nur in wParam einen Wert, jedoch verschieden vom Buffer. ich habe die signatur der methode jetzt wie folgt geändert:
    Code :
    1
    
    LRESULT MMWOMDone(WPARAM wParam, LPARAM lParam);

    plötzlich erhalte ich in beiden Parametern Werte wobei in lParam die richtige Adresse vom Bufferende übergeben wird. die registrierung in der message map bleibt dabei unberührt.

    mfg cappaja
     

Ähnliche Themen

  1. Nutzen von Klassen und Funktionen
    Von exitboy im Forum PHP
    Antworten: 14
    Letzter Beitrag: 04.06.08, 14:01
  2. vordefinierte Parameter in Funktionen nutzen?
    Von mahon im Forum Visual Basic 6.0
    Antworten: 2
    Letzter Beitrag: 10.09.07, 23:15
  3. Windows Funktionen nutzen
    Von TobGod im Forum Swing, Java2D/3D, SWT, JFace
    Antworten: 2
    Letzter Beitrag: 22.01.07, 09:35
  4. Klasse in Funktionen nutzen?
    Von danielmueller im Forum PHP
    Antworten: 6
    Letzter Beitrag: 08.09.04, 11:14
  5. Funktionen aus DLLs nutzen
    Von Rene Albrecht im Forum C/C++
    Antworten: 9
    Letzter Beitrag: 24.10.03, 21:28