diff options
Diffstat (limited to 'drivers/xaudio2')
-rw-r--r-- | drivers/xaudio2/audio_driver_xaudio2.cpp | 29 | ||||
-rw-r--r-- | drivers/xaudio2/audio_driver_xaudio2.h | 41 |
2 files changed, 31 insertions, 39 deletions
diff --git a/drivers/xaudio2/audio_driver_xaudio2.cpp b/drivers/xaudio2/audio_driver_xaudio2.cpp index cd61fefd91..546bbff1ba 100644 --- a/drivers/xaudio2/audio_driver_xaudio2.cpp +++ b/drivers/xaudio2/audio_driver_xaudio2.cpp @@ -31,8 +31,7 @@ #include "global_config.h" #include "os/os.h" -const char * AudioDriverXAudio2::get_name() const -{ +const char *AudioDriverXAudio2::get_name() const { return "XAudio2"; } @@ -44,7 +43,6 @@ Error AudioDriverXAudio2::init() { pcm_open = false; samples_in = NULL; - mix_rate = 48000; // FIXME: speaker_mode seems unused in the Xaudio2 driver so far speaker_mode = SPEAKER_MODE_STEREO; @@ -53,11 +51,11 @@ Error AudioDriverXAudio2::init() { int latency = GLOBAL_DEF("audio/output_latency", 25); buffer_size = nearest_power_of_2(latency * mix_rate / 1000); - samples_in = memnew_arr(int32_t, buffer_size*channels); + samples_in = memnew_arr(int32_t, buffer_size * channels); for (int i = 0; i < AUDIO_BUFFERS; i++) { - samples_out[i] = memnew_arr(int16_t, buffer_size*channels); + samples_out[i] = memnew_arr(int16_t, buffer_size * channels); xaudio_buffer[i].AudioBytes = buffer_size * channels * sizeof(int16_t); - xaudio_buffer[i].pAudioData = (const BYTE*)(samples_out[i]); + xaudio_buffer[i].pAudioData = (const BYTE *)(samples_out[i]); xaudio_buffer[i].Flags = 0; } @@ -93,15 +91,14 @@ Error AudioDriverXAudio2::init() { return OK; }; -void AudioDriverXAudio2::thread_func(void* p_udata) { +void AudioDriverXAudio2::thread_func(void *p_udata) { - AudioDriverXAudio2* ad = (AudioDriverXAudio2*)p_udata; + AudioDriverXAudio2 *ad = (AudioDriverXAudio2 *)p_udata; uint64_t usdelay = (ad->buffer_size / float(ad->mix_rate)) * 1000000; while (!ad->exit_thread) { - if (!ad->active) { for (int i = 0; i < AUDIO_BUFFERS; i++) { @@ -116,30 +113,27 @@ void AudioDriverXAudio2::thread_func(void* p_udata) { ad->unlock(); - for (unsigned int i = 0;i < ad->buffer_size*ad->channels;i++) { + for (unsigned int i = 0; i < ad->buffer_size * ad->channels; i++) { ad->samples_out[ad->current_buffer][i] = ad->samples_in[i] >> 16; } ad->xaudio_buffer[ad->current_buffer].Flags = 0; ad->xaudio_buffer[ad->current_buffer].AudioBytes = ad->buffer_size * ad->channels * sizeof(int16_t); - ad->xaudio_buffer[ad->current_buffer].pAudioData = (const BYTE*)(ad->samples_out[ad->current_buffer]); + ad->xaudio_buffer[ad->current_buffer].pAudioData = (const BYTE *)(ad->samples_out[ad->current_buffer]); ad->xaudio_buffer[ad->current_buffer].PlayBegin = 0; ad->source_voice->SubmitSourceBuffer(&(ad->xaudio_buffer[ad->current_buffer])); ad->current_buffer = (ad->current_buffer + 1) % AUDIO_BUFFERS; XAUDIO2_VOICE_STATE state; - while (ad->source_voice->GetState(&state), state.BuffersQueued > AUDIO_BUFFERS - 1) - { + while (ad->source_voice->GetState(&state), state.BuffersQueued > AUDIO_BUFFERS - 1) { WaitForSingleObject(ad->voice_callback.buffer_end_event, INFINITE); } } - }; ad->thread_exited = true; - }; void AudioDriverXAudio2::start() { @@ -228,9 +222,6 @@ AudioDriverXAudio2::AudioDriverXAudio2() { current_buffer = 0; }; -AudioDriverXAudio2::~AudioDriverXAudio2() { - +AudioDriverXAudio2::~AudioDriverXAudio2(){ }; - - diff --git a/drivers/xaudio2/audio_driver_xaudio2.h b/drivers/xaudio2/audio_driver_xaudio2.h index afafb84c23..9a37ba7a7b 100644 --- a/drivers/xaudio2/audio_driver_xaudio2.h +++ b/drivers/xaudio2/audio_driver_xaudio2.h @@ -29,15 +29,15 @@ #ifndef AUDIO_DRIVER_XAUDIO2_H #define AUDIO_DRIVER_XAUDIO2_H -#include "servers/audio_server.h" -#include "core/os/thread.h" #include "core/os/mutex.h" +#include "core/os/thread.h" +#include "servers/audio_server.h" -#include <windows.h> -#include <mmsystem.h> #include <mmreg.h> -#include <xaudio2.h> +#include <mmsystem.h> +#include <windows.h> #include <wrl/client.h> +#include <xaudio2.h> class AudioDriverXAudio2 : public AudioDriver { @@ -48,26 +48,28 @@ class AudioDriverXAudio2 : public AudioDriver { struct XAudio2DriverVoiceCallback : public IXAudio2VoiceCallback { HANDLE buffer_end_event; - XAudio2DriverVoiceCallback() : buffer_end_event(CreateEvent(NULL, FALSE, FALSE, NULL)) {} - void STDMETHODCALLTYPE OnBufferEnd(void* pBufferContext) { /*print_line("buffer ended");*/ SetEvent(buffer_end_event); } + XAudio2DriverVoiceCallback() + : buffer_end_event(CreateEvent(NULL, FALSE, FALSE, NULL)) {} + void STDMETHODCALLTYPE OnBufferEnd(void *pBufferContext) { /*print_line("buffer ended");*/ + SetEvent(buffer_end_event); + } //Unused methods are stubs void STDMETHODCALLTYPE OnStreamEnd() {} void STDMETHODCALLTYPE OnVoiceProcessingPassEnd() {} void STDMETHODCALLTYPE OnVoiceProcessingPassStart(UINT32 SamplesRequired) {} - void STDMETHODCALLTYPE OnBufferStart(void * pBufferContext) {} - void STDMETHODCALLTYPE OnLoopEnd(void * pBufferContext) {} - void STDMETHODCALLTYPE OnVoiceError(void * pBufferContext, HRESULT Error) {} - + void STDMETHODCALLTYPE OnBufferStart(void *pBufferContext) {} + void STDMETHODCALLTYPE OnLoopEnd(void *pBufferContext) {} + void STDMETHODCALLTYPE OnVoiceError(void *pBufferContext, HRESULT Error) {} }; - Thread* thread; - Mutex* mutex; + Thread *thread; + Mutex *mutex; - int32_t* samples_in; - int16_t* samples_out[AUDIO_BUFFERS]; + int32_t *samples_in; + int16_t *samples_out[AUDIO_BUFFERS]; - static void thread_func(void* p_udata); + static void thread_func(void *p_udata); int buffer_size; unsigned int mix_rate; @@ -83,14 +85,13 @@ class AudioDriverXAudio2 : public AudioDriver { WAVEFORMATEX wave_format; Microsoft::WRL::ComPtr<IXAudio2> xaudio; int current_buffer; - IXAudio2MasteringVoice* mastering_voice; + IXAudio2MasteringVoice *mastering_voice; XAUDIO2_BUFFER xaudio_buffer[AUDIO_BUFFERS]; - IXAudio2SourceVoice* source_voice; + IXAudio2SourceVoice *source_voice; XAudio2DriverVoiceCallback voice_callback; public: - - const char* get_name() const; + const char *get_name() const; virtual Error init(); virtual void start(); |