Added dtk sound mixing to audiocommon (should work with LLE now)
And also moved all common setting to audiocommonconfig git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@2796 8ced0084-cf51-0410-be5f-012b33b47a6e
This commit is contained in:
parent
5987dbf7ba
commit
37d513c53b
|
@ -453,6 +453,14 @@
|
|||
RelativePath=".\Src\AudioCommon.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\Src\AudioCommonConfig.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\Src\AudioCommonConfig.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\Src\Mixer.cpp"
|
||||
>
|
||||
|
|
|
@ -24,19 +24,28 @@
|
|||
|
||||
namespace AudioCommon
|
||||
{
|
||||
SoundStream *InitSoundStream(std::string backend, CMixer *mixer)
|
||||
SoundStream *InitSoundStream(CMixer *mixer)
|
||||
{
|
||||
if (!mixer)
|
||||
mixer = new CMixer();
|
||||
|
||||
std::string backend = ac_Config.sBackend;
|
||||
if (backend == BACKEND_DIRECTSOUND && DSound::isValid()) soundStream = new DSound(mixer, g_dspInitialize.hWnd);
|
||||
if (backend == BACKEND_AOSOUND && AOSound::isValid()) soundStream = new AOSound(mixer);
|
||||
if (backend == BACKEND_OPENAL && OpenALStream::isValid()) soundStream = new OpenALStream(mixer);
|
||||
if (backend == BACKEND_NULL && NullSound::isValid()) soundStream = new NullSound(mixer);
|
||||
|
||||
if (soundStream != NULL) {
|
||||
if (soundStream->Start())
|
||||
ac_Config.Update();
|
||||
if (soundStream->Start()) {
|
||||
// Start the sound recording
|
||||
/*
|
||||
if (ac_Config.record) {
|
||||
soundStream->StartLogAudio(FULL_DUMP_DIR g_Config.recordFile);
|
||||
}
|
||||
*/
|
||||
|
||||
return soundStream;
|
||||
}
|
||||
PanicAlert("Could not initialize backend %s, falling back to NULL", backend.c_str());
|
||||
}
|
||||
|
||||
|
@ -45,7 +54,7 @@ namespace AudioCommon
|
|||
delete soundStream;
|
||||
soundStream = new NullSound(mixer);
|
||||
soundStream->Start();
|
||||
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
|
|
@ -19,25 +19,22 @@
|
|||
#define _AUDIO_COMMON_H_
|
||||
|
||||
#include "Common.h"
|
||||
#include "AudioCommonConfig.h"
|
||||
#include "../../../PluginSpecs/pluginspecs_dsp.h"
|
||||
#include "SoundStream.h"
|
||||
|
||||
|
||||
class CMixer;
|
||||
|
||||
extern DSPInitialize g_dspInitialize;
|
||||
extern SoundStream *soundStream;
|
||||
extern AudioCommonConfig ac_Config;
|
||||
|
||||
namespace AudioCommon
|
||||
{
|
||||
SoundStream *InitSoundStream(std::string backend, CMixer *mixer = NULL);
|
||||
SoundStream *InitSoundStream(CMixer *mixer = NULL);
|
||||
void ShutdownSoundStream();
|
||||
std::vector<std::string> GetSoundBackends();
|
||||
|
||||
// Backend Types
|
||||
#define BACKEND_DIRECTSOUND "DSound"
|
||||
#define BACKEND_AOSOUND "AOSound"
|
||||
#define BACKEND_OPENAL "OpenAL"
|
||||
#define BACKEND_NULL "NullSound"
|
||||
}
|
||||
|
||||
#endif // _AUDIO_COMMON_H_
|
||||
|
|
|
@ -0,0 +1,29 @@
|
|||
#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");
|
||||
#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.c_str());
|
||||
}
|
||||
|
||||
// Update according to the values (stream/mixer)
|
||||
void AudioCommonConfig::Update() {
|
||||
if (soundStream) {
|
||||
soundStream->GetMixer()->SetThrottle(m_EnableThrottle);
|
||||
soundStream->GetMixer()->SetDTKMusic(m_EnableDTKMusic);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,29 @@
|
|||
#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;
|
||||
std::string sBackend;
|
||||
|
||||
// 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
|
|
@ -39,6 +39,11 @@ void CMixer::Mix(short *samples, int numSamples)
|
|||
return;
|
||||
}
|
||||
|
||||
// first get the DTK Music
|
||||
if (m_EnableDTKMusic) {
|
||||
g_dspInitialize.pGetAudioStreaming(samples, numSamples);
|
||||
}
|
||||
|
||||
Premix(samples, numSamples);
|
||||
|
||||
push_sync.Enter();
|
||||
|
|
|
@ -41,6 +41,7 @@ public:
|
|||
int GetSampleRate() {return m_sampleRate;}
|
||||
|
||||
void SetThrottle(bool use) { m_throttle = use;}
|
||||
void SetDTKMusic(bool use) { m_EnableDTKMusic = use;}
|
||||
|
||||
// TODO: do we need this
|
||||
bool IsHLEReady() { return m_HLEready;}
|
||||
|
@ -56,6 +57,7 @@ protected:
|
|||
bool m_HLEready;
|
||||
int m_queueSize;
|
||||
|
||||
bool m_EnableDTKMusic;
|
||||
bool m_throttle;
|
||||
private:
|
||||
Common::CriticalSection push_sync;
|
||||
|
|
|
@ -3,9 +3,10 @@
|
|||
Import('env')
|
||||
|
||||
files = [
|
||||
'AOSoundStream.cpp',
|
||||
'OpenALStream.cpp',
|
||||
'WaveFile.cpp',
|
||||
'AOSoundStream.cpp',
|
||||
'AudioCommonConfig.cpp',
|
||||
'OpenALStream.cpp',
|
||||
'WaveFile.cpp',
|
||||
'Mixer.cpp',
|
||||
'AudioCommon.cpp',
|
||||
]
|
||||
|
|
|
@ -18,6 +18,7 @@
|
|||
#include "Common.h"
|
||||
#include "IniFile.h"
|
||||
#include "Config.h"
|
||||
#include "AudioCommon.h"
|
||||
|
||||
CConfig g_Config;
|
||||
|
||||
|
@ -34,13 +35,7 @@ void CConfig::Load()
|
|||
IniFile file;
|
||||
file.Load(FULL_CONFIG_DIR "DSP.ini");
|
||||
file.Get("Config", "EnableHLEAudio", &m_EnableHLEAudio, true); // Sound Settings
|
||||
file.Get("Config", "EnableDTKMusic", &m_EnableDTKMusic, true);
|
||||
file.Get("Config", "EnableThrottle", &m_EnableThrottle, true);
|
||||
#ifdef _WIN32
|
||||
file.Get("Config", "Backend", &sBackend, "DSound");
|
||||
#else
|
||||
file.Get("Config", "Backend", &sBackend, "AOSound");
|
||||
#endif
|
||||
ac_Config.Load(file);
|
||||
}
|
||||
|
||||
void CConfig::Save()
|
||||
|
@ -48,9 +43,7 @@ void CConfig::Save()
|
|||
IniFile file;
|
||||
file.Load(FULL_CONFIG_DIR "DSP.ini");
|
||||
file.Set("Config", "EnableHLEAudio", m_EnableHLEAudio); // Sound Settings
|
||||
file.Set("Config", "EnableDTKMusic", m_EnableDTKMusic);
|
||||
file.Set("Config", "EnableThrottle", m_EnableThrottle);
|
||||
file.Set("Config", "Backend", sBackend.c_str());
|
||||
|
||||
ac_Config.Set(file);
|
||||
|
||||
file.Save(FULL_CONFIG_DIR "DSP.ini");
|
||||
}
|
||||
|
|
|
@ -23,10 +23,7 @@
|
|||
struct CConfig
|
||||
{
|
||||
bool m_EnableHLEAudio;
|
||||
bool m_EnableDTKMusic;
|
||||
bool m_EnableThrottle;
|
||||
std::string sBackend;
|
||||
|
||||
|
||||
CConfig();
|
||||
|
||||
void Load();
|
||||
|
|
|
@ -46,8 +46,8 @@ ConfigDialog::ConfigDialog(wxWindow *parent, wxWindowID id, const wxString &titl
|
|||
|
||||
// Update values
|
||||
m_buttonEnableHLEAudio->SetValue(g_Config.m_EnableHLEAudio ? true : false);
|
||||
m_buttonEnableDTKMusic->SetValue(g_Config.m_EnableDTKMusic ? true : false);
|
||||
m_buttonEnableThrottle->SetValue(g_Config.m_EnableThrottle ? true : false);
|
||||
m_buttonEnableDTKMusic->SetValue(ac_Config.m_EnableDTKMusic ? true : false);
|
||||
m_buttonEnableThrottle->SetValue(ac_Config.m_EnableThrottle ? true : false);
|
||||
|
||||
// Add tooltips
|
||||
m_buttonEnableHLEAudio->SetToolTip(wxT("This is the most common sound type"));
|
||||
|
@ -81,7 +81,7 @@ void ConfigDialog::AddBackend(const char* backend)
|
|||
{
|
||||
m_BackendSelection->Append(wxString::FromAscii(backend));
|
||||
// Update value
|
||||
m_BackendSelection->SetValue(wxString::FromAscii(g_Config.sBackend.c_str()));
|
||||
m_BackendSelection->SetValue(wxString::FromAscii(ac_Config.sBackend.c_str()));
|
||||
}
|
||||
|
||||
ConfigDialog::~ConfigDialog()
|
||||
|
@ -91,9 +91,9 @@ ConfigDialog::~ConfigDialog()
|
|||
void ConfigDialog::SettingsChanged(wxCommandEvent& event)
|
||||
{
|
||||
g_Config.m_EnableHLEAudio = m_buttonEnableHLEAudio->GetValue();
|
||||
g_Config.m_EnableDTKMusic = m_buttonEnableDTKMusic->GetValue();
|
||||
g_Config.m_EnableThrottle = m_buttonEnableThrottle->GetValue();
|
||||
g_Config.sBackend = m_BackendSelection->GetValue().mb_str();
|
||||
ac_Config.m_EnableDTKMusic = m_buttonEnableDTKMusic->GetValue();
|
||||
ac_Config.m_EnableThrottle = m_buttonEnableThrottle->GetValue();
|
||||
ac_Config.sBackend = m_BackendSelection->GetValue().mb_str();
|
||||
g_Config.Save();
|
||||
|
||||
if (event.GetId() == wxID_OK)
|
||||
|
|
|
@ -22,6 +22,7 @@
|
|||
#include <wx/dialog.h>
|
||||
#include <wx/button.h>
|
||||
#include <wx/statbox.h>
|
||||
#include "AudioCommon.h"
|
||||
|
||||
class ConfigDialog : public wxDialog
|
||||
{
|
||||
|
|
|
@ -15,9 +15,9 @@ void HLEMixer::MixUCode(short *samples, int numSamples) {
|
|||
void HLEMixer::Premix(short *samples, int numSamples) {
|
||||
|
||||
// first get the DTK Music
|
||||
if (g_Config.m_EnableDTKMusic) {
|
||||
g_dspInitialize.pGetAudioStreaming(samples, numSamples);
|
||||
}
|
||||
// if (g_Config.m_EnableDTKMusic) {
|
||||
// g_dspInitialize.pGetAudioStreaming(samples, numSamples);
|
||||
// }
|
||||
|
||||
MixUCode(samples, numSamples);
|
||||
}
|
||||
|
|
|
@ -194,16 +194,8 @@ void Initialize(void *init)
|
|||
|
||||
CDSPHandler::CreateInstance();
|
||||
|
||||
soundStream = AudioCommon::InitSoundStream(g_Config.sBackend,
|
||||
new HLEMixer());
|
||||
soundStream->GetMixer()->SetThrottle(g_Config.m_EnableThrottle);
|
||||
soundStream = AudioCommon::InitSoundStream(new HLEMixer());
|
||||
|
||||
// Start the sound recording
|
||||
/*
|
||||
if (g_Config.record) {
|
||||
soundStream->StartLogAudio(FULL_DUMP_DIR g_Config.recordFile);
|
||||
}
|
||||
*/
|
||||
}
|
||||
|
||||
void DSP_StopSoundStream()
|
||||
|
|
|
@ -18,6 +18,8 @@
|
|||
#include "Common.h"
|
||||
#include "IniFile.h"
|
||||
#include "Config.h"
|
||||
#include "AudioCommon.h"
|
||||
|
||||
#define LLE_CONFIG_FILE "DSPLLE.ini"
|
||||
|
||||
CConfig g_Config;
|
||||
|
@ -34,20 +36,14 @@ void CConfig::Load()
|
|||
|
||||
IniFile file;
|
||||
file.Load(FULL_CONFIG_DIR LLE_CONFIG_FILE);
|
||||
file.Get("Config", "EnableThrottle", &m_EnableThrottle, true);
|
||||
#ifdef _WIN32
|
||||
file.Get("Config", "Backend", &sBackend, "DSound");
|
||||
#else
|
||||
file.Get("Config", "Backend", &sBackend, "AOSound");
|
||||
#endif
|
||||
ac_Config.Load(file);
|
||||
}
|
||||
|
||||
void CConfig::Save()
|
||||
{
|
||||
IniFile file;
|
||||
file.Load(FULL_CONFIG_DIR LLE_CONFIG_FILE);
|
||||
file.Set("Config", "EnableThrottle", m_EnableThrottle);
|
||||
file.Set("Config", "Backend", sBackend.c_str());
|
||||
|
||||
ac_Config.Set(file);
|
||||
|
||||
file.Save(FULL_CONFIG_DIR LLE_CONFIG_FILE);
|
||||
}
|
||||
|
|
|
@ -21,12 +21,7 @@
|
|||
#include <string>
|
||||
|
||||
struct CConfig
|
||||
{
|
||||
bool m_EnableHLEAudio;
|
||||
bool m_EnableDTKMusic;
|
||||
bool m_EnableThrottle;
|
||||
std::string sBackend;
|
||||
|
||||
{
|
||||
CConfig();
|
||||
|
||||
void Load();
|
||||
|
|
|
@ -21,6 +21,7 @@
|
|||
|
||||
BEGIN_EVENT_TABLE(DSPConfigDialogLLE, wxDialog)
|
||||
EVT_BUTTON(wxID_OK, DSPConfigDialogLLE::SettingsChanged)
|
||||
EVT_CHECKBOX(ID_ENABLE_DTK_MUSIC, DSPConfigDialogLLE::SettingsChanged)
|
||||
EVT_CHECKBOX(ID_ENABLE_THROTTLE, DSPConfigDialogLLE::SettingsChanged)
|
||||
END_EVENT_TABLE()
|
||||
|
||||
|
@ -36,14 +37,17 @@ DSPConfigDialogLLE::DSPConfigDialogLLE(wxWindow *parent, wxWindowID id, const wx
|
|||
m_OK = new wxButton(this, wxID_OK, wxT("OK"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator);
|
||||
|
||||
// Create items
|
||||
m_buttonEnableDTKMusic = new wxCheckBox(this, ID_ENABLE_DTK_MUSIC, wxT("Enable DTK Music"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator);
|
||||
m_buttonEnableThrottle = new wxCheckBox(this, ID_ENABLE_THROTTLE, wxT("Enable Other Audio (Throttle)"), 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);
|
||||
|
||||
// Update values
|
||||
m_buttonEnableThrottle->SetValue(g_Config.m_EnableThrottle ? true : false);
|
||||
m_buttonEnableDTKMusic->SetValue(ac_Config.m_EnableDTKMusic ? true : false);
|
||||
m_buttonEnableThrottle->SetValue(ac_Config.m_EnableThrottle ? true : false);
|
||||
|
||||
// Add tooltips
|
||||
m_buttonEnableDTKMusic->SetToolTip(wxT("This is sometimes used to play music tracks from the disc"));
|
||||
m_buttonEnableThrottle->SetToolTip(wxT("This is sometimes used together with pre-rendered movies.\n"
|
||||
"Disabling this also disables the speed throttle which this causes,\n"
|
||||
"meaning that there will be no upper limit on your FPS."));
|
||||
|
@ -52,6 +56,7 @@ DSPConfigDialogLLE::DSPConfigDialogLLE(wxWindow *parent, wxWindowID id, const wx
|
|||
// Create sizer and add items to dialog
|
||||
wxBoxSizer *sMain = new wxBoxSizer(wxVERTICAL);
|
||||
wxStaticBoxSizer *sbSettings = new wxStaticBoxSizer(wxVERTICAL, this, wxT("Sound Settings"));
|
||||
sbSettings->Add(m_buttonEnableDTKMusic, 0, wxALL, 5);
|
||||
sbSettings->Add(m_buttonEnableThrottle, 0, wxALL, 5);
|
||||
wxBoxSizer *sBackend = new wxBoxSizer(wxHORIZONTAL);
|
||||
sBackend->Add(BackendText, 0, wxALIGN_CENTRE_VERTICAL|wxALL, 5);
|
||||
|
@ -71,7 +76,7 @@ void DSPConfigDialogLLE::AddBackend(const char* backend)
|
|||
{
|
||||
m_BackendSelection->Append(wxString::FromAscii(backend));
|
||||
// Update value
|
||||
m_BackendSelection->SetValue(wxString::FromAscii(g_Config.sBackend.c_str()));
|
||||
m_BackendSelection->SetValue(wxString::FromAscii(ac_Config.sBackend.c_str()));
|
||||
}
|
||||
|
||||
DSPConfigDialogLLE::~DSPConfigDialogLLE()
|
||||
|
@ -80,9 +85,12 @@ DSPConfigDialogLLE::~DSPConfigDialogLLE()
|
|||
|
||||
void DSPConfigDialogLLE::SettingsChanged(wxCommandEvent& event)
|
||||
{
|
||||
g_Config.m_EnableThrottle = m_buttonEnableThrottle->GetValue();
|
||||
g_Config.sBackend = m_BackendSelection->GetValue().mb_str();
|
||||
ac_Config.m_EnableDTKMusic = m_buttonEnableDTKMusic->GetValue();
|
||||
ac_Config.m_EnableThrottle = m_buttonEnableThrottle->GetValue();
|
||||
ac_Config.sBackend = m_BackendSelection->GetValue().mb_str();
|
||||
ac_Config.Update();
|
||||
g_Config.Save();
|
||||
|
||||
|
||||
if (event.GetId() == wxID_OK)
|
||||
EndModal(wxID_OK);
|
||||
|
|
|
@ -22,6 +22,7 @@
|
|||
#include <wx/dialog.h>
|
||||
#include <wx/button.h>
|
||||
#include <wx/statbox.h>
|
||||
#include "AudioCommon.h"
|
||||
|
||||
class DSPConfigDialogLLE : public wxDialog
|
||||
{
|
||||
|
@ -39,6 +40,7 @@ private:
|
|||
DECLARE_EVENT_TABLE();
|
||||
|
||||
wxButton *m_OK;
|
||||
wxCheckBox *m_buttonEnableDTKMusic;
|
||||
wxCheckBox *m_buttonEnableThrottle;
|
||||
wxArrayString wxArrayBackends;
|
||||
wxComboBox *m_BackendSelection;
|
||||
|
@ -46,6 +48,7 @@ private:
|
|||
enum
|
||||
{
|
||||
wxID_OK,
|
||||
ID_ENABLE_DTK_MUSIC,
|
||||
ID_ENABLE_THROTTLE,
|
||||
ID_BACKEND
|
||||
};
|
||||
|
|
|
@ -201,6 +201,7 @@ void Initialize(void *init)
|
|||
bCanWork = true;
|
||||
g_dspInitialize = *(DSPInitialize*)init;
|
||||
|
||||
g_Config.Load();
|
||||
gdsp_init();
|
||||
g_dsp.step_counter = 0;
|
||||
g_dsp.cpu_ram = g_dspInitialize.pGetMemoryPointer(0);
|
||||
|
@ -224,9 +225,7 @@ void Initialize(void *init)
|
|||
|
||||
g_hDSPThread = new Common::Thread(dsp_thread, NULL);
|
||||
|
||||
soundStream = AudioCommon::InitSoundStream(g_Config.sBackend);
|
||||
|
||||
soundStream->GetMixer()->SetThrottle(g_Config.m_EnableThrottle);
|
||||
soundStream = AudioCommon::InitSoundStream();
|
||||
}
|
||||
|
||||
void DSP_StopSoundStream()
|
||||
|
|
Loading…
Reference in New Issue