more clean up, starting to add recording support to sound stream

git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@2762 8ced0084-cf51-0410-be5f-012b33b47a6e
This commit is contained in:
nakeee
2009-03-27 14:26:44 +00:00
parent 542bd73ba8
commit a0e9e53d0c
5 changed files with 82 additions and 92 deletions

View File

@ -48,4 +48,34 @@ SoundStream *InitSoundStream(std::string backend, CMixer *mixer) {
return soundStream;
}
void ShutdownSoundStream() {
NOTICE_LOG(DSPHLE, "Shutting down sound stream");
if (soundStream) {
soundStream->Stop();
soundStream->StopLogAudio();
delete soundStream;
soundStream = NULL;
}
// Check that soundstream already is stopped.
while (soundStream) {
ERROR_LOG(DSPHLE, "Waiting for sound stream");
Common::SleepCurrentThread(2000);
}
INFO_LOG(DSPHLE, "Done shutting down sound stream");
}
std::vector<std::string> GetSoundBackends() {
std::vector<std::string> backends;
// Add avaliable output options
if (DSound::isValid())
backends.push_back("DSound");
if (AOSound::isValid())
backends.push_back("AOSound");
backends.push_back("NullSound");
return backends;
}
} // Namespace

View File

@ -13,6 +13,8 @@ extern SoundStream *soundStream;
namespace AudioCommon {
SoundStream *InitSoundStream(std::string backend, CMixer *mixer = NULL);
void ShutdownSoundStream();
std::vector<std::string> GetSoundBackends();
} // Namespace
#endif // AUDIO_COMMON

View File

@ -20,6 +20,7 @@
#include "Common.h"
#include "Mixer.h"
#include "WaveFile.h"
class SoundStream
{
@ -29,7 +30,9 @@ protected:
// We set this to shut down the sound thread.
// 0=keep playing, 1=stop playing NOW.
volatile int threadData;
bool m_logAudio;
WaveFileWriter g_wave_writer;
public:
SoundStream(CMixer *mixer) : m_mixer(mixer), threadData(0) {}
virtual ~SoundStream() { delete m_mixer;}
@ -40,6 +43,26 @@ public:
virtual void SoundLoop() {}
virtual void Stop() {}
virtual void Update() {}
virtual void StartLogAudio(const char *filename) {
if (! m_logAudio) {
m_logAudio = true;
g_wave_writer.Start(filename);
g_wave_writer.SetSkipSilence(false);
NOTICE_LOG(DSPHLE, "Starting Audio logging");
} else {
WARN_LOG(DSPHLE, "Audio logging already started");
}
}
virtual void StopLogAudio() {
if (m_logAudio) {
m_logAudio = false;
g_wave_writer.Stop();
NOTICE_LOG(DSPHLE, "Starting Audio logging");
} else {
WARN_LOG(DSPHLE, "Audio logging already stopped");
}
}
};
#endif