mirror of
https://github.com/mitch030504/Wiicompiled_VR_Frame.git
synced 2026-10-06 07:00:30 +02:00
init
This commit is contained in:
commit
ec226e8348
1099 files changed
+400981
No files matched your search
@@ -0,0 +1,48 @@
|
||||
#pragma once
|
||||
|
||||
#include <cstddef>
|
||||
#include <cstdint>
|
||||
#include <mutex>
|
||||
#include <vector>
|
||||
|
||||
#include <SDL3/SDL_audio.h>
|
||||
|
||||
class AudioBackend {
|
||||
public:
|
||||
static AudioBackend& Instance();
|
||||
|
||||
bool Init(uint32_t sampleRate, uint32_t channels);
|
||||
void Shutdown();
|
||||
|
||||
// Wii AI DMA frames are big-endian and ordered right, left. SDL expects
|
||||
// native-endian interleaved left, right samples.
|
||||
bool PushWiiAiSamplesBE16(const uint8_t* data, size_t bytes);
|
||||
bool PushSamplesLE16(const int16_t* samples, size_t sampleCount);
|
||||
|
||||
// Applied to the final host output, covering both AX and direct AI DMA.
|
||||
void SetMasterVolume(float volume);
|
||||
void SetMuted(bool muted);
|
||||
|
||||
private:
|
||||
AudioBackend() = default;
|
||||
~AudioBackend() = default;
|
||||
AudioBackend(const AudioBackend&) = delete;
|
||||
AudioBackend& operator=(const AudioBackend&) = delete;
|
||||
|
||||
bool EnsureInitializedLocked(uint32_t sampleRate, uint32_t channels);
|
||||
bool QueueHasCapacityLocked(int incomingBytes);
|
||||
uint32_t QueueLimitBytesLocked() const;
|
||||
float EffectiveGainLocked() const;
|
||||
void ApplyGainLocked();
|
||||
|
||||
mutable std::mutex m_mutex;
|
||||
SDL_AudioStream* m_stream = nullptr;
|
||||
SDL_AudioSpec m_spec{};
|
||||
uint32_t m_sampleRate = 0;
|
||||
uint32_t m_channels = 0;
|
||||
bool m_initialized = false;
|
||||
float m_masterVolume = 1.0f;
|
||||
bool m_muted = false;
|
||||
bool m_reportedDroppedBlock = false;
|
||||
std::vector<int16_t> m_convertBuffer;
|
||||
};
|
||||
Reference in new issue
Block a user