34 #ifndef MOZZI_CONFIG_CHECK_GENERIC_H
35 #define MOZZI_CONFIG_CHECK_GENERIC_H
37 #include "../MozziConfigValues.h"
38 #include "mozzi_macros.h"
41 #if defined(BYPASS_MOZZI_OUTPUT_BUFFER)
42 #error "BYPASS_MOZZI_OUTPUT_BUFFER may not be customized via config"
47 #if not defined(MOZZI_COMPATIBILITY_LEVEL)
48 #define MOZZI_COMPATIBILITY_LEVEL MOZZI_COMPATIBILITY_2_0
51 #if not defined(MOZZI_AUDIO_CHANNELS)
52 #define MOZZI_AUDIO_CHANNELS MOZZI_MONO
58 #if not defined(MOZZI_CONTROL_RATE)
59 # if defined(CONTROL_RATE) && (MOZZI_COMPATIBILITY_LEVEL < MOZZI_COMPATIBILITY_LATEST)
60 # warning Please change CONTROL_RATE to MOZZI_CONTROL_RATE
61 # define MOZZI_CONTROL_RATE CONTROL_RATE
63 # define MOZZI_CONTROL_RATE 64
68 #if not defined(MOZZI_ANALOG_READ)
69 #define MOZZI__ANALOG_READ_NOT_CONFIGURED
72 #if not defined(MOZZI_AUDIO_INPUT)
73 #define MOZZI_AUDIO_INPUT MOZZI_AUDIO_INPUT_NONE
76 #if !MOZZI_IS(MOZZI_AUDIO_INPUT, MOZZI_AUDIO_INPUT_NONE) && !defined(MOZZI_AUDIO_INPUT_PIN)
77 #warning Using audio input, but no audio input pin defined, explicitly. Defaulting to pin 0.
78 #define MOZZI_AUDIO_INPUT_PIN 0
90 #include "config_checks_avr.h"
92 #include "config_checks_esp32.h"
94 #include "config_checks_esp8266.h"
96 #include "config_checks_mbed.h"
98 #include "config_checks_renesas.h"
100 #include "config_checks_rp2040.h"
102 #include "config_checks_samd21.h"
103 #elif IS_STM32DUINO()
104 #include "config_checks_stm32duino.h"
105 #elif IS_STM32MAPLE()
106 #include "config_checks_stm32maple.h"
107 #elif (IS_TEENSY3() || IS_TEENSY4())
108 #include "config_checks_teensy.h"
110 #error Problem detecting hardware
115 #if MOZZI_IS(MOZZI_AUDIO_MODE, MOZZI_OUTPUT_EXTERNAL_TIMED, MOZZI_OUTPUT_EXTERNAL_CUSTOM) && !defined(MOZZI_AUDIO_BITS)
116 # define MOZZI_AUDIO_BITS 16
125 #if MOZZI_IS(MOZZI_AUDIO_INPUT, MOZZI_AUDIO_INPUT_STANDARD) && MOZZI_IS(MOZZI_ANALOG_READ, MOZZI_ANALOG_READ_NONE)
126 #error "MOZZI_AUDIO_INPUT depends on MOZZI_ANALOG_READ option"
129 #if MOZZI_IS(MOZZI_AUDIO_INPUT, MOZZI_AUDIO_INPUT_NONE) && defined(MOZZI_AUDIO_INPUT_PIN)
130 #warning "MOZZI_AUDIO_INPUT_PIN defined without MOZZI_AUDIO_INPUT"
133 #if (MOZZI_AUDIO_CHANNELS < MOZZI_MONO) || (MOZZI_AUDIO_CHANNELS > MOZZI_STEREO)
134 #error "MOZZI_AUDIO_CHANNELS outside of (currently) supported range"
137 #if MOZZI_IS(MOZZI_AUDIO_MODE, MOZZI_OUTPUT_EXTERNAL_TIMED) || MOZZI_IS(MOZZI_AUDIO_MODE, MOZZI_OUTPUT_EXTERNAL_CUSTOM)
138 #warning "Mozzi is configured to use an external void 'audioOutput(const AudioOutput f)' function. Please define one in your sketch"
142 MOZZI_CHECK_SUPPORTED(
MOZZI_AUDIO_MODE, MOZZI_OUTPUT_PWM, MOZZI_OUTPUT_2PIN_PWM, MOZZI_OUTPUT_EXTERNAL_TIMED, MOZZI_OUTPUT_EXTERNAL_CUSTOM, MOZZI_OUTPUT_PDM_VIA_I2S, MOZZI_OUTPUT_PDM_VIA_SERIAL, MOZZI_OUTPUT_I2S_DAC, MOZZI_OUTPUT_INTERNAL_DAC)
143 MOZZI_CHECK_SUPPORTED(
MOZZI_ANALOG_READ, MOZZI_ANALOG_READ_NONE, MOZZI_ANALOG_READ_STANDARD)
145 #if defined(MOZZI__ANALOG_READ_NOT_CONFIGURED)
146 # if MOZZI_IS(MOZZI_ANALOG_READ, MOZZI_ANALOG_READ_NONE)
147 # warning Asynchronous analog reads not implemented on this platform
149 # undef MOZZI__ANALOG_READ_NOT_CONFIGURED
152 #if defined(MOZZI_ANALOG_READ_RESOLUTION)
153 # if (MOZZI_ANALOG_READ_RESOLUTION < 1) || (MOZZI_ANALOG_READ_RESOLUTION > 16)
155 # error MOZZI_ANALOG_READ_RESOLUTION must be between 1 and 16 bits
160 #if !defined(MOZZI_AUDIO_BIAS)
161 #define MOZZI_AUDIO_BIAS ((uint16_t) 1<<(MOZZI_AUDIO_BITS-1))
164 #if !defined(MOZZI_AUDIO_BITS_OPTIMISTIC)
165 #define MOZZI_AUDIO_BITS_OPTIMISTIC MOZZI_AUDIO_BITS
169 #if MOZZI_AUDIO_RATE == 8192
170 #define AUDIO_RATE_AS_LSHIFT 13
171 #define MICROS_PER_AUDIO_TICK 122
172 #elif MOZZI_AUDIO_RATE == 16384
173 #define AUDIO_RATE_AS_LSHIFT 14
174 #define MICROS_PER_AUDIO_TICK 61
175 #elif MOZZI_AUDIO_RATE == 32768
176 #define AUDIO_RATE_AS_LSHIFT 15
177 #define MICROS_PER_AUDIO_TICK 31
178 #elif MOZZI_AUDIO_RATE == 65336
179 #define AUDIO_RATE_AS_LSHIFT 16
180 #define MICROS_PER_AUDIO_TICK 15
182 #error Whoopsie, not LSHIFT defined for this audio rate. Please report and/or fix
185 #if MOZZI_IS(MOZZI_AUDIO_MODE, MOZZI_OUTPUT_EXTERNAL_CUSTOM)
186 #define BYPASS_MOZZI_OUTPUT_BUFFER true
190 #if MOZZI_COMPATIBILITY_LEVEL < MOZZI_COMPATIBILITY_LATEST
191 # define AUDIO_RATE MOZZI_AUDIO_RATE
192 # if !defined(CONTROL_RATE)
193 # define CONTROL_RATE MOZZI_CONTROL_RATE
199 #include "../AudioOutput.h"
200 static_assert(
MOZZI_AUDIO_BITS <= (8*
sizeof(AudioOutputStorage_t)),
"Configured MOZZI_AUDIO_BITS is too large for the internal storage type");
#define MOZZI_AUDIO_BITS
Output resolution of audio samples.
#define MOZZI_CONTROL_RATE
Control rate setting.
#define MOZZI_AUDIO_MODE
Configure how Mozzi outputs generated sounds.
#define MOZZI_AUDIO_RATE
Defines the audio rate, i.e.
#define MOZZI_ANALOG_READ
Whether to compile in support for non-blocking analog reads.