From e3025e54928f3babfd729f1421db42c0dcfb09c1 Mon Sep 17 00:00:00 2001 From: Peter L Jones Date: Sun, 21 Apr 2019 22:13:07 +0100 Subject: [PATCH] Fix wave file header lengths --- src/recorder/cwavestream.cpp | 7 +++++-- src/recorder/cwavestream.h | 3 ++- src/recorder/jamrecorder.cpp | 2 +- 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/src/recorder/cwavestream.cpp b/src/recorder/cwavestream.cpp index 7f6e7437..dadbdee3 100755 --- a/src/recorder/cwavestream.cpp +++ b/src/recorder/cwavestream.cpp @@ -120,10 +120,13 @@ void CWaveStream::waveStreamHeaders() *this << scHdrRiff << cFmtSubChunk << scDataSubChunkHdr; } -CWaveStream::~CWaveStream() +void CWaveStream::finalise() { + static const uint32_t hdrRiffChunkSize = sizeof(uint32_t) + sizeof(uint32_t) + sizeof(uint32_t); + static const uint32_t fmtSubChunkSize = sizeof(uint32_t) + sizeof(uint32_t) + sizeof(uint16_t) + sizeof(uint16_t) + sizeof(uint32_t) + sizeof(uint32_t) + sizeof(uint16_t) + sizeof(uint16_t); + static const uint32_t hdrRiffChunkSizeOffset = sizeof(uint32_t); - static const uint32_t dataSubChunkHdrChunkSizeOffset = sizeof(HdrRiff) + sizeof(FmtSubChunk) + sizeof (uint32_t) + sizeof (uint32_t); + static const uint32_t dataSubChunkHdrChunkSizeOffset = hdrRiffChunkSize + fmtSubChunkSize + sizeof (uint32_t); const int64_t currentPos = this->device()->pos(); const uint32_t fileLength = static_cast(currentPos - initialPos); diff --git a/src/recorder/cwavestream.h b/src/recorder/cwavestream.h index 7538e173..0da6b4b7 100755 --- a/src/recorder/cwavestream.h +++ b/src/recorder/cwavestream.h @@ -73,7 +73,8 @@ public: explicit CWaveStream(QIODevice *iod, const uint16_t numChannels); CWaveStream(QByteArray *iod, QIODevice::OpenMode flags, const uint16_t numChannels); CWaveStream(const QByteArray &ba, const uint16_t numChannels); - ~CWaveStream(); + + void finalise(); private: void waveStreamHeaders(); diff --git a/src/recorder/jamrecorder.cpp b/src/recorder/jamrecorder.cpp index 503e147a..3008849d 100755 --- a/src/recorder/jamrecorder.cpp +++ b/src/recorder/jamrecorder.cpp @@ -87,7 +87,7 @@ void CJamClient::Frame(const QString _name, const CVector& pcm) */ void CJamClient::Disconnect() { - delete out; + static_cast(out)->finalise(); out = nullptr; wavFile->close();