Skip to content

Commit 6a2a795

Browse files
Audio patches for 3.20
1 parent a96debd commit 6a2a795

File tree

2 files changed

+21
-14
lines changed

2 files changed

+21
-14
lines changed

timecircuits-A10001986/src/ESP8266Audio/AudioGeneratorWAV.cpp

Lines changed: 19 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -39,16 +39,14 @@ AudioGeneratorWAV::AudioGeneratorWAV()
3939

4040
AudioGeneratorWAV::~AudioGeneratorWAV()
4141
{
42-
free(buff);
43-
buff = NULL;
42+
freeBuf();
4443
}
4544

4645
bool 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
6367
bool 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;

timecircuits-A10001986/src/ESP8266Audio/AudioGeneratorWAV.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,8 @@ class AudioGeneratorWAV : public AudioGenerator
4848

4949

5050
protected:
51+
bool freeBuf();
52+
5153
// WAV info
5254
uint16_t channels;
5355
uint32_t sampleRate;

0 commit comments

Comments
 (0)