Mesen/Libretro/LibretroSoundManager.h

76 lines
1.4 KiB
C
Raw Normal View History

2018-01-04 19:03:47 -05:00
#pragma once
#include "stdafx.h"
#include "../Core/IAudioDevice.h"
#include "../Core/SoundMixer.h"
#include "libretro.h"
class LibretroSoundManager : public IAudioDevice
{
private:
retro_audio_sample_batch_t _sendAudioSample = nullptr;
2018-01-04 19:03:47 -05:00
bool _skipMode = false;
shared_ptr<Console> _console;
2018-01-04 19:03:47 -05:00
public:
LibretroSoundManager(shared_ptr<Console> console)
2018-01-04 19:03:47 -05:00
{
_console = console;
_console->GetSoundMixer()->RegisterAudioDevice(this);
2018-01-04 19:03:47 -05:00
}
~LibretroSoundManager()
{
_console->GetSoundMixer()->RegisterAudioDevice(nullptr);
2018-01-04 19:03:47 -05:00
}
// Inherited via IAudioDevice
virtual void PlayBuffer(int16_t *soundBuffer, uint32_t sampleCount, uint32_t sampleRate, bool isStereo) override
{
if(!_skipMode && _sendAudioSample) {
for(uint32_t total = 0; total < sampleCount; ) {
total += (uint32_t)_sendAudioSample(soundBuffer + total*2, sampleCount - total);
}
2018-01-04 19:03:47 -05:00
}
}
void SetSendAudioSample(retro_audio_sample_batch_t sendAudioSample)
2018-01-04 23:09:07 -05:00
{
_sendAudioSample = sendAudioSample;
2018-01-04 23:09:07 -05:00
}
2018-01-04 19:03:47 -05:00
void SetSkipMode(bool skip)
{
_skipMode = skip;
}
virtual void Stop() override
{
}
virtual void Pause() override
{
}
virtual string GetAvailableDevices() override
{
return string();
}
virtual void SetAudioDevice(string deviceName) override
{
}
2018-06-10 14:51:00 -04:00
virtual void UpdateSoundSettings() override
{
}
2018-06-10 14:51:00 -04:00
virtual void ProcessEndOfFrame() override
{
}
virtual AudioStatistics GetStatistics() override
{
return AudioStatistics();
}
2018-01-04 19:03:47 -05:00
};