13#include "platforms/audio.h"
15#ifndef FASTLED_HAS_AUDIO_INPUT
16#error "platforms/audio.h must define FASTLED_HAS_AUDIO_INPUT"
20#define I2S_AUDIO_BUFFER_LEN 512
21#define AUDIO_DEFAULT_SAMPLE_RATE 44100ul
22#define AUDIO_DEFAULT_BIT_RESOLUTION 16
23#define AUDIO_DMA_BUFFER_COUNT 8
44struct AudioConfigI2S {
49 AudioChannel mAudioChannel;
52 I2SCommFormat mCommFormat;
59 AudioChannel mic_channel,
62 I2SCommFormat comm_format = Philips,
65 : mPinWs(pin_ws), mPinSd(pin_sd), mPinClk(pin_clk),
66 mI2sNum(i2s_num), mAudioChannel(mic_channel),
67 mSampleRate(sample_rate), mBitResolution(bit_resolution), mCommFormat(comm_format), mInvert(invert) {}
70struct AudioConfigPdm {
77 AudioConfigPdm(
int pin_din,
int pin_clk,
int i2s_num, u16 sample_rate = AUDIO_DEFAULT_SAMPLE_RATE,
bool invert =
false)
78 : mPinDin(pin_din), mPinClk(pin_clk), mI2sNum(i2s_num), mSampleRate(sample_rate), mInvert(invert) {}
82class AudioConfig :
public fl::Variant<AudioConfigI2S, AudioConfigPdm> {
85 static AudioConfig CreateInmp441(
int pin_ws,
int pin_sd,
int pin_clk, AudioChannel channel, u16 sample_rate = 44100ul,
int i2s_num = 0) {
86 AudioConfigI2S
config(pin_ws, pin_sd, pin_clk, i2s_num, channel, sample_rate, 16);
87 return AudioConfig(
config);
89 AudioConfig(
const AudioConfigI2S&
config) : fl::Variant<AudioConfigI2S, AudioConfigPdm>(
config) {}
90 AudioConfig(
const AudioConfigPdm&
config) : fl::Variant<AudioConfigI2S, AudioConfigPdm>(
config) {}
106 static fl::shared_ptr<IAudioInput> create(
const AudioConfig&
config, fl::string* error_message =
nullptr);
109 virtual ~IAudioInput() =
default;
111 virtual void start() = 0;
113 virtual void stop() = 0;
115 virtual bool error(fl::string* msg =
nullptr) = 0;
118 virtual AudioSample
read() = 0;
125 AudioSample sample =
read();
126 if (sample.isValid()) {
void push_back(const T &value)
FL_LINK_WEAK fl::shared_ptr< IAudioInput > platform_create_audio_input(const AudioConfig &config, fl::string *error_message)
InlinedVector< T, INLINED_SIZE > vector_inlined