@@ -39,16 +39,14 @@ AudioGeneratorWAV::AudioGeneratorWAV()
3939
4040AudioGeneratorWAV::~AudioGeneratorWAV ()
4141{
42- free (buff);
43- buff = NULL ;
42+ freeBuf ();
4443}
4544
4645bool AudioGeneratorWAV::stop ()
4746{
4847 if (!running) return true ;
4948 running = false ;
50- free (buff);
51- buff = NULL ;
49+ freeBuf ();
5250 output->stop ();
5351 return file->close ();
5452}
@@ -58,6 +56,12 @@ bool AudioGeneratorWAV::isRunning()
5856 return running;
5957}
6058
59+ bool AudioGeneratorWAV::freeBuf ()
60+ {
61+ if (buff) free (buff);
62+ buff = NULL ;
63+ return false ;
64+ }
6165
6266// Handle buffered reading, reload each time we run out of data
6367bool AudioGeneratorWAV::GetBufferedData16x2 (int16_t & destL, int16_t & destR)
@@ -154,12 +158,12 @@ bool AudioGeneratorWAV::loop()
154158 uint8_t l, r = 0 ;
155159 do
156160 {
157- if (!GetBufferedData8 (l)) stop ();
158- if (channels == 2 ) {
159- if (!GetBufferedData8 (r)) stop ();
161+ if (!GetBufferedData8 (l)) stop ();
162+ sL = ((int16_t )l - 128 ) << 8 ;
163+ if (channels == 2 ) {
164+ if (!GetBufferedData8 (r)) stop ();
165+ sR = ((int16_t )r - 128 ) << 8 ;
160166 }
161- sL = l;
162- sR = r;
163167 } while (running && output->ConsumeSample (sL , sR ));
164168 }
165169
@@ -356,19 +360,20 @@ bool AudioGeneratorWAV::begin(AudioFileSource *source, AudioOutput *output)
356360
357361 if (!output->SetRate ( sampleRate )) {
358362 DBG (PSTR (" AudioGeneratorWAV::begin: failed to SetRate in output\n " ));
359- return false ;
363+ return freeBuf () ;
360364 }
361- if (!output->SetBitsPerSample ( bitsPerSample )) {
365+ // Output is always 16bit
366+ if (!output->SetBitsPerSample (16 )) {
362367 DBG (PSTR (" AudioGeneratorWAV::begin: failed to SetBitsPerSample in output\n " ));
363- return false ;
368+ return freeBuf () ;
364369 }
365370 if (!output->SetChannels ( channels )) {
366371 DBG (PSTR (" AudioGeneratorWAV::begin: failed to SetChannels in output\n " ));
367- return false ;
372+ return freeBuf () ;
368373 }
369374 if (!output->begin ()) {
370375 DBG (PSTR (" AudioGeneratorWAV::begin: output's begin did not return true\n " ));
371- return false ;
376+ return freeBuf () ;
372377 }
373378
374379 running = true ;
0 commit comments