diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/plugins/tts/winrt/qtexttospeech_winrt_audiosource.cpp | 13 | ||||
-rw-r--r-- | src/plugins/tts/winrt/qtexttospeech_winrt_audiosource.h | 2 |
2 files changed, 15 insertions, 0 deletions
diff --git a/src/plugins/tts/winrt/qtexttospeech_winrt_audiosource.cpp b/src/plugins/tts/winrt/qtexttospeech_winrt_audiosource.cpp index a680ffe..476bc15 100644 --- a/src/plugins/tts/winrt/qtexttospeech_winrt_audiosource.cpp +++ b/src/plugins/tts/winrt/qtexttospeech_winrt_audiosource.cpp @@ -117,6 +117,19 @@ qint64 AudioSource::readData(char *data, qint64 maxlen) bufferByteAccess->Buffer(&pbyte); pbyte += m_bufferOffset; + // Check and skip the RIFF header if present to prevent an audible + // click at the start of playback. + if (!m_riffHeaderChecked) { + m_riffHeaderChecked = true; + static const int WaveHeaderLength = 44; + const char *descriptor = reinterpret_cast<const char*>(pbyte); + if (maxlen >= WaveHeaderLength && !qstrncmp(descriptor, "RIFF", 4)) { + pbyte += WaveHeaderLength; + m_bufferOffset += WaveHeaderLength; + maxlen -= WaveHeaderLength; + } + } + switch (m_pause) { case NoPause: break; diff --git a/src/plugins/tts/winrt/qtexttospeech_winrt_audiosource.h b/src/plugins/tts/winrt/qtexttospeech_winrt_audiosource.h index dbd9752..79fdf16 100644 --- a/src/plugins/tts/winrt/qtexttospeech_winrt_audiosource.h +++ b/src/plugins/tts/winrt/qtexttospeech_winrt_audiosource.h @@ -124,6 +124,8 @@ private: ComPtr<::Windows::Storage::Streams::IBufferByteAccess> bufferByteAccess; // The data in the IBuffer might be paritally consumed UINT32 m_bufferOffset = 0; + // RIFF header has been checked at the beginning of the stream + bool m_riffHeaderChecked = false; void populateBoundaries(); QList<Boundary> boundaries; |