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"
112 #include "config_checks_CH32.h"
113 #elif (IS_TEENSY3() || IS_TEENSY4())
114 #include "config_checks_teensy.h"
116 #error Problem detecting hardware
121 #if MOZZI_IS(MOZZI_AUDIO_MODE, MOZZI_OUTPUT_EXTERNAL_TIMED, MOZZI_OUTPUT_EXTERNAL_CUSTOM) && !defined(MOZZI_AUDIO_BITS)
122 # define MOZZI_AUDIO_BITS 16
131 #if (MOZZI_OUTPUT_BUFFER_SIZE > 256)
132 #error "Mozzi does not support buffer sizes greated than 256 at the moment"
135 #if MOZZI_IS(MOZZI_AUDIO_INPUT, MOZZI_AUDIO_INPUT_STANDARD) && MOZZI_IS(MOZZI_ANALOG_READ, MOZZI_ANALOG_READ_NONE)
136 #error "MOZZI_AUDIO_INPUT depends on MOZZI_ANALOG_READ option"
139 #if MOZZI_IS(MOZZI_AUDIO_INPUT, MOZZI_AUDIO_INPUT_NONE) && defined(MOZZI_AUDIO_INPUT_PIN)
140 #warning "MOZZI_AUDIO_INPUT_PIN defined without MOZZI_AUDIO_INPUT"
143 #if (MOZZI_AUDIO_CHANNELS < MOZZI_MONO) || (MOZZI_AUDIO_CHANNELS > MOZZI_STEREO)
144 #error "MOZZI_AUDIO_CHANNELS outside of (currently) supported range"
147 #if MOZZI_IS(MOZZI_AUDIO_MODE, MOZZI_OUTPUT_EXTERNAL_TIMED) || MOZZI_IS(MOZZI_AUDIO_MODE, MOZZI_OUTPUT_EXTERNAL_CUSTOM)
148 #warning "Mozzi is configured to use an external void 'audioOutput(const AudioOutput f)' function. Please define one in your sketch"
152 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)
153 MOZZI_CHECK_SUPPORTED(
MOZZI_ANALOG_READ, MOZZI_ANALOG_READ_NONE, MOZZI_ANALOG_READ_STANDARD)
155 #if defined(MOZZI__ANALOG_READ_NOT_CONFIGURED)
156 # if MOZZI_IS(MOZZI_ANALOG_READ, MOZZI_ANALOG_READ_NONE)
157 # warning Asynchronous analog reads not implemented on this platform
159 # undef MOZZI__ANALOG_READ_NOT_CONFIGURED
162 #if defined(MOZZI_ANALOG_READ_RESOLUTION)
163 # if (MOZZI_ANALOG_READ_RESOLUTION < 1) || (MOZZI_ANALOG_READ_RESOLUTION > 16)
165 # error MOZZI_ANALOG_READ_RESOLUTION must be between 1 and 16 bits
170 #if !defined(MOZZI_AUDIO_BIAS)
171 #define MOZZI_AUDIO_BIAS ((uint16_t) 1<<(MOZZI_AUDIO_BITS-1))
174 #if !defined(MOZZI_AUDIO_BITS_OPTIMISTIC)
175 #define MOZZI_AUDIO_BITS_OPTIMISTIC MOZZI_AUDIO_BITS
179 #if MOZZI_AUDIO_RATE == 8192
180 #define AUDIO_RATE_AS_LSHIFT 13
181 #define MICROS_PER_AUDIO_TICK 122
182 #elif MOZZI_AUDIO_RATE == 16384
183 #define AUDIO_RATE_AS_LSHIFT 14
184 #define MICROS_PER_AUDIO_TICK 61
185 #elif MOZZI_AUDIO_RATE == 32768
186 #define AUDIO_RATE_AS_LSHIFT 15
187 #define MICROS_PER_AUDIO_TICK 31
188 #elif MOZZI_AUDIO_RATE == 65536
189 #define AUDIO_RATE_AS_LSHIFT 16
190 #define MICROS_PER_AUDIO_TICK 15
192 #error Whoopsie, not LSHIFT defined for this audio rate. Please report and/or fix
195 #if MOZZI_IS(MOZZI_AUDIO_MODE, MOZZI_OUTPUT_EXTERNAL_CUSTOM)
196 #define BYPASS_MOZZI_OUTPUT_BUFFER true
200 #if MOZZI_COMPATIBILITY_LEVEL < MOZZI_COMPATIBILITY_LATEST
201 # define AUDIO_RATE MOZZI_AUDIO_RATE
202 # if !defined(CONTROL_RATE)
203 # define CONTROL_RATE MOZZI_CONTROL_RATE
209 #include "../AudioOutput.h"
210 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.