14 namespace swift::sound::wav
60 this->setFileName(fileName);
61 return QFile::open(QIODevice::ReadOnly) && readHeader();
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.
bool open(const QString &fileName)
Open.
CWavFile(QObject *parent=nullptr)
Ctor.