Ik heb een programma dat over twee streams mono ADPCM data ontvangt, die mengt tot een stereo ADPCM signaal, en die via waveOut afspeelt (zodat de twee mono streams over twee afzonderlijke luidsprekers te horen zijn). Het werkt, en da's mooi. Maar wat niet zo mooi is, is dat hij zichzelf af en toe ophangt.
Ik ben er al achter dat het in de callback zit: die doet een call naar waveOutUnprepareHeader (helemaal volgens het boekje), maar waveOutUnprepareHeader komt vervolgens niet meer terug. Het lullige is dat hij vast zit in een windows dll (NTDLL om precies te zijn), dus ik kan niet zien wat er mis gaat. De call stack is als volgt:
De wave header (op adres 0x00a5f4d0) die ik wil unpreparen is correct, dus daar ligt het niet aan. Ik heb geen idee wat er mis is, misschien heeft iemand een hint?
Vervolgens: ik heb het ook geprobeerd door waveOutUnprepareHeader gewoon over te slaan, en meteen een "delete[]" te doen op het audio data block en een "delete" op de wave header. Dat lijkt geen problemen op te leveren (misschien op de lange duur?) vandaar mijn vraag: wat doet waveOutUnprepareHeader nou precies? Verder dan "de rommel opruimen" kom ik niet met de informatie die ik op het web vind. Kan iemand dit nader preciseren?
P.S. Oeps, ik zie dat de titel van dit topic nog niet volledig is. Geen idee hoe ik dat alsnog kan aanpassen. Misscien dat een mod er nog iets van kan maken? ("waveOutUnprepareHeader problemen" of zo iets...).
Ik ben er al achter dat het in de callback zit: die doet een call naar waveOutUnprepareHeader (helemaal volgens het boekje), maar waveOutUnprepareHeader komt vervolgens niet meer terug. Het lullige is dat hij vast zit in een windows dll (NTDLL om precies te zijn), dus ik kan niet zien wat er mis gaat. De call stack is als volgt:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
| NTDLL! 7c90eb94() NTDLL! 7c90104b() WINMM! 76b45831() VoiceMixer::dataDone(wavehdr_tag * 0x00a5f4d0) line 1382 + 19 bytes VoicePlayer::dataDone(wavehdr_tag * 0x00a5f4d0, unsigned int 0x00000000) line 409 VoiceMixer::waveCallBack(HWAVEOUT__ * 0x0015efc8, unsigned int 0x000003bd, unsigned long 0x00000000, unsigned long 0x00a5f4d0, unsigned long 0x00000000) line 1441 WINMM! 76b454f3() MSACM32! 72d114e4() WINMM! 76b454f3() WDMAUD! 72d21da2() WDMAUD! 72d2230c() WDMAUD! 72d24617() KERNEL32! 7c80b50b() |
De wave header (op adres 0x00a5f4d0) die ik wil unpreparen is correct, dus daar ligt het niet aan. Ik heb geen idee wat er mis is, misschien heeft iemand een hint?
Vervolgens: ik heb het ook geprobeerd door waveOutUnprepareHeader gewoon over te slaan, en meteen een "delete[]" te doen op het audio data block en een "delete" op de wave header. Dat lijkt geen problemen op te leveren (misschien op de lange duur?) vandaar mijn vraag: wat doet waveOutUnprepareHeader nou precies? Verder dan "de rommel opruimen" kom ik niet met de informatie die ik op het web vind. Kan iemand dit nader preciseren?
P.S. Oeps, ik zie dat de titel van dit topic nog niet volledig is. Geen idee hoe ik dat alsnog kan aanpassen. Misscien dat een mod er nog iets van kan maken? ("waveOutUnprepareHeader problemen" of zo iets...).
[ Voor 5% gewijzigd door Verwijderd op 05-09-2006 10:08 . Reden: onvolledige titel ]