mirror of
https://github.com/RPCS3/rpcs3.git
synced 2025-07-04 14:01:25 +12:00
Also renames "AudioThread" to "AudioBackend". The new name is more descriptive of what the class really is responsible for, since the backends are not responsible for managing the audio thread. NOTE: Right now only XAudio2 is supported
112 lines
2.3 KiB
C++
112 lines
2.3 KiB
C++
#ifdef _WIN32
|
|
|
|
#include "Utilities/Log.h"
|
|
#include "Utilities/StrFmt.h"
|
|
|
|
#include "XAudio2Backend.h"
|
|
#include <Windows.h>
|
|
|
|
XAudio2Backend::XAudio2Backend()
|
|
{
|
|
if (auto lib2_9 = LoadLibraryExW(L"XAudio2_9.dll", nullptr, LOAD_LIBRARY_SEARCH_SYSTEM32))
|
|
{
|
|
// xa28* implementation is fully compatible with library 2.9
|
|
xa28_init(lib2_9);
|
|
|
|
m_funcs.destroy = &xa28_destroy;
|
|
m_funcs.play = &xa28_play;
|
|
m_funcs.flush = &xa28_flush;
|
|
m_funcs.stop = &xa28_stop;
|
|
m_funcs.open = &xa28_open;
|
|
m_funcs.is_playing = &xa28_is_playing;
|
|
m_funcs.add = &xa28_add;
|
|
m_funcs.enqueued_samples = &xa28_enqueued_samples;
|
|
|
|
LOG_SUCCESS(GENERAL, "XAudio 2.9 initialized");
|
|
return;
|
|
}
|
|
|
|
if (auto lib2_8 = LoadLibraryExW(L"XAudio2_8.dll", nullptr, LOAD_LIBRARY_SEARCH_SYSTEM32))
|
|
{
|
|
xa28_init(lib2_8);
|
|
|
|
m_funcs.destroy = &xa28_destroy;
|
|
m_funcs.play = &xa28_play;
|
|
m_funcs.flush = &xa28_flush;
|
|
m_funcs.stop = &xa28_stop;
|
|
m_funcs.open = &xa28_open;
|
|
m_funcs.is_playing = &xa28_is_playing;
|
|
m_funcs.add = &xa28_add;
|
|
m_funcs.enqueued_samples = &xa28_enqueued_samples;
|
|
|
|
LOG_SUCCESS(GENERAL, "XAudio 2.8 initialized");
|
|
return;
|
|
}
|
|
|
|
if (auto lib2_7 = LoadLibraryExW(L"XAudio2_7.dll", nullptr, LOAD_LIBRARY_SEARCH_SYSTEM32))
|
|
{
|
|
xa27_init(lib2_7);
|
|
|
|
m_funcs.destroy = &xa27_destroy;
|
|
m_funcs.play = &xa27_play;
|
|
m_funcs.flush = &xa27_flush;
|
|
m_funcs.stop = &xa27_stop;
|
|
m_funcs.open = &xa27_open;
|
|
m_funcs.is_playing = &xa27_is_playing;
|
|
m_funcs.add = &xa27_add;
|
|
m_funcs.enqueued_samples = &xa27_enqueued_samples;
|
|
|
|
LOG_SUCCESS(GENERAL, "XAudio 2.7 initialized");
|
|
return;
|
|
}
|
|
|
|
fmt::throw_exception("No supported XAudio2 library found");
|
|
}
|
|
|
|
XAudio2Backend::~XAudio2Backend()
|
|
{
|
|
m_funcs.destroy();
|
|
}
|
|
|
|
void XAudio2Backend::Play()
|
|
{
|
|
m_funcs.play();
|
|
}
|
|
|
|
void XAudio2Backend::Close()
|
|
{
|
|
m_funcs.stop();
|
|
m_funcs.flush();
|
|
}
|
|
|
|
void XAudio2Backend::Pause()
|
|
{
|
|
m_funcs.stop();
|
|
}
|
|
|
|
void XAudio2Backend::Open()
|
|
{
|
|
m_funcs.open();
|
|
}
|
|
|
|
bool XAudio2Backend::IsPlaying()
|
|
{
|
|
return m_funcs.is_playing();
|
|
}
|
|
|
|
bool XAudio2Backend::AddData(const void* src, int size)
|
|
{
|
|
return m_funcs.add(src, size);
|
|
}
|
|
|
|
void XAudio2Backend::Flush()
|
|
{
|
|
m_funcs.flush();
|
|
}
|
|
|
|
u64 XAudio2Backend::GetNumEnqueuedSamples()
|
|
{
|
|
return m_funcs.enqueued_samples();
|
|
}
|
|
|
|
#endif
|