yaze 0.3.2
Link to the Past ROM Editor
 
Loading...
Searching...
No Matches
audio_backend.h
Go to the documentation of this file.
1// audio_backend.h - Audio Backend Abstraction Layer
2// Provides interface for swapping audio implementations (SDL2, SDL3, other libs)
3
4#ifndef YAZE_APP_EMU_AUDIO_AUDIO_BACKEND_H
5#define YAZE_APP_EMU_AUDIO_AUDIO_BACKEND_H
6
7#include <cstdint>
8#include <memory>
9#include <string>
10
11namespace yaze {
12namespace emu {
13namespace audio {
14
15// Audio sample format
16enum class SampleFormat {
17 INT16, // 16-bit signed PCM
18 FLOAT32 // 32-bit float
19};
20
21// Audio configuration
23 int sample_rate = 48000;
24 int channels = 2; // Stereo
25 int buffer_frames = 1024;
27};
28
29// Audio backend status
31 bool is_playing = false;
32 uint32_t queued_bytes = 0;
33 uint32_t queued_frames = 0;
34 bool has_underrun = false;
35};
36
44 public:
45 virtual ~IAudioBackend() = default;
46
47 // Initialization
48 virtual bool Initialize(const AudioConfig& config) = 0;
49 virtual void Shutdown() = 0;
50
51 // Playback control
52 virtual void Play() = 0;
53 virtual void Pause() = 0;
54 virtual void Stop() = 0;
55 virtual void Clear() = 0;
56
57 // Audio data
58 virtual bool QueueSamples(const int16_t* samples, int num_samples) = 0;
59 virtual bool QueueSamples(const float* samples, int num_samples) = 0;
60
61 // Status queries
62 virtual AudioStatus GetStatus() const = 0;
63 virtual bool IsInitialized() const = 0;
64 virtual AudioConfig GetConfig() const = 0;
65
66 // Volume control (0.0 to 1.0)
67 virtual void SetVolume(float volume) = 0;
68 virtual float GetVolume() const = 0;
69
70 // Get backend name for debugging
71 virtual std::string GetBackendName() const = 0;
72};
73
78 public:
79 SDL2AudioBackend() = default;
80 ~SDL2AudioBackend() override;
81
82 bool Initialize(const AudioConfig& config) override;
83 void Shutdown() override;
84
85 void Play() override;
86 void Pause() override;
87 void Stop() override;
88 void Clear() override;
89
90 bool QueueSamples(const int16_t* samples, int num_samples) override;
91 bool QueueSamples(const float* samples, int num_samples) override;
92
93 AudioStatus GetStatus() const override;
94 bool IsInitialized() const override;
95 AudioConfig GetConfig() const override;
96
97 void SetVolume(float volume) override;
98 float GetVolume() const override;
99
100 std::string GetBackendName() const override { return "SDL2"; }
101
102 private:
103 uint32_t device_id_ = 0;
105 bool initialized_ = false;
106 float volume_ = 1.0f;
107};
108
113 public:
114 enum class BackendType {
115 SDL2,
116 SDL3, // Future
117 NULL_BACKEND // For testing/headless
118 };
119
120 static std::unique_ptr<IAudioBackend> Create(BackendType type);
121};
122
123} // namespace audio
124} // namespace emu
125} // namespace yaze
126
127#endif // YAZE_APP_EMU_AUDIO_AUDIO_BACKEND_H
128
Factory for creating audio backends.
static std::unique_ptr< IAudioBackend > Create(BackendType type)
Abstract audio backend interface.
virtual std::string GetBackendName() const =0
virtual bool QueueSamples(const float *samples, int num_samples)=0
virtual void SetVolume(float volume)=0
virtual bool Initialize(const AudioConfig &config)=0
virtual AudioStatus GetStatus() const =0
virtual bool IsInitialized() const =0
virtual ~IAudioBackend()=default
virtual AudioConfig GetConfig() const =0
virtual float GetVolume() const =0
virtual bool QueueSamples(const int16_t *samples, int num_samples)=0
SDL2 audio backend implementation.
AudioConfig GetConfig() const override
void SetVolume(float volume) override
bool Initialize(const AudioConfig &config) override
bool IsInitialized() const override
std::string GetBackendName() const override
AudioStatus GetStatus() const override
bool QueueSamples(const int16_t *samples, int num_samples) override
Main namespace for the application.