summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/plugins/tts/winrt/qtexttospeech_winrt_audiosource.cpp13
-rw-r--r--src/plugins/tts/winrt/qtexttospeech_winrt_audiosource.h2
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;