diff --git a/rpcs3/Emu/Audio/AL/OpenALThread.cpp b/rpcs3/Emu/Audio/AL/OpenALThread.cpp index c5255988b6..af49d5a01a 100644 --- a/rpcs3/Emu/Audio/AL/OpenALThread.cpp +++ b/rpcs3/Emu/Audio/AL/OpenALThread.cpp @@ -44,6 +44,8 @@ void OpenALThread::Init() void OpenALThread::Quit() { + m_context = alcGetCurrentContext(); + m_device = alcGetContextsDevice(m_context); alcMakeContextCurrent(nullptr); alcDestroyContext(m_context); alcCloseDevice(m_device); diff --git a/rpcs3/Emu/Audio/cellAudio.h b/rpcs3/Emu/Audio/cellAudio.h index e5ea8545fe..7d492b0ba9 100644 --- a/rpcs3/Emu/Audio/cellAudio.h +++ b/rpcs3/Emu/Audio/cellAudio.h @@ -139,7 +139,7 @@ struct AudioConfig //custom structure : m_is_audio_initialized(false) , m_is_audio_finalized(false) , m_port_in_use(0) - , event_key(0) + , event_key(0x80004d494f323221) , counter(0) { memset(&m_ports, 0, sizeof(AudioPortConfig) * AUDIO_PORT_COUNT); diff --git a/rpcs3/Emu/SysCalls/Modules/cellAudio.cpp b/rpcs3/Emu/SysCalls/Modules/cellAudio.cpp index f0c1e38588..1fb6dc72ff 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellAudio.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellAudio.cpp @@ -60,7 +60,7 @@ int cellAudioInit() memset(buffer2, 0, sizeof(buffer2)); memset(oal_buffer.get(), 0, oal_buffer_size * sizeof(u16)); - if(Ini.AudioOutMode.GetValue() == 1) + if(m_audio_out) { m_audio_out->Init(); m_audio_out->Open(oal_buffer.get(), oal_buffer_size*sizeof(u16)); @@ -151,7 +151,10 @@ int cellAudioInit() if(oal_buffer_offset >= oal_buffer_size) { - m_audio_out->AddData(oal_buffer.get(), oal_buffer_offset * sizeof(u16)); + if(m_audio_out) + { + m_audio_out->AddData(oal_buffer.get(), oal_buffer_offset * sizeof(u16)); + } oal_buffer_offset = 0; } @@ -438,21 +441,22 @@ int cellAudioCreateNotifyEventQueue(mem32_t id, mem64_t key) { cellAudio.Warning("cellAudioCreateNotifyEventQueue(id_addr=0x%x, key_addr=0x%x)", id.GetAddr(), key.GetAddr()); - if (Emu.GetEventManager().CheckKey(0x80004d494f323221)) + while (Emu.GetEventManager().CheckKey(m_config.event_key)) { - return CELL_AUDIO_ERROR_EVENT_QUEUE; + m_config.event_key++; // experimental + //return CELL_AUDIO_ERROR_EVENT_QUEUE; } - EventQueue* eq = new EventQueue(SYS_SYNC_FIFO, SYS_PPU_QUEUE, 0x80004d494f323221, 0x80004d494f323221, 32); + EventQueue* eq = new EventQueue(SYS_SYNC_FIFO, SYS_PPU_QUEUE, m_config.event_key, m_config.event_key, 32); - if (!Emu.GetEventManager().RegisterKey(eq, 0x80004d494f323221)) + if (!Emu.GetEventManager().RegisterKey(eq, m_config.event_key)) { delete eq; return CELL_AUDIO_ERROR_EVENT_QUEUE; } id = cellAudio.GetNewId(eq); - key = 0x80004d494f323221; + key = m_config.event_key; return CELL_OK; } @@ -467,7 +471,7 @@ int cellAudioSetNotifyEventQueue(u64 key) { cellAudio.Warning("cellAudioSetNotifyEventQueue(key=0x%llx)", key); - m_config.event_key = key; + //m_config.event_key = key; /*EventQueue* eq; if (!Emu.GetEventManager().GetEventQueue(key, eq)) @@ -496,7 +500,7 @@ int cellAudioRemoveNotifyEventQueue(u64 key) return CELL_AUDIO_ERROR_PARAM; } - m_config.event_key = 0; + m_config.event_key = 0x80004d494f323221; // TODO: disconnect port diff --git a/rpcs3/Gui/MainFrame.cpp b/rpcs3/Gui/MainFrame.cpp index 653664072e..fc6ac9f582 100644 --- a/rpcs3/Gui/MainFrame.cpp +++ b/rpcs3/Gui/MainFrame.cpp @@ -416,7 +416,7 @@ void MainFrame::Config(wxCommandEvent& WXUNUSED(event)) chbox_hle_exitonstop->SetValue(Ini.HLEExitOnStop.GetValue()); chbox_audio_dump->Enable(Emu.IsStopped()); - cbox_audio_out->Enable(Emu.IsStopped()); + //cbox_audio_out->Enable(Emu.IsStopped()); chbox_hle_logging->Enable(Emu.IsStopped()); cbox_cpu_decoder->SetSelection(Ini.CPUDecoderMode.GetValue() ? Ini.CPUDecoderMode.GetValue() - 1 : 0);