AudioRecordQueue behaves incorrectly with no input
h4yn0nnym0u5e opened this issue · 0 comments
Description
As in title, and discussed at https://forum.pjrc.com/threads/68000-AudioRecordQueue-behaves-incorrectly-with-no-input
The Audio library design rules state that a NULL received audio block (from receiveReadOnly()) should be treated as if a silent block had been received. AudioRecordQueue does not do this, but simply fails to count or queue the NULL, even when it has been enabled by queue.begin().
Steps To Reproduce Problem
Create any audio topology which uses AudioRecordQueue, where the input to the queue can be NULL audio blocks: a good candidate is AudioPlaySdWav. Without calling AudioPlaySdWav::begin(), call AudioRecordQueue::begin() and observe that AudioRecordQueue::available() never reports available (silent) data.
Hardware & Software
Teensy 4.1
Audio module
Arduino IDE version 1.8.15
Teensyduino version 1.54
Operating system & version not relevant
Arduino Sketch
#include <Audio.h>
#include <Wire.h>
#include <SPI.h>
#include <SD.h>
#include <SerialFlash.h>
// GUItool: begin automatically generated code
AudioSynthWaveform waveform1; //xy=374,336
AudioOutputI2S i2s; //xy=566,356
AudioRecordQueue queue1; //xy=567,313
AudioConnection patchCord1(waveform1, 0, i2s, 0);
AudioConnection patchCord2(waveform1, queue1);
AudioControlSGTL5000 sgtl5000_1; //xy=558,398
// GUItool: end automatically generated code
void setup() {
Serial.begin(115200);
while (!Serial)
;
AudioMemory(10);
}
void loop() {
int n = 5;
queue1.begin(); // start monitoring
delay(10); // should get a few silent blocks
waveform1.begin(0.5f,261.0f,WAVEFORM_SINE);
while (n>0)
{
if (queue1.available())
{
int16_t* qd = queue1.readBuffer();
for (int i=0;i<128;i++)
Serial.println(qd[i]);
queue1.freeBuffer();
n--;
}
}
while (1)
;
}
Errors or Incorrect Output
should look like