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...
in der message map habe ich die nachricht wie folgt integriert:
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:
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
lpwho = (LPWAVEHDR)Message.lParam;
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:
ON_MESSAGE(MM_WOM_DONE, MMWOMDone)