1 #pragma once 2 #include <SDL2/SDL.h> 3 #include "../Core/BaseSoundManager.h" 4 5 class Console; 6 7 class SdlSoundManager : public BaseSoundManager 8 { 9 public: 10 SdlSoundManager(shared_ptr<Console> console); 11 ~SdlSoundManager(); 12 13 void PlayBuffer(int16_t *soundBuffer, uint32_t bufferSize, uint32_t sampleRate, bool isStereo); 14 void Pause(); 15 void Stop(); 16 17 void ProcessEndOfFrame(); 18 19 string GetAvailableDevices(); 20 void SetAudioDevice(string deviceName); 21 22 private: 23 vector<string> GetAvailableDeviceInfo(); 24 bool InitializeAudio(uint32_t sampleRate, bool isStereo); 25 void Release(); 26 27 static void FillAudioBuffer(void *userData, uint8_t *stream, int len); 28 29 void ReadFromBuffer(uint8_t* output, uint32_t len); 30 void WriteToBuffer(uint8_t* output, uint32_t len); 31 32 private: 33 shared_ptr<Console> _console; 34 SDL_AudioDeviceID _audioDeviceID; 35 string _deviceName; 36 bool _needReset = false; 37 38 uint16_t _previousLatency = 0; 39 40 uint8_t* _buffer = nullptr; 41 uint32_t _writePosition = 0; 42 uint32_t _readPosition = 0; 43 }; 44