4#ifndef YAZE_APP_EMU_AUDIO_SDL3_AUDIO_BACKEND_H
5#define YAZE_APP_EMU_AUDIO_SDL3_AUDIO_BACKEND_H
10#include <SDL3/SDL_audio.h>
31class SDL3AudioBackend :
public IAudioBackend {
33 SDL3AudioBackend() =
default;
34 ~SDL3AudioBackend()
override;
37 bool Initialize(
const AudioConfig& config)
override;
38 void Shutdown()
override;
42 void Pause()
override;
44 void Clear()
override;
47 bool QueueSamples(
const int16_t* samples,
int num_samples)
override;
48 bool QueueSamples(
const float* samples,
int num_samples)
override;
49 bool QueueSamplesNative(
const int16_t* samples,
int frames_per_channel,
50 int channels,
int native_rate)
override;
53 AudioStatus GetStatus()
const override;
54 bool IsInitialized()
const override;
55 AudioConfig GetConfig()
const override;
58 void SetVolume(
float volume)
override;
59 float GetVolume()
const override;
62 void SetAudioStreamResampling(
bool enable,
int native_rate,
63 int channels)
override;
64 bool SupportsAudioStream()
const override {
return true; }
67 std::string GetBackendName()
const override {
return "SDL3"; }
71 bool ApplyVolume(int16_t* samples,
int num_samples)
const;
72 bool ApplyVolume(
float* samples,
int num_samples)
const;
75 SDL_AudioStream* audio_stream_ =
nullptr;
78 SDL_AudioStream* resampling_stream_ =
nullptr;
81 SDL_AudioDeviceID device_id_ = 0;
87 std::atomic<bool> initialized_{
false};
88 std::atomic<float> volume_{1.0f};
91 bool resampling_enabled_ =
false;
93 int native_channels_ = 0;
96 std::vector<int16_t> resample_buffer_;
99 SDL_AudioFormat device_format_ = SDL_AUDIO_S16;
100 int device_channels_ = 2;
101 int device_freq_ = 48000;