2014-03-08 00:15:39 +01:00
|
|
|
#include "stdafx.h"
|
|
|
|
|
#include "AudioDumper.h"
|
|
|
|
|
|
2015-01-16 15:36:53 +01:00
|
|
|
AudioDumper::AudioDumper() : m_header(0), m_init(false)
|
2014-03-08 00:15:39 +01:00
|
|
|
{
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
AudioDumper::~AudioDumper()
|
|
|
|
|
{
|
2015-01-16 15:36:53 +01:00
|
|
|
Finalize();
|
2014-03-08 00:15:39 +01:00
|
|
|
}
|
|
|
|
|
|
2015-01-16 15:36:53 +01:00
|
|
|
bool AudioDumper::Init(u8 ch)
|
2014-03-08 00:15:39 +01:00
|
|
|
{
|
2015-11-01 11:33:28 +01:00
|
|
|
if ((m_init = m_output.open("audio.wav", fom::rewrite)))
|
2015-01-16 15:36:53 +01:00
|
|
|
{
|
|
|
|
|
m_header = WAVHeader(ch);
|
|
|
|
|
WriteHeader();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return m_init;
|
2014-03-08 00:15:39 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void AudioDumper::WriteHeader()
|
|
|
|
|
{
|
2015-01-16 15:36:53 +01:00
|
|
|
if (m_init)
|
|
|
|
|
{
|
2015-04-19 15:19:24 +02:00
|
|
|
m_output.write(&m_header, sizeof(m_header)); // write file header
|
2015-01-16 15:36:53 +01:00
|
|
|
}
|
2014-03-08 00:15:39 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
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
|
|
|
{
|
2015-04-19 15:19:24 +02:00
|
|
|
size_t ret = m_output.write(buffer, size);
|
2015-01-16 15:36:53 +01:00
|
|
|
m_header.Size += (u32)ret;
|
|
|
|
|
m_header.RIFF.Size += (u32)ret;
|
|
|
|
|
return ret;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return size;
|
2014-03-08 00:15:39 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void AudioDumper::Finalize()
|
|
|
|
|
{
|
2015-01-16 15:36:53 +01:00
|
|
|
if (m_init)
|
|
|
|
|
{
|
2015-04-19 15:19:24 +02:00
|
|
|
m_output.seek(0);
|
|
|
|
|
m_output.write(&m_header, sizeof(m_header)); // write fixed file header
|
|
|
|
|
m_output.close();
|
2015-01-16 15:36:53 +01:00
|
|
|
}
|
2014-03-08 00:15:39 +01:00
|
|
|
}
|