Skip to content

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

namespace pixelroot32::audio {
    struct AudioConfig {
        // ...
    };
}

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