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
81 #if not defined(MOZZI_OUTPUT_BUFFER_SIZE)
82 #define MOZZI_OUTPUT_BUFFER_SIZE 256
94 #include "config_checks_avr.h"
96 #include "config_checks_esp32.h"
98 #include "config_checks_esp8266.h"
100 #include "config_checks_mbed.h"
102 #include "config_checks_renesas.h"
104 #include "config_checks_rp2040.h"
106 #include "config_checks_samd21.h"
107 #elif IS_STM32DUINO()
108 #include "config_checks_stm32duino.h"
109 #elif IS_STM32MAPLE()
110 #include "config_checks_stm32maple.h"
111 #elif (IS_TEENSY3() || IS_TEENSY4())
112 #include "config_checks_teensy.h"
114 #error Problem detecting hardware
119 #if MOZZI_IS(MOZZI_AUDIO_MODE, MOZZI_OUTPUT_EXTERNAL_TIMED, MOZZI_OUTPUT_EXTERNAL_CUSTOM) && !defined(MOZZI_AUDIO_BITS)
120 # define MOZZI_AUDIO_BITS 16
129 #if (MOZZI_OUTPUT_BUFFER_SIZE > 256)
130 #error "Mozzi does not support buffer sizes greated than 256 at the moment"
133 #if MOZZI_IS(MOZZI_AUDIO_INPUT, MOZZI_AUDIO_INPUT_STANDARD) && MOZZI_IS(MOZZI_ANALOG_READ, MOZZI_ANALOG_READ_NONE)
134 #error "MOZZI_AUDIO_INPUT depends on MOZZI_ANALOG_READ option"
137 #if MOZZI_IS(MOZZI_AUDIO_INPUT, MOZZI_AUDIO_INPUT_NONE) && defined(MOZZI_AUDIO_INPUT_PIN)
138 #warning "MOZZI_AUDIO_INPUT_PIN defined without MOZZI_AUDIO_INPUT"
141 #if (MOZZI_AUDIO_CHANNELS < MOZZI_MONO) || (MOZZI_AUDIO_CHANNELS > MOZZI_STEREO)
142 #error "MOZZI_AUDIO_CHANNELS outside of (currently) supported range"
145 #if MOZZI_IS(MOZZI_AUDIO_MODE, MOZZI_OUTPUT_EXTERNAL_TIMED) || MOZZI_IS(MOZZI_AUDIO_MODE, MOZZI_OUTPUT_EXTERNAL_CUSTOM)
146 #warning "Mozzi is configured to use an external void 'audioOutput(const AudioOutput f)' function. Please define one in your sketch"
150 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)
151 MOZZI_CHECK_SUPPORTED(
MOZZI_ANALOG_READ, MOZZI_ANALOG_READ_NONE, MOZZI_ANALOG_READ_STANDARD)
153 #if defined(MOZZI__ANALOG_READ_NOT_CONFIGURED)
154 # if MOZZI_IS(MOZZI_ANALOG_READ, MOZZI_ANALOG_READ_NONE)
155 # warning Asynchronous analog reads not implemented on this platform
157 # undef MOZZI__ANALOG_READ_NOT_CONFIGURED
160 #if defined(MOZZI_ANALOG_READ_RESOLUTION)
161 # if (MOZZI_ANALOG_READ_RESOLUTION < 1) || (MOZZI_ANALOG_READ_RESOLUTION > 16)
163 # error MOZZI_ANALOG_READ_RESOLUTION must be between 1 and 16 bits
168 #if !defined(MOZZI_AUDIO_BIAS)
169 #define MOZZI_AUDIO_BIAS ((uint16_t) 1<<(MOZZI_AUDIO_BITS-1))
172 #if !defined(MOZZI_AUDIO_BITS_OPTIMISTIC)
173 #define MOZZI_AUDIO_BITS_OPTIMISTIC MOZZI_AUDIO_BITS
177 #if MOZZI_AUDIO_RATE == 8192
178 #define AUDIO_RATE_AS_LSHIFT 13
179 #define MICROS_PER_AUDIO_TICK 122
180 #elif MOZZI_AUDIO_RATE == 16384
181 #define AUDIO_RATE_AS_LSHIFT 14
182 #define MICROS_PER_AUDIO_TICK 61
183 #elif MOZZI_AUDIO_RATE == 32768
184 #define AUDIO_RATE_AS_LSHIFT 15
185 #define MICROS_PER_AUDIO_TICK 31
186 #elif MOZZI_AUDIO_RATE == 65536
187 #define AUDIO_RATE_AS_LSHIFT 16
188 #define MICROS_PER_AUDIO_TICK 15
190 #error Whoopsie, not LSHIFT defined for this audio rate. Please report and/or fix
193 #if MOZZI_IS(MOZZI_AUDIO_MODE, MOZZI_OUTPUT_EXTERNAL_CUSTOM)
194 #define BYPASS_MOZZI_OUTPUT_BUFFER true
198 #if MOZZI_COMPATIBILITY_LEVEL < MOZZI_COMPATIBILITY_LATEST
199 # define AUDIO_RATE MOZZI_AUDIO_RATE
200 # if !defined(CONTROL_RATE)
201 # define CONTROL_RATE MOZZI_CONTROL_RATE
207 #include "../AudioOutput.h"
208 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_OUTPUT_BUFFER_SIZE
Audio buffer setting.
#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.