From d70c5b1f8fc996f6655b1908efa2984d7032fe39 Mon Sep 17 00:00:00 2001 From: Sjoerd van der Berg Date: Mon, 5 Jul 2004 16:00:22 +0000 Subject: [PATCH] Fix wave capturing not keeping track of length of data Imported-from: https://svn.code.sf.net/p/dosbox/code-0/dosbox/trunk@1874 --- src/hardware/mixer.cpp | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/src/hardware/mixer.cpp b/src/hardware/mixer.cpp index d32852df..1031fc18 100644 --- a/src/hardware/mixer.cpp +++ b/src/hardware/mixer.cpp @@ -220,6 +220,7 @@ static void MIXER_MixData(Bitu samples) { } if (mixer.wave.used>(MIXER_WAVESIZE-1024)){ fwrite(mixer.wave.buf,1,mixer.wave.used*MIXER_SSIZE,mixer.wave.handle); + mixer.wave.length+=mixer.wave.used*MIXER_SSIZE; mixer.wave.used=0; } } @@ -267,11 +268,12 @@ static void MIXER_CallBack(void * userdata, Uint8 *stream, int len) { static void MIXER_WaveEvent(void) { /* Check for previously opened wave file */ if (mixer.wave.handle) { - LOG_MSG("Stopped recording"); + LOG_MSG("Stopped capturing wave output."); /* Write last piece of audio in buffer */ fwrite(mixer.wave.buf,1,mixer.wave.used*MIXER_SSIZE,mixer.wave.handle); + mixer.wave.length+=mixer.wave.used*MIXER_SSIZE; /* Fill in the header with useful information */ - host_writed(&wavheader[4],mixer.wave.length+sizeof(wavheader)-8); + host_writed(&wavheader[0x04],mixer.wave.length+sizeof(wavheader)-8); host_writed(&wavheader[0x18],mixer.freq); host_writed(&wavheader[0x1C],mixer.freq*4); host_writed(&wavheader[0x28],mixer.wave.length); @@ -280,13 +282,13 @@ static void MIXER_WaveEvent(void) { fwrite(wavheader,1,sizeof(wavheader),mixer.wave.handle); fclose(mixer.wave.handle); mixer.wave.handle=0; - return; + } else { + mixer.wave.handle=OpenCaptureFile("Wave Output",".wav"); + if (!mixer.wave.handle) return; + mixer.wave.length=0; + mixer.wave.used=0; + fwrite(wavheader,1,sizeof(wavheader),mixer.wave.handle); } - mixer.wave.handle=OpenCaptureFile("Wave Outut",".wav"); - if (!mixer.wave.handle) return; - mixer.wave.length=0; - mixer.wave.used=0; - fwrite(wavheader,1,sizeof(wavheader),mixer.wave.handle); } static void MIXER_Stop(Section* sec) {