12# define USE_VARIANTS (__cplusplus >= 201703L)
44 LOGI(
"addEffect -> Number of effects: %d", (
int)
size());
61 for (
int j=0;j<
size();j++){
94template <
class GeneratorT>
105 for (
int j=0;j<copy.
size();j++){
108 LOGI(
"Number of effects %d -> %d", copy.
size(), this->size());
119 setInput(* (
new GeneratorT(input, channels, volume)));
155 LOGI(
"addEffect -> Number of effects: %d",
size());
164 for (
int j=0; j<
size; j++){
165 sample =
effects[j]->process(sample);
297 T* samples = (T*) data;
299 for (
int f=0;f<frames;f++){
303 for (
int j=0; j<chain.
size(); j++){
304 sample = chain[j]->process(sample);
315 size_t write(
const uint8_t *data,
size_t len)
override {
320 size_t result_size = 0;
323 for (
int f=0;f<frames;f++){
324 const T* p_buffer = ((
const T*)data) + (f*
info.
channels);
326 T sample = p_buffer[ch];
328 for (
int j=0; j<chain.
size(); j++){
329 sample = chain[j]->process(sample);
333 p_io->
write((uint8_t*)&sample,
sizeof(T));
337 result_size +=
sizeof(T);
344 if (
p_io==
nullptr)
return 0;
363 LOGI(
"addEffect -> Number of effects: %d", (
int)
size());
384 LOGE(
"Invalid channel %d or begin() not yet called", channel);
457#if USE_VARIANTS || defined(DOXYGEN)
511 std::visit( [
this](
auto&& e) {
return e.setOutput(*
p_print);},
variant );
513 if (
p_io !=
nullptr) {
514 std::visit( [
this](
auto&& e) {
return e.setStream(*
p_io);},
variant );
516 return std::visit( [
this](
auto&& e) {
return e.begin(
info);},
variant );
520 std::visit( [](
auto&& e) {e.end();},
variant );
544 return std::visit( [data, len](
auto&& e) {
return e.readBytes(data, len);},
variant );
551 size_t write(
const uint8_t *data,
size_t len)
override {
552 return std::visit( [data, len](
auto&& e) {
return e.write(data, len);},
variant );
556 return std::visit( [](
auto&& e) {
return e.available();},
variant );
560 return std::visit( [](
auto&& e) {
return e.availableForWrite();},
variant );
570 std::visit( [effect](
auto&& e) {e.addEffect(effect);},
variant );
580 std::visit( [channel, effect](
auto&& e) {e.addEffect(channel, effect);},
variant );
585 std::visit( [](
auto&& e) {e.clear();},
variant );
590 return std::visit( [](
auto&& e) {
return e.size();},
variant );
595 return std::visit( [idx](
auto&& e) {
return e[idx];},
variant );
600 return std::visit( [
id](
auto&& e) {
return e.findEffect(
id);},
variant );
610 return std::visit( [](
auto&& e) {
return e.channelCount();},
variant );
#define TRACEI()
Definition AudioLoggerIDF.h:32
#define TRACED()
Definition AudioLoggerIDF.h:31
#define LOGI(...)
Definition AudioLoggerIDF.h:28
#define LOGE(...)
Definition AudioLoggerIDF.h:30
#define assert(T)
Definition avr.h:10
virtual int availableForWrite()
Definition Arduino.h:128
virtual size_t write(const uint8_t *data, size_t len)
Definition Arduino.h:120
virtual size_t readBytes(uint8_t *data, size_t len)
Definition Arduino.h:140
virtual int available()
Definition Arduino.h:139