rpcsx/rpcs3/Emu/Audio/AudioDumper.cpp

67 lines
1.1 KiB
C++
Raw Normal View History

#include "stdafx.h"
#include "AudioDumper.h"
2015-01-16 15:36:53 +01:00
AudioDumper::AudioDumper() : m_header(0), m_init(false)
{
}
AudioDumper::~AudioDumper()
{
2015-01-16 15:36:53 +01:00
Finalize();
}
2015-01-16 15:36:53 +01:00
bool AudioDumper::Init(u8 ch)
{
2015-01-16 15:36:53 +01:00
if ((m_init = m_output.Open("audio.wav", rFile::write)))
{
m_header = WAVHeader(ch);
WriteHeader();
}
return m_init;
}
void AudioDumper::WriteHeader()
{
2015-01-16 15:36:53 +01:00
if (m_init)
{
m_output.Write(&m_header, sizeof(m_header)); // write file header
}
}
size_t AudioDumper::WriteData(const void* buffer, size_t size)
{
2014-04-03 22:46:40 +02:00
#ifdef SKIP_EMPTY_AUDIO
bool do_save = false;
for (u32 i = 0; i < size / 8; i++)
2014-03-19 01:32:23 +01:00
{
2014-04-03 22:46:40 +02:00
if (((u64*)buffer)[i]) do_save = true;
2014-03-19 01:32:23 +01:00
}
for (u32 i = 0; i < size % 8; i++)
{
2014-04-03 22:46:40 +02:00
if (((u8*)buffer)[i + (size & ~7)]) do_save = true;
2014-03-19 01:32:23 +01:00
}
2015-01-16 15:36:53 +01:00
if (m_init && do_save)
#else
if (m_init)
2014-04-03 22:46:40 +02:00
#endif
2015-01-16 15:36:53 +01:00
{
size_t ret = m_output.Write(buffer, size);
m_header.Size += (u32)ret;
m_header.RIFF.Size += (u32)ret;
return ret;
}
return size;
}
void AudioDumper::Finalize()
{
2015-01-16 15:36:53 +01:00
if (m_init)
{
m_output.Seek(0);
m_output.Write(&m_header, sizeof(m_header)); // write fixed file header
m_output.Close();
}
}