AudioConfig¶
Configuration for the Audio subsystem.
Description¶
AudioConfig is a simple struct that holds configuration settings for the audio system, including the audio backend and sample rate. It is passed to AudioEngine during construction.
Namespace¶
Structure¶
AudioBackend* backend¶
Pointer to the platform-specific audio backend implementation.
Type: AudioBackend*
Access: Read-write
Default: nullptr
Notes: - Must be set to a valid backend instance - Backend is platform-specific: - ESP32: ESP32_DAC_AudioBackend or ESP32_I2S_AudioBackend - Native: SDL2_AudioBackend - Backend manages the actual audio hardware/API
Example:
#ifdef PLATFORM_ESP32
pixelroot32::drivers::esp32::ESP32_DAC_AudioBackend dacBackend;
audioConfig.backend = &dacBackend;
#elif PLATFORM_NATIVE
pixelroot32::drivers::native::SDL2_AudioBackend sdlBackend;
audioConfig.backend = &sdlBackend;
#endif
int sampleRate¶
Desired sample rate in Hz.
Type: int
Access: Read-write
Default: 22050
Notes: - Common values: 11025, 22050, 44100 - Lower rates use less CPU and memory (better for ESP32) - Higher rates provide better quality - Must match backend capabilities
Example:
audioConfig.sampleRate = 11025; // Lower quality, less CPU (ESP32)
audioConfig.sampleRate = 22050; // Balanced (default)
audioConfig.sampleRate = 44100; // Higher quality (Native)
Constructors¶
AudioConfig(AudioBackend* backend = nullptr, int sampleRate = 22050)¶
Default constructor.
Parameters: - backend (AudioBackend*, optional): Pointer to the audio backend implementation. Default: nullptr - sampleRate (int, optional): Desired sample rate in Hz. Default: 22050
Example:
// Default construction
pixelroot32::audio::AudioConfig audioConfig;
// With backend
pixelroot32::drivers::esp32::ESP32_DAC_AudioBackend dacBackend;
pixelroot32::audio::AudioConfig audioConfig(&dacBackend, 11025);
Usage Example¶
ESP32 with DAC Backend¶
#ifdef PLATFORM_ESP32
#include "drivers/esp32/ESP32_DAC_AudioBackend.h"
pixelroot32::drivers::esp32::ESP32_DAC_AudioBackend dacBackend;
pixelroot32::audio::AudioConfig audioConfig;
audioConfig.backend = &dacBackend;
audioConfig.sampleRate = 11025; // Lower rate for ESP32
pixelroot32::audio::AudioEngine audioEngine(audioConfig);
audioEngine.init();
#endif
ESP32 with I2S Backend¶
#ifdef PLATFORM_ESP32
#include "drivers/esp32/ESP32_I2S_AudioBackend.h"
pixelroot32::drivers::esp32::ESP32_I2S_AudioBackend i2sBackend;
pixelroot32::audio::AudioConfig audioConfig;
audioConfig.backend = &i2sBackend;
audioConfig.sampleRate = 22050; // Higher quality with I2S
pixelroot32::audio::AudioEngine audioEngine(audioConfig);
audioEngine.init();
#endif
Native with SDL2 Backend¶
#ifdef PLATFORM_NATIVE
#include "drivers/native/SDL2_AudioBackend.h"
pixelroot32::drivers::native::SDL2_AudioBackend sdlBackend;
pixelroot32::audio::AudioConfig audioConfig;
audioConfig.backend = &sdlBackend;
audioConfig.sampleRate = 44100; // High quality for PC
pixelroot32::audio::AudioEngine audioEngine(audioConfig);
audioEngine.init();
#endif
Complete Engine Setup¶
#include "core/Engine.h"
#include "graphics/DisplayConfig.h"
#include "input/InputConfig.h"
#include "audio/AudioConfig.h"
void setup() {
// Display config
pixelroot32::graphics::DisplayConfig displayConfig;
displayConfig.width = 128;
displayConfig.height = 128;
// Input config
pixelroot32::input::InputConfig inputConfig;
// ... configure input
// Audio config
#ifdef PLATFORM_ESP32
pixelroot32::drivers::esp32::ESP32_DAC_AudioBackend dacBackend;
pixelroot32::audio::AudioConfig audioConfig(&dacBackend, 11025);
#elif PLATFORM_NATIVE
pixelroot32::drivers::native::SDL2_AudioBackend sdlBackend;
pixelroot32::audio::AudioConfig audioConfig(&sdlBackend, 44100);
#endif
// Create engine with all configs
pixelroot32::core::Engine engine(displayConfig, inputConfig, audioConfig);
engine.init();
engine.run();
}
Platform-Specific Considerations¶
ESP32 DAC Backend¶
- Sample rate: 11025 Hz recommended (lower CPU usage)
- Quality: Lower quality, but simple setup
- Pin: Uses GPIO 25 or 26
- Hardware: Requires simple amplifier circuit
ESP32 I2S Backend¶
- Sample rate: 22050 Hz recommended
- Quality: Higher quality than DAC
- Pins: Requires I2S pins (BCLK, LRCK, DOUT)
- Hardware: Requires external I2S DAC
Native SDL2 Backend¶
- Sample rate: 44100 Hz typical
- Quality: High quality
- Setup: Requires SDL2 library installed
- Platforms: Windows, Linux, macOS
Performance Considerations¶
- Sample rate: Lower rates use less CPU and memory
- Backend choice: DAC is simpler but lower quality than I2S
- Buffer size: Configured in backend, affects latency vs stability
See Also¶
- AudioEngine - Audio playback engine
- Manual - Audio
- Manual - Platforms and Drivers
- API Overview