MiniAudioBlocking output

This commit is contained in:
pschatzmann 2024-06-24 16:57:34 +02:00
parent 80e348cb87
commit 88586f643d
2 changed files with 8 additions and 4 deletions

View File

@ -8,6 +8,7 @@
#include <mutex>
#include <thread>
#include "AudioTools.h"
#include <unistd.h>
#define MINIAUDIO_IMPLEMENTATION
#include "miniaudio.h"
@ -16,6 +17,7 @@
#define MA_START_COUNT MA_BUFFER_COUNT-2
namespace audio_tools {
/**
* @brief Configuration for MiniAudio
* @author Phil Schatzmann
@ -148,18 +150,19 @@ class MiniAudioStream : public AudioStream {
buffer_out.resize(0,0);
}
int availableForWrite() override { return buffer_out.size()==0 ? 0 : buffer_out.availableForWrite(); }
int availableForWrite() override { return buffer_out.size()==0 ? 0 : DEFAULT_BUFFER_SIZE; }
size_t write(const uint8_t *data, size_t len) override {
if (buffer_out.size()==0) return 0;
LOGD("write: %zu", len);
// blocking write
while(buffer_out.availableForWrite()<len){
delay(10);
while(buffer_out.bufferCountEmpty() == 0 && buffer_out.availableForWrite() < len){
delay(10);
}
size_t result = buffer_out.writeArray(data, len);
if (!is_playing && buffer_out.bufferCountFilled()>=MA_START_COUNT) {
LOGI("starting audio");
is_playing = true;
}
return result;
@ -192,6 +195,7 @@ class MiniAudioStream : public AudioStream {
void setupBuffers(int size) {
if (is_buffers_setup) return;
LOGI("setupBuffers: %d * %d", size, MA_BUFFER_COUNT);
if (buffer_out.size()==0 && config.is_output)
buffer_out.resize(size, MA_BUFFER_COUNT);
if (buffer_in.size()==0 && config.is_input)

View File

@ -10,7 +10,7 @@ GeneratedSoundStream<int16_t> in_stream(sine_wave); // Stream generated from sin
StreamCopy copier(out, in_stream); // copies sound to out
void setup(){
AudioLogger::instance().begin(Serial, AudioLogger::Warning);
AudioLogger::instance().begin(Serial, AudioLogger::Info);
auto cfg = out.defaultConfig(TX_MODE);
//cfg.sample_rate = 22000;