14 namespace swift::sound::wav
68 bool CWavFile::readHeader()
85 quint16 extraFormatBytes;
86 if (
peek((
char *)&extraFormatBytes,
sizeof(quint16)) !=
sizeof(quint16))
return false;
87 const qint64 throwAwayBytes =
sizeof(quint16) + qFromLittleEndian<quint16>(extraFormatBytes);
88 if (
read(throwAwayBytes).
size() != throwAwayBytes)
return false;
91 if (
read((
char *)&dataHeader,
sizeof(DATAHeader)) !=
sizeof(DATAHeader))
return false;
95 m_fileFormat.setChannelCount(qFromLittleEndian<quint16>(header.
wave.
numChannels));
96 m_fileFormat.setSampleRate(qFromLittleEndian<quint32>(header.
wave.
sampleRate));
100 if (bps == 8) { m_fileFormat.setSampleFormat(QAudioFormat::UInt8); }
101 else if (bps == 16) { m_fileFormat.setSampleFormat(QAudioFormat::Int16); }
102 else { m_fileFormat.setSampleFormat(QAudioFormat::Int32); }
104 else { m_fileFormat.setSampleFormat(QAudioFormat::Float); }
106 else { result =
false; }
108 m_headerLength =
pos();
112 const qint32 dataLength = qFromLittleEndian<qint32>(dataHeader.
descriptor.
size);
113 m_audioData =
read(dataLength);
114 if (m_audioData.
size() != dataLength)
const QAudioFormat & fileFormat() const
Audio format.
qint64 headerLength() const
Header length.
CWavFile(QObject *parent=nullptr)
Ctor.
bool open(FILE *fh, QIODeviceBase::OpenMode mode, QFileDevice::FileHandleFlags handleFlags)
Standard open.
qsizetype size() const const
bool open(FILE *fh, QIODeviceBase::OpenMode mode, QFileDevice::FileHandleFlags handleFlags)
void setFileName(const QString &name)
virtual void close() override
virtual qint64 pos() const const override
virtual bool seek(qint64 pos) override
QByteArray peek(qint64 maxSize)
QByteArray read(qint64 maxSize)