10#include "platforms/audio.h"
12#ifndef FASTLED_HAS_AUDIO_INPUT
13#error "platforms/audio.h must define FASTLED_HAS_AUDIO_INPUT"
16#define I2S_AUDIO_BUFFER_LEN 512
17#define AUDIO_DEFAULT_SAMPLE_RATE 44100ul
18#define AUDIO_DEFAULT_BIT_RESOLUTION 16
19#define AUDIO_DMA_BUFFER_COUNT 8
56 ConfigI2S(
int pin_ws,
int pin_sd,
int pin_clk,
int i2s_num,
106#if defined(FL_IS_TEENSY_3X) || defined(FL_IS_TEENSY_35) || \
107 defined(FL_IS_TEENSY_36)
110#elif defined(FL_IS_TEENSY_4X)
121#if defined(FL_IS_TEENSY_3X) || defined(FL_IS_TEENSY_35) || \
122 defined(FL_IS_TEENSY_36)
125#elif defined(FL_IS_TEENSY_4X)
136#if defined(FL_IS_TEENSY_3X) || defined(FL_IS_TEENSY_35) || \
137 defined(FL_IS_TEENSY_36)
140#elif defined(FL_IS_TEENSY_4X)
150class Config :
public fl::variant<ConfigI2S, ConfigPdm> {
156 ConfigI2S config(pin_ws, pin_sd, pin_clk, i2s_num, channel, sample_rate,
166 u16 sample_rate = 44100ul,
168 ConfigI2S config(pin_ws, pin_sd, pin_clk, i2s_num, channel, sample_rate,
178 u16 sample_rate = 44100ul,
180 ConfigI2S config(pin_ws, pin_sd, pin_clk, i2s_num, channel, sample_rate,
201 static_cast<int>(port),
202 channel, sample_rate, bit_resolution,
225 int i2s_num = 0,
bool invert =
false,
228 ConfigPdm(pin_din, pin_clk, i2s_num, sample_rate, invert));
234 : fl::variant<ConfigI2S, ConfigPdm>(config) {}
236 : fl::variant<ConfigI2S, ConfigPdm>(config) {}
fl::UIAudio audio("Audio Input")
float getGain() const FL_NOEXCEPT
static Config CreateTeensyI2S(TeensyI2S::I2SPort port=TeensyI2S::I2SPort::I2S1, AudioChannel channel=AudioChannel::Right, u16 sample_rate=AUDIO_DEFAULT_SAMPLE_RATE, u8 bit_resolution=AUDIO_DEFAULT_BIT_RESOLUTION, MicProfile profile=MicProfile::GenericMEMS) FL_NOEXCEPT
Config(const ConfigPdm &config) FL_NOEXCEPT
static Config CreateGenericMEMS(int pin_ws, int pin_sd, int pin_clk, AudioChannel channel, u16 sample_rate=44100ul, int i2s_num=0) FL_NOEXCEPT
static Config CreateSpm1423Pdm(int pin_din, int pin_clk, u16 sample_rate=AUDIO_DEFAULT_SAMPLE_RATE, int i2s_num=0, bool invert=false) FL_NOEXCEPT
void setMicProfile(MicProfile profile) FL_NOEXCEPT
Microphone pink noise correction profile.
void setGain(float gain) FL_NOEXCEPT
Digital gain applied to all input samples. Default 1.0 (no change).
MicProfile getMicProfile() const FL_NOEXCEPT
static Config CreateInmp441(int pin_ws, int pin_sd, int pin_clk, AudioChannel channel, u16 sample_rate=44100ul, int i2s_num=0) FL_NOEXCEPT
static Config CreateIcs43434(int pin_ws, int pin_sd, int pin_clk, AudioChannel channel, u16 sample_rate=44100ul, int i2s_num=0) FL_NOEXCEPT
Config(const ConfigI2S &config) FL_NOEXCEPT
static Config CreatePdm(int pin_din, int pin_clk, u16 sample_rate=AUDIO_DEFAULT_SAMPLE_RATE, int i2s_num=0, bool invert=false, MicProfile profile=MicProfile::None) FL_NOEXCEPT
constexpr int getPinSD(I2SPort port) FL_NOEXCEPT
constexpr int getPinWS(I2SPort port) FL_NOEXCEPT
constexpr int getPinCLK(I2SPort port) FL_NOEXCEPT
FL_LINK_WEAK fl::shared_ptr< IInput > platform_create_audio_input(const Config &config, fl::string *error_message)
MicProfile
Microphone frequency response correction profile.
@ GenericMEMS
Generic MEMS microphone (moderate bass rolloff)
@ None
No correction (flat response assumed)
@ INMP441
InvenSense INMP441 MEMS mic (most common)
@ ICS43434
InvenSense ICS-43434 MEMS mic.
@ SPM1423
Knowles SPM1423 MEMS mic.
CRGB sample(const CRGB *grid, const XYMap &xyMap, float x, float y, SampleMode mode)
Sample a pixel from a 2D CRGB grid at floating-point coordinates.
VectorN< T, INLINED_SIZE > vector_inlined
Base definition for an LED controller.
I2SCommFormat mCommFormat
ConfigI2S(int pin_ws, int pin_sd, int pin_clk, int i2s_num, AudioChannel mic_channel, u16 sample_rate, u8 bit_resolution, I2SCommFormat comm_format=I2SCommFormat::Philips, bool invert=false) FL_NOEXCEPT
AudioChannel mAudioChannel
ConfigPdm(int pin_din, int pin_clk, int i2s_num, u16 sample_rate=AUDIO_DEFAULT_SAMPLE_RATE, bool invert=false) FL_NOEXCEPT