rpcsx/rpcs3/Emu/Audio/AudioDumper.h

73 lines
1.3 KiB
C
Raw Normal View History

#pragma once
struct WAVHeader
{
struct RIFFHeader
{
u32 ID; // "RIFF"
u32 Size; // FileSize - 8
u32 WAVE; // "WAVE"
2016-02-01 22:51:35 +01:00
RIFFHeader() = default;
RIFFHeader(u32 size)
: ID(*(u32*)"RIFF")
, WAVE(*(u32*)"WAVE")
, Size(size)
{
}
} RIFF;
2016-02-01 22:51:35 +01:00
struct FMTHeader
{
u32 ID; // "fmt "
u32 Size; // 16
u16 AudioFormat; // 1 for PCM, 3 for IEEE Floating Point
u16 NumChannels; // 1, 2, 6, 8
u32 SampleRate; // 48000
u32 ByteRate; // SampleRate * NumChannels * BitsPerSample/8
u16 BlockAlign; // NumChannels * BitsPerSample/8
u16 BitsPerSample; // sizeof(float) * 8
2016-02-01 22:51:35 +01:00
FMTHeader() = default;
FMTHeader(u16 ch)
: ID(*(u32*)"fmt ")
, Size(16)
, AudioFormat(3)
, NumChannels(ch)
, SampleRate(48000)
, ByteRate(SampleRate * ch * sizeof(float))
, BlockAlign(ch * sizeof(float))
, BitsPerSample(sizeof(float) * 8)
{
}
} FMT;
2016-02-01 22:51:35 +01:00
u32 ID; // "data"
u32 Size; // size of data (256 * NumChannels * sizeof(float))
2016-02-01 22:51:35 +01:00
WAVHeader() = default;
WAVHeader(u16 ch)
: ID(*(u32*)"data")
, Size(0)
, FMT(ch)
, RIFF(sizeof(RIFFHeader) + sizeof(FMTHeader))
{
}
};
class AudioDumper
{
WAVHeader m_header;
2015-04-24 23:38:11 +02:00
fs::file m_output;
public:
2016-02-01 22:51:35 +01:00
AudioDumper(u16 ch);
~AudioDumper();
2016-02-01 22:51:35 +01:00
void WriteData(const void* buffer, u32 size);
2015-01-14 00:08:00 +01:00
const u16 GetCh() const { return m_header.FMT.NumChannels; }
};