#include <iostream>
#include <fstream>
#include <cstring>
{
public:
: m_container(container)
{
assert (m_container != nullptr);
m_container->writeBlock.connect(
sigc::mem_fun(*this, &AudioFileWriter::handleBlock));
std::ostringstream oss;
std::string filename(std::string("AsyncAudioContainer_demo.") +
m_container->filenameExtension());
std::cout << "Opening file " << filename << std::endl;
m_ofs.open(filename, std::ofstream::out);
assert(m_ofs.is_open());
if (m_container->headerSize() > 0)
{
char dummy[m_container->headerSize()];
std::memset(dummy, 0, m_container->headerSize());
m_ofs.write(dummy, sizeof(dummy));
}
assert(m_ofs.good());
}
~AudioFileWriter(void)
{
m_container->endStream();
if (m_container->headerSize() > 0)
{
std::cout << "Writing " << m_container->filenameExtension()
<< " file header (size=" << m_container->headerSize()
<< " bytes)" << std::endl;
m_ofs.seekp(0);
m_ofs.write(m_container->header(), m_container->headerSize());
assert(m_ofs.good());
}
std::cout << "Closing " << m_container->filenameExtension()
<< " file" << std::endl;
m_ofs.close();
delete m_container;
m_container = 0;
}
private:
std::ofstream m_ofs;
void handleBlock(const char* buf, size_t len)
{
<< " audio block (size=" << len << " bytes)" << std::endl;
m_ofs.write(buf, len);
assert(m_ofs.good());
}
};
int main(int argc, char **argv)
{
AudioFileWriter* wav_writer = 0;
if (container != nullptr)
{
wav_writer = new AudioFileWriter(container);
}
AudioFileWriter* pcm_writer = 0;
if (container != nullptr)
{
pcm_writer = new AudioFileWriter(container);
}
AudioFileWriter* opus_writer = 0;
if (container != nullptr)
{
opus_writer = new AudioFileWriter(container);
}
});
delete pcm_writer;
delete wav_writer;
delete opus_writer;
}
Base class for audio container handlers.
Contains a class for handling audio input/output to an audio device.
A class that splits an audio stream into multiple streams.
The core class for writing asyncronous cpp applications.
Contains a single shot or periodic timer that emits a signal on timeout.
static Application & app(void)
Get the one and only application instance.
virtual void quit(void)=0
Exit the application main loop.
virtual const char * filenameExtension(void) const =0
Get the standard filename extension for the audio container.
A class for handling audio input/output to an audio device.
The base class for an audio sink.
void clearHandler(void)
Clear a handler that was previously setup with setHandler.
bool setHandler(AudioSink *handler)
Setup another sink to handle the incoming audio.
bool registerSink(AudioSink *sink, bool managed=false)
Register an audio sink to provide samples to.
A class that splits an audio stream into multiple streams.
void addSink(AudioSink *sink, bool managed=false)
Add an audio sink to the splitter.
An application class for writing non GUI applications.
void exec(void)
Execute the application main loop.
A class that produces timer events.
AudioContainer * createAudioContainer(const std::string &name)
Create a named AudioContainer-derived object.