Skip to content

Commit 55de438

Browse files
committed
Memory error when using Filter
1 parent afe0e2e commit 55de438

File tree

7 files changed

+35
-11
lines changed

7 files changed

+35
-11
lines changed

examples/.DS_Store

2 KB
Binary file not shown.

src/AudioTools/AudioOutput.h

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,9 @@ namespace audio_tools {
1818
*/
1919
class AudioPrint : public Print {
2020
public:
21-
virtual size_t write(const uint8_t *buffer, size_t size) = 0;
21+
virtual size_t write(const uint8_t *buffer, size_t size) override = 0;
2222

23-
virtual size_t write(uint8_t ch) {
23+
virtual size_t write(uint8_t ch) override {
2424
tmp[tmpPos++] = ch;
2525
if (tmpPos>MAX_SINGLE_CHARS){
2626
flush();
@@ -222,6 +222,7 @@ class EncodedAudioStream : public AudioPrint, public AudioBaseInfoSource {
222222
*/
223223
EncodedAudioStream(Print &outputStream, AudioDecoder &decoder) {
224224
LOGD(LOG_METHOD);
225+
ptr_out = &outputStream;
225226
decoder_ptr = &decoder;
226227
decoder_ptr->setOutputStream(outputStream);
227228
writer_ptr = decoder_ptr;
@@ -237,6 +238,7 @@ class EncodedAudioStream : public AudioPrint, public AudioBaseInfoSource {
237238
*/
238239
EncodedAudioStream(Print *outputStream, AudioDecoder *decoder) {
239240
LOGD(LOG_METHOD);
241+
ptr_out = outputStream;
240242
decoder_ptr = decoder;
241243
decoder_ptr->setOutputStream(*outputStream);
242244
writer_ptr = decoder_ptr;
@@ -251,6 +253,7 @@ class EncodedAudioStream : public AudioPrint, public AudioBaseInfoSource {
251253
*/
252254
EncodedAudioStream(Print &outputStream, AudioEncoder &encoder) {
253255
LOGD(LOG_METHOD);
256+
ptr_out = &outputStream;
254257
encoder_ptr = &encoder;
255258
encoder_ptr->setOutputStream(outputStream);
256259
writer_ptr = encoder_ptr;
@@ -265,6 +268,7 @@ class EncodedAudioStream : public AudioPrint, public AudioBaseInfoSource {
265268
*/
266269
EncodedAudioStream(Print *outputStream, AudioEncoder *encoder) {
267270
LOGD(LOG_METHOD);
271+
ptr_out = outputStream;
268272
encoder_ptr = encoder;
269273
encoder_ptr->setOutputStream(*outputStream);
270274
writer_ptr = encoder_ptr;
@@ -276,7 +280,7 @@ class EncodedAudioStream : public AudioPrint, public AudioBaseInfoSource {
276280
*
277281
*/
278282
EncodedAudioStream(){
279-
LOGD(LOG_METHOD);
283+
LOGD(LOG_METHOD);
280284
active = false;
281285
}
282286

@@ -291,15 +295,16 @@ class EncodedAudioStream : public AudioPrint, public AudioBaseInfoSource {
291295
}
292296

293297
/// Define object which need to be notified if the basinfo is changing
294-
void setNotifyAudioChange(AudioBaseInfoDependent &bi) {
298+
void setNotifyAudioChange(AudioBaseInfoDependent &bi) override {
295299
LOGD(LOG_METHOD);
296300
decoder_ptr->setNotifyAudioChange(bi);
297301
}
298302

299303

300304
/// Starts the processing - sets the status to active
301305
void begin(Print *outputStream, AudioEncoder *encoder) {
302-
LOGD(LOG_METHOD);
306+
LOGD(LOG_METHOD);
307+
ptr_out = outputStream;
303308
encoder_ptr = encoder;
304309
encoder_ptr->setOutputStream(*outputStream);
305310
writer_ptr = encoder_ptr;
@@ -309,6 +314,7 @@ class EncodedAudioStream : public AudioPrint, public AudioBaseInfoSource {
309314
/// Starts the processing - sets the status to active
310315
void begin(Print *outputStream, AudioDecoder *decoder) {
311316
LOGD(LOG_METHOD);
317+
ptr_out = outputStream;
312318
decoder_ptr = decoder;
313319
decoder_ptr->setOutputStream(*outputStream);
314320
writer_ptr = decoder_ptr;
@@ -350,7 +356,7 @@ class EncodedAudioStream : public AudioPrint, public AudioBaseInfoSource {
350356
}
351357

352358
/// encode the data
353-
virtual size_t write(const uint8_t *data, size_t len){
359+
virtual size_t write(const uint8_t *data, size_t len) override {
354360
LOGD("%s: %zu", LOG_METHOD, len);
355361
if(len==0) {
356362
return 0;
@@ -366,6 +372,10 @@ class EncodedAudioStream : public AudioPrint, public AudioBaseInfoSource {
366372
CHECK_MEMORY();
367373
return result;
368374
}
375+
376+
int availableForWrite() override {
377+
return ptr_out->availableForWrite();
378+
}
369379

370380

371381
/// Returns true if status is active and we still have data to be processed
@@ -388,8 +398,8 @@ class EncodedAudioStream : public AudioPrint, public AudioBaseInfoSource {
388398
AudioDecoder *decoder_ptr = CodecNOP::instance(); // decoder
389399
AudioEncoder *encoder_ptr = CodecNOP::instance(); // decoder
390400
AudioWriter *writer_ptr = nullptr ;
401+
Print *ptr_out=nullptr;
391402

392-
Stream *input_ptr; // data source for encoded data
393403
uint8_t *write_buffer = nullptr;
394404
int write_buffer_pos = 0;
395405
const int write_buffer_size = 256;

src/AudioTools/AudioStreams.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -605,7 +605,7 @@ class FilteredStream : public AudioStreamX {
605605
}
606606

607607
size_t readBytes(uint8_t *data, size_t length) override {
608-
size_t result; p_stream->readBytes(data, length);
608+
size_t result = p_stream->readBytes(data, length);
609609
p_converter->convert(data, result);
610610
return result;
611611
}

src/AudioTools/AudioTypes.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ class AudioBaseInfoDependent {
5858
*/
5959
class AudioBaseInfoSource {
6060
public:
61-
virtual void setNotifyAudioChange(AudioBaseInfoDependent &bi) = 0;
61+
virtual void setNotifyAudioChange(AudioBaseInfoDependent &bi) = 0;
6262
};
6363

6464

src/AudioTools/noise.wav

Whitespace-only changes.

tests/filter-wav/filter-wav.cpp

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,21 @@
55
#include "SdFat.h"
66

77
// define FIR filter
8-
float coef[] = { 0.021, 0.096, 0.146, 0.096, 0.021};
8+
float coef[] = {
9+
-0.018296746249137946,
10+
-0.056723974384224739,
11+
0.018540799820324621,
12+
0.097644454515593698,
13+
-0.018688161556077588,
14+
-0.297627121039396536,
15+
0.550301497785836702,
16+
-0.297627121039396536,
17+
-0.018688161556077588,
18+
0.097644454515593698,
19+
0.018540799820324621,
20+
-0.056723974384224739,
21+
-0.018296746249137946
22+
};
923
//
1024
uint16_t sample_rate=44100;
1125
uint8_t channels = 2; // The stream will have 2 channels
@@ -15,7 +29,7 @@ FilteredStream<int16_t, float> in_filtered(in_stream, channels); // Defiles the
1529
SdFat sd;
1630
SdFile file;
1731
EncodedAudioStream out(&file, new WAVEncoder()); // encode as wav file
18-
StreamCopy copier(out, in_stream); // copies sound to out
32+
StreamCopy copier(out, in_filtered); // copies sound to out
1933

2034
void setup(){
2135
Serial.begin(115200);

tests/filter-wav/noise.wav

Whitespace-only changes.

0 commit comments

Comments
 (0)