diff --git a/src/xenia/app/emulator_window.cc b/src/xenia/app/emulator_window.cc index f0968c8b8..4c76474e1 100644 --- a/src/xenia/app/emulator_window.cc +++ b/src/xenia/app/emulator_window.cc @@ -688,6 +688,9 @@ void EmulatorWindow::XMPConfigDialog::OnDraw(ImGuiIO& io) { } } + volume_ = + emulator_window_.emulator_->audio_media_player()->GetVolume()->load(); + if (ImGui::SliderFloat("Audio player volume", &volume_, 0.0f, 1.0f)) { audio_player->SetVolume(volume_); } diff --git a/src/xenia/app/emulator_window.h b/src/xenia/app/emulator_window.h index bfc7278a1..de0958902 100644 --- a/src/xenia/app/emulator_window.h +++ b/src/xenia/app/emulator_window.h @@ -215,7 +215,9 @@ class EmulatorWindow { EmulatorWindow& emulator_window) : ui::ImGuiDialog(imgui_drawer), emulator_window_(emulator_window) { if (emulator_window_.emulator_->audio_media_player()) { - volume_ = emulator_window_.emulator_->audio_media_player()->GetVolume(); + volume_ = emulator_window_.emulator_->audio_media_player() + ->GetVolume() + ->load(); } } diff --git a/src/xenia/apu/audio_media_player.cc b/src/xenia/apu/audio_media_player.cc index b88e5aab2..76e460c9e 100644 --- a/src/xenia/apu/audio_media_player.cc +++ b/src/xenia/apu/audio_media_player.cc @@ -448,7 +448,7 @@ void AudioMediaPlayer::RemovePlaylist(uint32_t handle) { } X_STATUS AudioMediaPlayer::SetVolume(float volume) { - volume_ = std::min(volume, 1.0f); + volume_.store(std::min(volume, 1.0f)); std::unique_lock guard(driver_mutex_); if (!driver_) { diff --git a/src/xenia/apu/audio_media_player.h b/src/xenia/apu/audio_media_player.h index b2733d915..6d0745dd5 100644 --- a/src/xenia/apu/audio_media_player.h +++ b/src/xenia/apu/audio_media_player.h @@ -51,7 +51,7 @@ class AudioMediaPlayer { bool IsLastSongInPlaylist() const; X_STATUS SetVolume(float volume); - float GetVolume() const { return volume_; } + const std::atomic* GetVolume() const { return &volume_; } void SetPlaybackMode(XmpApp::PlaybackMode playback_mode) { playback_mode_ = playback_mode; @@ -106,7 +106,7 @@ class AudioMediaPlayer { XmpApp::PlaybackMode playback_mode_ = XmpApp::PlaybackMode::kInOrder; XmpApp::RepeatMode repeat_mode_ = XmpApp::RepeatMode::kPlaylist; XmpApp::PlaybackFlags playback_flags_ = XmpApp::PlaybackFlags::kDefault; - float volume_ = 0.0f; + std::atomic volume_ = 0.0f; uint32_t dash_init_state = 0; std::unordered_map> playlists_; diff --git a/src/xenia/kernel/xam/apps/xmp_app.cc b/src/xenia/kernel/xam/apps/xmp_app.cc index 95176156e..283e17d34 100644 --- a/src/xenia/kernel/xam/apps/xmp_app.cc +++ b/src/xenia/kernel/xam/apps/xmp_app.cc @@ -262,7 +262,7 @@ X_HRESULT XmpApp::DispatchMessageSync(uint32_t message, uint32_t buffer_ptr, xe::store_and_swap( memory_->TranslateVirtual(args->volume_ptr), - kernel_state_->emulator()->audio_media_player()->GetVolume()); + kernel_state_->emulator()->audio_media_player()->GetVolume()->load()); return X_E_SUCCESS; } case 0x0007000C: { @@ -401,7 +401,7 @@ X_HRESULT XmpApp::DispatchMessageSync(uint32_t message, uint32_t buffer_ptr, XMP_CREATE_USER_PLAYLIST_ENUMERATOR* args = reinterpret_cast(buffer); - XELOGD("XMPSetPlaybackController({:08X}, {:08X}, {:08X})", + XELOGD("XMPCreateUserPlaylistEnumerator({:08X}, {:08X}, {:08X})", uint32_t(args->xmp_client), uint32_t(args->flags), uint32_t(args->unk_ptr)); return X_E_SUCCESS; diff --git a/src/xenia/kernel/xam/apps/xmp_app.h b/src/xenia/kernel/xam/apps/xmp_app.h index b0324fd81..92f228102 100644 --- a/src/xenia/kernel/xam/apps/xmp_app.h +++ b/src/xenia/kernel/xam/apps/xmp_app.h @@ -86,7 +86,7 @@ static_assert_size(XMP_GET_VOLUME, 0x8); struct XMP_SET_VOLUME { xe::be xmp_client; - xe::be value; + xe::be value; }; static_assert_size(XMP_SET_VOLUME, 0x8);