summaryrefslogtreecommitdiff
path: root/Source/Core
diff options
context:
space:
mode:
authorChris Burgener <christhecoolist@gmail.com>2016-06-11 18:52:45 -0400
committerChris Burgener <christhecoolist@gmail.com>2016-06-24 21:12:15 -0400
commitca2eaac704ba223c5d38bd0e2511e892d7db302a (patch)
treed8e268de26157cacf1deb753058ee708c6485a33 /Source/Core
parentcbd6fda5e33008f9889b35be6c508d3d37bc4731 (diff)
Split Audio Dumps on Sample Rate Changes
Diffstat (limited to 'Source/Core')
-rw-r--r--Source/Core/AudioCommon/Mixer.cpp15
-rw-r--r--Source/Core/AudioCommon/Mixer.h1
-rw-r--r--Source/Core/AudioCommon/WaveFile.cpp26
-rw-r--r--Source/Core/AudioCommon/WaveFile.h8
4 files changed, 42 insertions, 8 deletions
diff --git a/Source/Core/AudioCommon/Mixer.cpp b/Source/Core/AudioCommon/Mixer.cpp
index 66a47b2141..1246cfb489 100644
--- a/Source/Core/AudioCommon/Mixer.cpp
+++ b/Source/Core/AudioCommon/Mixer.cpp
@@ -158,15 +158,17 @@ void CMixer::MixerFifo::PushSamples(const short* samples, unsigned int num_sampl
void CMixer::PushSamples(const short* samples, unsigned int num_samples)
{
m_dma_mixer.PushSamples(samples, num_samples);
+ int sample_rate = m_dma_mixer.GetInputSampleRate();
if (m_log_dsp_audio)
- m_wave_writer_dsp.AddStereoSamplesBE(samples, num_samples);
+ m_wave_writer_dsp.AddStereoSamplesBE(samples, num_samples, sample_rate);
}
void CMixer::PushStreamingSamples(const short* samples, unsigned int num_samples)
{
m_streaming_mixer.PushSamples(samples, num_samples);
+ int sample_rate = m_streaming_mixer.GetInputSampleRate();
if (m_log_dtk_audio)
- m_wave_writer_dtk.AddStereoSamplesBE(samples, num_samples);
+ m_wave_writer_dtk.AddStereoSamplesBE(samples, num_samples, sample_rate);
}
void CMixer::PushWiimoteSpeakerSamples(const short* samples, unsigned int num_samples,
@@ -213,7 +215,7 @@ void CMixer::StartLogDTKAudio(const std::string& filename)
if (!m_log_dtk_audio)
{
m_log_dtk_audio = true;
- m_wave_writer_dtk.Start(filename, 48000);
+ m_wave_writer_dtk.Start(filename, m_streaming_mixer.GetInputSampleRate());
m_wave_writer_dtk.SetSkipSilence(false);
NOTICE_LOG(AUDIO, "Starting DTK Audio logging");
}
@@ -242,7 +244,7 @@ void CMixer::StartLogDSPAudio(const std::string& filename)
if (!m_log_dsp_audio)
{
m_log_dsp_audio = true;
- m_wave_writer_dsp.Start(filename, 32000);
+ m_wave_writer_dsp.Start(filename, m_dma_mixer.GetInputSampleRate());
m_wave_writer_dsp.SetSkipSilence(false);
NOTICE_LOG(AUDIO, "Starting DSP Audio logging");
}
@@ -271,6 +273,11 @@ void CMixer::MixerFifo::SetInputSampleRate(unsigned int rate)
m_input_sample_rate = rate;
}
+unsigned int CMixer::MixerFifo::GetInputSampleRate() const
+{
+ return m_input_sample_rate;
+}
+
void CMixer::MixerFifo::SetVolume(unsigned int lvolume, unsigned int rvolume)
{
m_LVolume.store(lvolume + (lvolume >> 7));
diff --git a/Source/Core/AudioCommon/Mixer.h b/Source/Core/AudioCommon/Mixer.h
index ea8666fbc7..dd879462ab 100644
--- a/Source/Core/AudioCommon/Mixer.h
+++ b/Source/Core/AudioCommon/Mixer.h
@@ -55,6 +55,7 @@ private:
void PushSamples(const short* samples, unsigned int num_samples);
unsigned int Mix(short* samples, unsigned int numSamples, bool consider_framelimit = true);
void SetInputSampleRate(unsigned int rate);
+ unsigned int GetInputSampleRate() const;
void SetVolume(unsigned int lvolume, unsigned int rvolume);
private:
diff --git a/Source/Core/AudioCommon/WaveFile.cpp b/Source/Core/AudioCommon/WaveFile.cpp
index 96463158b7..3fb073f777 100644
--- a/Source/Core/AudioCommon/WaveFile.cpp
+++ b/Source/Core/AudioCommon/WaveFile.cpp
@@ -41,6 +41,11 @@ bool WaveFileWriter::Start(const std::string& filename, unsigned int HLESampleRa
audio_size = 0;
+ if (basename.empty())
+ SplitPath(filename, nullptr, &basename, nullptr);
+
+ current_sample_rate = HLESampleRate;
+
// -----------------
// Write file header
// -----------------
@@ -89,7 +94,7 @@ void WaveFileWriter::Write4(const char* ptr)
file.WriteBytes(ptr, 4);
}
-void WaveFileWriter::AddStereoSamples(const short* sample_data, u32 count)
+void WaveFileWriter::AddStereoSamples(const short* sample_data, u32 count, int sample_rate)
{
if (!file)
PanicAlertT("WaveFileWriter - file not open.");
@@ -108,11 +113,13 @@ void WaveFileWriter::AddStereoSamples(const short* sample_data, u32 count)
return;
}
+ CheckSampleRate(sample_rate);
+
file.WriteBytes(sample_data, count * 4);
audio_size += count * 4;
}
-void WaveFileWriter::AddStereoSamplesBE(const short* sample_data, u32 count)
+void WaveFileWriter::AddStereoSamplesBE(const short* sample_data, u32 count, int sample_rate)
{
if (!file)
PanicAlertT("WaveFileWriter - file not open.");
@@ -141,6 +148,21 @@ void WaveFileWriter::AddStereoSamplesBE(const short* sample_data, u32 count)
conv_buffer[2 * i + 1] = Common::swap16((u16)sample_data[2 * i]);
}
+ CheckSampleRate(sample_rate);
+
file.WriteBytes(conv_buffer.data(), count * 4);
audio_size += count * 4;
}
+
+void WaveFileWriter::CheckSampleRate(int sample_rate)
+{
+ if (sample_rate != current_sample_rate)
+ {
+ Stop();
+ file_index++;
+ std::stringstream filename;
+ filename << File::GetUserPath(D_DUMPAUDIO_IDX) << basename << file_index << ".wav";
+ Start(filename.str(), sample_rate);
+ current_sample_rate = sample_rate;
+ }
+}
diff --git a/Source/Core/AudioCommon/WaveFile.h b/Source/Core/AudioCommon/WaveFile.h
index be0c8b7c5f..761f205722 100644
--- a/Source/Core/AudioCommon/WaveFile.h
+++ b/Source/Core/AudioCommon/WaveFile.h
@@ -30,8 +30,8 @@ public:
void Stop();
void SetSkipSilence(bool skip) { skip_silence = skip; }
- void AddStereoSamples(const short* sample_data, u32 count);
- void AddStereoSamplesBE(const short* sample_data, u32 count); // big endian
+ void AddStereoSamples(const short* sample_data, u32 count, int sample_rate);
+ void AddStereoSamplesBE(const short* sample_data, u32 count, int sample_rate); // big endian
u32 GetAudioSize() const { return audio_size; }
private:
static constexpr size_t BUFFER_SIZE = 32 * 1024;
@@ -42,4 +42,8 @@ private:
std::array<short, BUFFER_SIZE> conv_buffer{};
void Write(u32 value);
void Write4(const char* ptr);
+ void CheckSampleRate(int sample_rate);
+ std::string basename;
+ int current_sample_rate;
+ int file_index = 0;
};