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:
nakeee 2009-03-30 09:55:50 +00:00
parent 5987dbf7ba
commit 37d513c53b
19 changed files with 133 additions and 69 deletions

View file

@ -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"
>

View file

@ -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;
}

View file

@ -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_

View file

@ -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);
}
}

View file

@ -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

View file

@ -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();

View file

@ -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;

View file

@ -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',
]

View file

@ -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");
}

View file

@ -23,10 +23,7 @@
struct CConfig
{
bool m_EnableHLEAudio;
bool m_EnableDTKMusic;
bool m_EnableThrottle;
std::string sBackend;
CConfig();
void Load();

View file

@ -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)

View file

@ -22,6 +22,7 @@
#include <wx/dialog.h>
#include <wx/button.h>
#include <wx/statbox.h>
#include "AudioCommon.h"
class ConfigDialog : public wxDialog
{

View file

@ -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);
}

View file

@ -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()

View file

@ -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);
}

View file

@ -21,12 +21,7 @@
#include <string>
struct CConfig
{
bool m_EnableHLEAudio;
bool m_EnableDTKMusic;
bool m_EnableThrottle;
std::string sBackend;
{
CConfig();
void Load();

View file

@ -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);

View file

@ -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
};

View file

@ -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()