Files
DbCoreLib/waverecorder.cpp
2018-12-16 22:17:41 +01:00

42 lines
1.4 KiB
C++

#include "waverecorder.h"
// Qt includes
#include <QVector>
// system includes
#include <stdexcept>
WaveRecorder::WaveRecorder(const quint16 channels, const quint32 frequency, const QString &filename) :
m_file(filename),
m_dataStream(&m_file)
{
m_dataStream.setByteOrder(QDataStream::LittleEndian);
if(!m_file.open(QIODevice::WriteOnly | QIODevice::Truncate))
throw std::runtime_error(QString("Could open file %0 because %1").arg(m_file.fileName(), m_file.errorString()).toStdString());
m_dataStream << quint8('R') << quint8('I') << quint8('F') << quint8('F');
m_dataStream << quint32(0);
m_dataStream << quint8('W') << quint8('A') << quint8('V') << quint8('E');
m_dataStream << quint8('f') << quint8('m') << quint8('t') << quint8(' ');
m_dataStream << quint32(16);
m_dataStream << quint16(1); // audio format (pcm)
m_dataStream << channels;
m_dataStream << frequency;
m_dataStream << quint32(frequency * channels * sizeof(qint32)); // byte rate
m_dataStream << quint16(sizeof(qint32) * channels); // block align
m_dataStream << quint16(sizeof(qint32) * 8); // bits per sample
m_dataStream << quint8('d') << quint8('a') << quint8('t') << quint8('a');
m_dataStream << quint32(0);
m_dataStream.setByteOrder(QDataStream::BigEndian);
}
void WaveRecorder::addSample(const qint32 sample)
{
m_dataStream << sample;
}