6# define PRINT_FLUSH_OVERRIDE override
8# define PRINT_FLUSH_OVERRIDE
129 LOGI(
"-> ResampleStream:")
145 LOGI(
"setStepSize: %f", step);
154 return sampleRateFrom / sampleRateTo;
162 size_t write(
const uint8_t *data,
size_t len)
override {
163 LOGD(
"ResampleStream::write: %d", (
int)len);
168 return write<int16_t>(
p_print, data, len, written);
170 return write<int24_t>(
p_print, data, len, written);
172 return write<int32_t>(
p_print, data, len, written);
214 int last_samples_size = cfg.
channels * bytes_per_sample;
220 template <
typename T>
230 LOGE(
"channels is 0");
233 T *data = (T *)buffer;
234 int samples = bytes /
sizeof(T);
241 setupLastSamples<T>(data, 0);
245 size_t frame_size =
sizeof(frame);
248 while (
idx < frames - 1) {
250 T result = getValue<T>(data,
idx, ch);
263 written += tmp_written;
264 if (frame_size != tmp_written) {
268 int tmp =
p_out->
write((
const uint8_t *)&frame, frame_size);
270 if (tmp != frame_size) {
271 LOGE(
"Failed to write %d bytes: %d", (
int)frame_size, tmp);
281 setupLastSamples<T>(data, frames - 1);
285 LOGD(
"write: %d vs %d", (
int)bytes, (
int)written);
293 template <
typename T>
294 T
getValue(T *data,
float frame_idx,
int channel) {
296 int frame_idx0 = frame_idx;
298 if (frame_idx0 == 0 && frame_idx < 0) frame_idx0 = -1;
299 int frame_idx1 = frame_idx0 + 1;
300 T val0 = lookup<T>(data, frame_idx0, channel);
301 T val1 = lookup<T>(data, frame_idx1, channel);
303 float result = mapT<float>(frame_idx, frame_idx0, frame_idx1, val0, val1);
304 LOGD(
"getValue idx: %d:%d / val: %d:%d / %f -> %f", frame_idx0, frame_idx1,
305 (
int)val0, (
int)val1, frame_idx, result)
306 return (
float)round(result);
310 template <
typename T>
311 T
lookup(T *data,
int frame,
int channel) {
317 return pt_last_samples[channel];
321 template <
typename T>
325 pt_last_samples[ch] = data[(frame *
info.
channels) + ch];
326 LOGD(
"setupLastSamples ch:%d - %d", ch, (
int)pt_last_samples[ch])
#define TRACED()
Definition AudioLoggerIDF.h:31
#define LOGI(...)
Definition AudioLoggerIDF.h:28
#define TRACEE()
Definition AudioLoggerIDF.h:34
#define LOGD(...)
Definition AudioLoggerIDF.h:27
#define LOGE(...)
Definition AudioLoggerIDF.h:30
#define PRINT_FLUSH_OVERRIDE
Definition AudioOutput.h:15
#define DEFAULT_BUFFER_SIZE
Definition avr.h:20
virtual size_t write(const uint8_t *data, size_t len)
Definition Arduino.h:120
virtual void flush()
Definition Arduino.h:130
uint32_t sample_rate_t
Type alias for sample rate values.
Definition AudioTypes.h:19