diff options
| author | sl1nk3.s <sl1nk3.s@gmail.com> | 2009-05-18 19:24:46 +0000 |
|---|---|---|
| committer | sl1nk3.s <sl1nk3.s@gmail.com> | 2009-05-18 19:24:46 +0000 |
| commit | fa86f37fc3d096575af78e43a0f63449c1eb5a15 (patch) | |
| tree | c7b7f50791ea9bbccaeed8dbe7bbe4735951107a /Source | |
| parent | 19face94b1c73a3f51f7808182926ca419b6d6d5 (diff) | |
Added sound volume slider to HLE sound plugin, currently DSound only, unless someone wants to add it to OpenAL :p
git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@3262 8ced0084-cf51-0410-be5f-012b33b47a6e
Diffstat (limited to 'Source')
| -rw-r--r-- | Source/Core/AudioCommon/Src/AudioCommonConfig.cpp | 84 | ||||
| -rw-r--r-- | Source/Core/AudioCommon/Src/AudioCommonConfig.h | 82 | ||||
| -rw-r--r-- | Source/Core/AudioCommon/Src/DSoundStream.cpp | 15 | ||||
| -rw-r--r-- | Source/Core/AudioCommon/Src/DSoundStream.h | 2 | ||||
| -rw-r--r-- | Source/Core/AudioCommon/Src/SoundStream.h | 1 | ||||
| -rw-r--r-- | Source/Plugins/Plugin_DSP_HLE/Src/ConfigDlg.cpp | 57 | ||||
| -rw-r--r-- | Source/Plugins/Plugin_DSP_HLE/Src/ConfigDlg.h | 6 | ||||
| -rw-r--r-- | Source/Plugins/Plugin_DSP_LLE/Src/DSPConfigDlgLLE.cpp | 2 |
8 files changed, 166 insertions, 83 deletions
diff --git a/Source/Core/AudioCommon/Src/AudioCommonConfig.cpp b/Source/Core/AudioCommon/Src/AudioCommonConfig.cpp index c46a1edfbe..777fdbab95 100644 --- a/Source/Core/AudioCommon/Src/AudioCommonConfig.cpp +++ b/Source/Core/AudioCommon/Src/AudioCommonConfig.cpp @@ -1,32 +1,52 @@ -#include "AudioCommon.h" -AudioCommonConfig ac_Config; - -// Load from given file -void AudioCommonConfig::Load(IniFile &file) { - file.Get("Config", "EnableDTKMusic", &m_EnableDTKMusic, true); - file.Get("Config", "EnableThrottle", &m_EnableThrottle, true); -#ifdef _WIN32 - file.Get("Config", "Backend", &sBackend, "DSound"); -#elif defined(__APPLE__) - std::string temp; - file.Get("Config", "Backend", &temp, "AOSound"); - strncpy(sBackend, temp.c_str(), 128); -#else - file.Get("Config", "Backend", &sBackend, "AOSound"); -#endif -} - -// Set the values for the file -void AudioCommonConfig::Set(IniFile &file) { - file.Set("Config", "EnableDTKMusic", m_EnableDTKMusic); - file.Set("Config", "EnableThrottle", m_EnableThrottle); - file.Set("Config", "Backend", sBackend); -} - -// Update according to the values (stream/mixer) -void AudioCommonConfig::Update() { - if (soundStream) { - soundStream->GetMixer()->SetThrottle(m_EnableThrottle); - soundStream->GetMixer()->SetDTKMusic(m_EnableDTKMusic); - } -} +// Copyright (C) 2003-2009 Dolphin Project.
+
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, version 2.0.
+
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License 2.0 for more details.
+
+// A copy of the GPL 2.0 should have been included with the program.
+// If not, see http://www.gnu.org/licenses/
+
+// Official SVN repository and contact information can be found at
+// http://code.google.com/p/dolphin-emu/
+
+#include "AudioCommon.h"
+AudioCommonConfig ac_Config;
+
+// Load from given file
+void AudioCommonConfig::Load(IniFile &file) {
+ file.Get("Config", "EnableDTKMusic", &m_EnableDTKMusic, true);
+ file.Get("Config", "EnableThrottle", &m_EnableThrottle, true);
+ file.Get("Config", "Volume", &m_Volume, 0);
+#ifdef _WIN32
+ file.Get("Config", "Backend", &sBackend, "DSound");
+#elif defined(__APPLE__)
+ std::string temp;
+ file.Get("Config", "Backend", &temp, "AOSound");
+ strncpy(sBackend, temp.c_str(), 128);
+#else
+ file.Get("Config", "Backend", &sBackend, "AOSound");
+#endif
+}
+
+// Set the values for the file
+void AudioCommonConfig::Set(IniFile &file) {
+ file.Set("Config", "EnableDTKMusic", m_EnableDTKMusic);
+ file.Set("Config", "EnableThrottle", m_EnableThrottle);
+ file.Set("Config", "Backend", sBackend);
+ file.Set("Config", "Volume", m_Volume);
+}
+
+// Update according to the values (stream/mixer)
+void AudioCommonConfig::Update() {
+ if (soundStream) {
+ soundStream->GetMixer()->SetThrottle(m_EnableThrottle);
+ soundStream->GetMixer()->SetDTKMusic(m_EnableDTKMusic);
+ soundStream->SetVolume(m_Volume);
+ }
+}
diff --git a/Source/Core/AudioCommon/Src/AudioCommonConfig.h b/Source/Core/AudioCommon/Src/AudioCommonConfig.h index 19b0db90ef..53507325f9 100644 --- a/Source/Core/AudioCommon/Src/AudioCommonConfig.h +++ b/Source/Core/AudioCommon/Src/AudioCommonConfig.h @@ -1,32 +1,50 @@ -#ifndef _AUDIO_COMMON_CONFIG_H_ -#define _AUDIO_COMMON_CONFIG_H_ - -#include <string> -#include "IniFile.h" - -// Backend Types -#define BACKEND_DIRECTSOUND "DSound" -#define BACKEND_AOSOUND "AOSound" -#define BACKEND_OPENAL "OpenAL" -#define BACKEND_NULL "NullSound" -struct AudioCommonConfig -{ - bool m_EnableDTKMusic; - bool m_EnableThrottle; -#ifdef __APPLE__ - char sBackend[128]; -#else - std::string sBackend; -#endif - - // Load from given file - void Load(IniFile &file); - - // Set the values for the file - void Set(IniFile &file); - - // Update according to the values (stream/mixer) - void Update(); -}; - -#endif //AUDIO_COMMON_CONFIG +// Copyright (C) 2003-2009 Dolphin Project.
+
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, version 2.0.
+
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License 2.0 for more details.
+
+// A copy of the GPL 2.0 should have been included with the program.
+// If not, see http://www.gnu.org/licenses/
+
+// Official SVN repository and contact information can be found at
+// http://code.google.com/p/dolphin-emu/
+
+#ifndef _AUDIO_COMMON_CONFIG_H_
+#define _AUDIO_COMMON_CONFIG_H_
+
+#include <string>
+#include "IniFile.h"
+
+// Backend Types
+#define BACKEND_DIRECTSOUND "DSound"
+#define BACKEND_AOSOUND "AOSound"
+#define BACKEND_OPENAL "OpenAL"
+#define BACKEND_NULL "NullSound"
+struct AudioCommonConfig
+{
+ bool m_EnableDTKMusic;
+ bool m_EnableThrottle;
+ int m_Volume;
+#ifdef __APPLE__
+ char sBackend[128];
+#else
+ std::string sBackend;
+#endif
+
+ // Load from given file
+ void Load(IniFile &file);
+
+ // Set the values for the file
+ void Set(IniFile &file);
+
+ // Update according to the values (stream/mixer)
+ void Update();
+};
+
+#endif //AUDIO_COMMON_CONFIG
diff --git a/Source/Core/AudioCommon/Src/DSoundStream.cpp b/Source/Core/AudioCommon/Src/DSoundStream.cpp index 9ed4d592f4..94a26bd81b 100644 --- a/Source/Core/AudioCommon/Src/DSoundStream.cpp +++ b/Source/Core/AudioCommon/Src/DSoundStream.cpp @@ -16,6 +16,7 @@ // http://code.google.com/p/dolphin-emu/ #include <windows.h> +#include <cmath> #include <dxerr.h> #include "DSoundStream.h" @@ -40,7 +41,7 @@ bool DSound::CreateBuffer() // Fill out DSound buffer description. dsbdesc.dwSize = sizeof(DSBUFFERDESC); - dsbdesc.dwFlags = DSBCAPS_GETCURRENTPOSITION2 | DSBCAPS_STICKYFOCUS; + dsbdesc.dwFlags = DSBCAPS_GETCURRENTPOSITION2 | DSBCAPS_STICKYFOCUS | DSBCAPS_CTRLVOLUME; dsbdesc.dwBufferBytes = bufferSize = BUFSIZE; dsbdesc.lpwfxFormat = (WAVEFORMATEX *)&pcmwf; dsbdesc.guid3DAlgorithm = DS3DALG_DEFAULT; @@ -49,6 +50,7 @@ bool DSound::CreateBuffer() if (SUCCEEDED(res)) { dsBuffer->SetCurrentPosition(0); + dsBuffer->SetVolume(m_volume); return true; } else @@ -152,6 +154,17 @@ bool DSound::Start() return true; } +void DSound::SetVolume(int volume) +{ + // This is in "dBA attenuation" from 0 to -10000, logarithmic + m_volume = (int)floor(log10((float)volume) * 5000.0f) - 10000; + + soundCriticalSection.Enter(); + if (ds != NULL) + dsBuffer->SetVolume(m_volume); + soundCriticalSection.Leave(); +} + void DSound::Update() { soundSyncEvent.Set(); diff --git a/Source/Core/AudioCommon/Src/DSoundStream.h b/Source/Core/AudioCommon/Src/DSoundStream.h index b4668a9995..17f91d27d3 100644 --- a/Source/Core/AudioCommon/Src/DSoundStream.h +++ b/Source/Core/AudioCommon/Src/DSoundStream.h @@ -42,6 +42,7 @@ class DSound : public SoundStream int bufferSize; //i bytes int totalRenderedBytes; + int m_volume; // playback position int currentPos; @@ -73,6 +74,7 @@ public: virtual bool Start(); virtual void SoundLoop(); + virtual void SetVolume(int volume); virtual void Stop(); static bool isValid() { return true; } virtual bool usesMixer() const { return true; } diff --git a/Source/Core/AudioCommon/Src/SoundStream.h b/Source/Core/AudioCommon/Src/SoundStream.h index 5c642936bc..b0864e2aff 100644 --- a/Source/Core/AudioCommon/Src/SoundStream.h +++ b/Source/Core/AudioCommon/Src/SoundStream.h @@ -40,6 +40,7 @@ public: static bool isValid() { return false; } virtual CMixer *GetMixer() const { return m_mixer; } virtual bool Start() { return false; } + virtual void SetVolume(int) {} virtual void SoundLoop() {} virtual void Stop() {} virtual void Update() {} diff --git a/Source/Plugins/Plugin_DSP_HLE/Src/ConfigDlg.cpp b/Source/Plugins/Plugin_DSP_HLE/Src/ConfigDlg.cpp index fede3cd81d..4fea0e1a84 100644 --- a/Source/Plugins/Plugin_DSP_HLE/Src/ConfigDlg.cpp +++ b/Source/Plugins/Plugin_DSP_HLE/Src/ConfigDlg.cpp @@ -25,6 +25,7 @@ EVT_CHECKBOX(ID_ENABLE_HLE_AUDIO, ConfigDialog::SettingsChanged) EVT_CHECKBOX(ID_ENABLE_DTK_MUSIC, ConfigDialog::SettingsChanged) EVT_CHECKBOX(ID_ENABLE_THROTTLE, ConfigDialog::SettingsChanged) EVT_CHECKBOX(ID_ENABLE_RE0_FIX, ConfigDialog::SettingsChanged) +EVT_COMMAND_SCROLL(ID_VOLUME, ConfigDialog::VolumeChanged) END_EVENT_TABLE() ConfigDialog::ConfigDialog(wxWindow *parent, wxWindowID id, const wxString &title, const wxPoint &position, const wxSize& size, long style) @@ -45,7 +46,10 @@ ConfigDialog::ConfigDialog(wxWindow *parent, wxWindowID id, const wxString &titl m_buttonEnableThrottle = new wxCheckBox(this, ID_ENABLE_THROTTLE, wxT("Enable Other Audio (Throttle)"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator); m_buttonEnableRE0Fix = new wxCheckBox(this, ID_ENABLE_RE0_FIX, wxT("Enable RE0 Audio Fix"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator); wxStaticText *BackendText = new wxStaticText(this, wxID_ANY, wxT("Audio Backend"), wxDefaultPosition, wxDefaultSize, 0); - m_BackendSelection = new wxComboBox(this, ID_BACKEND, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxArrayBackends, wxCB_READONLY, wxDefaultValidator); + m_BackendSelection = new wxComboBox(this, ID_BACKEND, wxEmptyString, wxDefaultPosition, wxSize(90, 20), wxArrayBackends, wxCB_READONLY, wxDefaultValidator); + + m_volumeSlider = new wxSlider(this, ID_VOLUME, ac_Config.m_Volume, 1, 100, wxDefaultPosition, wxDefaultSize, wxSL_VERTICAL|wxSL_INVERSE); + m_volumeText = new wxStaticText(this, wxID_ANY, wxString::Format(wxT("%d %%"), ac_Config.m_Volume), wxDefaultPosition, wxDefaultSize, 0); // Update values m_buttonEnableHLEAudio->SetValue(g_Config.m_EnableHLEAudio ? true : false); @@ -62,56 +66,79 @@ ConfigDialog::ConfigDialog(wxWindow *parent, wxWindowID id, const wxString &titl m_buttonEnableRE0Fix->SetToolTip(wxT("This fixes audo in RE0 and maybe some other games.")); m_BackendSelection->SetToolTip(wxT("Changing this will have no effect while the emulator is running!")); + // Create sizer and add items to dialog wxBoxSizer *sMain = new wxBoxSizer(wxVERTICAL); + wxBoxSizer *sSettings = new wxBoxSizer(wxHORIZONTAL); + wxBoxSizer *sBackend = new wxBoxSizer(wxHORIZONTAL); + wxBoxSizer *sButtons = new wxBoxSizer(wxHORIZONTAL); + wxStaticBoxSizer *sbSettings = new wxStaticBoxSizer(wxVERTICAL, this, wxT("Sound Settings")); sbSettings->Add(m_buttonEnableHLEAudio, 0, wxALL, 5); sbSettings->Add(m_buttonEnableDTKMusic, 0, wxALL, 5); sbSettings->Add(m_buttonEnableThrottle, 0, wxALL, 5); sbSettings->Add(m_buttonEnableRE0Fix, 0, wxALL, 5); - wxBoxSizer *sBackend = new wxBoxSizer(wxHORIZONTAL); - sBackend->Add(BackendText, 0, wxALIGN_CENTRE_VERTICAL|wxALL, 5); - sBackend->Add(m_BackendSelection); - sbSettings->Add(sBackend); - - sMain->Add(sbSettings, 0, wxEXPAND|wxALL, 5); - wxBoxSizer *sButtons = new wxBoxSizer(wxHORIZONTAL); - sButtons->Add(150, 0); // Lazy way to make the dialog as wide as we want it - sButtons->Add(m_OK, 0, wxALL, 5); - sMain->Add(sButtons, 0, wxEXPAND); - this->SetSizerAndFit(sMain); + sBackend->Add(BackendText, 0, wxALIGN_CENTER|wxALL, 5); + sBackend->Add(m_BackendSelection, 0, wxALL, 1); + sbSettings->Add(sBackend, 0, wxALL, 2); + + wxStaticBoxSizer *sbSettingsV = new wxStaticBoxSizer(wxVERTICAL, this, wxT("Volume")); + sbSettingsV->Add(m_volumeSlider, 0, wxLEFT|wxRIGHT|wxALIGN_CENTER, 6); + sbSettingsV->Add(m_volumeText, 0, wxALL|wxALIGN_LEFT, 4); + + sSettings->Add(sbSettings, 0, wxALL|wxEXPAND, 4); + sSettings->Add(sbSettingsV, 0, wxALL|wxEXPAND, 4); + sMain->Add(sSettings, 0, wxALL|wxEXPAND, 4); + + sButtons->AddStretchSpacer(); + sButtons->Add(m_OK, 0, wxALL, 1); + sMain->Add(sButtons, 0, wxALL|wxEXPAND, 4); + SetSizerAndFit(sMain); } // Add audio output options void ConfigDialog::AddBackend(const char* backend) { + // Update values m_BackendSelection->Append(wxString::FromAscii(backend)); - // Update value #ifdef __APPLE__ m_BackendSelection->SetValue(wxString::FromAscii(ac_Config.sBackend)); #else m_BackendSelection->SetValue(wxString::FromAscii(ac_Config.sBackend.c_str())); #endif + + // Unfortunately, DSound is the only API having a volume setting... +#ifndef _WIN32 + m_volumeSlider->Disable(); + m_volumeText->Disable(); +#endif } ConfigDialog::~ConfigDialog() { } +void ConfigDialog::VolumeChanged(wxScrollEvent& WXUNUSED(event)) +{ + ac_Config.m_Volume = m_volumeSlider->GetValue(); + ac_Config.Update(); + + m_volumeText->SetLabel(wxString::Format(wxT("%d %%"), m_volumeSlider->GetValue())); +} + void ConfigDialog::SettingsChanged(wxCommandEvent& event) { g_Config.m_EnableHLEAudio = m_buttonEnableHLEAudio->GetValue(); g_Config.m_EnableRE0Fix = m_buttonEnableRE0Fix->GetValue(); ac_Config.m_EnableDTKMusic = m_buttonEnableDTKMusic->GetValue(); ac_Config.m_EnableThrottle = m_buttonEnableThrottle->GetValue(); - if (soundStream != NULL) - soundStream->GetMixer()->SetThrottle(ac_Config.m_EnableThrottle); #ifdef __APPLE__ strncpy(ac_Config.sBackend, m_BackendSelection->GetValue().mb_str(), 128); #else ac_Config.sBackend = m_BackendSelection->GetValue().mb_str(); #endif + ac_Config.Update(); g_Config.Save(); if (event.GetId() == wxID_OK) diff --git a/Source/Plugins/Plugin_DSP_HLE/Src/ConfigDlg.h b/Source/Plugins/Plugin_DSP_HLE/Src/ConfigDlg.h index 1a1675f6a0..1cb54a237d 100644 --- a/Source/Plugins/Plugin_DSP_HLE/Src/ConfigDlg.h +++ b/Source/Plugins/Plugin_DSP_HLE/Src/ConfigDlg.h @@ -39,6 +39,8 @@ public: private: DECLARE_EVENT_TABLE(); + wxSlider *m_volumeSlider; + wxStaticText *m_volumeText; wxButton *m_OK; wxCheckBox *m_buttonEnableHLEAudio; wxCheckBox *m_buttonEnableDTKMusic; @@ -54,11 +56,13 @@ private: ID_ENABLE_DTK_MUSIC, ID_ENABLE_THROTTLE, ID_ENABLE_RE0_FIX, - ID_BACKEND + ID_BACKEND, + ID_VOLUME }; void OnOK(wxCommandEvent& event); void SettingsChanged(wxCommandEvent& event); + void VolumeChanged(wxScrollEvent& event); }; #endif //__DSP_HLE_CONFIGDIALOG_h__ diff --git a/Source/Plugins/Plugin_DSP_LLE/Src/DSPConfigDlgLLE.cpp b/Source/Plugins/Plugin_DSP_LLE/Src/DSPConfigDlgLLE.cpp index 6f75879ed0..43377c59ad 100644 --- a/Source/Plugins/Plugin_DSP_LLE/Src/DSPConfigDlgLLE.cpp +++ b/Source/Plugins/Plugin_DSP_LLE/Src/DSPConfigDlgLLE.cpp @@ -91,8 +91,6 @@ void DSPConfigDialogLLE::SettingsChanged(wxCommandEvent& event) { ac_Config.m_EnableDTKMusic = m_buttonEnableDTKMusic->GetValue(); ac_Config.m_EnableThrottle = m_buttonEnableThrottle->GetValue(); - if (soundStream != NULL) - soundStream->GetMixer()->SetThrottle(ac_Config.m_EnableThrottle); #ifdef __APPLE__ strncpy(ac_Config.sBackend, m_BackendSelection->GetValue().mb_str(), 128); |
