summaryrefslogtreecommitdiffstats
path: root/src
Commit message (Collapse)AuthorAgeFilesLines
* Correct license for module and plugin filesLucie Gérard2024-05-0348-48/+48
| | | | | | | | | | | | | | | | | According to QUIP-18 [1], all module and plugin files should be LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only or LicenseRef-Qt-Commercial OR GPL-3.0-only Also, LGPL and non LGPL should not be mixed in a given directory [1]: https://contribute.qt-project.org/quips/18 Pick-to: 6.7 Task-number: QTBUG-121787 Change-Id: I07f52c613b50293d4d84c5cbd08e06643b1439e0 Reviewed-by: Kai Köhne <kai.koehne@qt.io>
* SpeechD: replace unguarded qDebug statement with categorized loggingVolker Hilsheimer2024-04-302-4/+4
| | | | | | | | | | | Amends ea5c48e518789c3387ed9c9d21978eda122e9782, which implemented progress reporting for most plugins, but the speechd engine doesn't support it as the protocol doesn't provide the information. Pick-to: 6.7 Fixes: QTBUG-124868 Change-Id: I1879cda88dda2107ea62a6639f4d828e3557cccb Reviewed-by: Axel Spoerl <axel.spoerl@qt.io>
* Use NO_GENERATE_CPP_EXPORTS explicitlyAlexey Edelev2024-03-142-0/+2
| | | | | | | | | | | Use NO_GENERATE_CPP_EXPORTS explicitly for modules that don't need the autogenerated exports header file. Task-number: QTBUG-90492 Change-Id: Ic5fef6f6656c64e23fba0abf768ef7816aac09ed Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org> Reviewed-by: Jeremy Whiting <jpwhiting@kde.org> Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
* QTextToSpeech - flite: remove redundant Q_UNUSED()Axel Spoerl2024-03-061-2/+0
| | | | | | | | | | | The QTextToSpeechEngineFlite c'tor Q_UNUSED the parameters argument, despite of actually using it. Remove Q_UNUSED(parameters) Pick-to: 6.7 Change-Id: I24223a073aff071e70ed6543a1d7cb875d70b0c6 Reviewed-by: Santhosh Kumar <santhosh.kumar.selvaraj@qt.io>
* Fix the QTextToSpeechEngineAndroid plugin target nameAlexey Edelev2024-03-061-2/+3
| | | | | | | | | | | | Make sure that Qt plugin ends with the 'Plugin' suffix. Without the proper suffix the plugin will be skipped when loading the QtTextToSpeech module. The target name doesn't affect the rest naming. Pick-to: 6.5 6.6 6.7 Fixes: QTBUG-122900 Change-Id: I9e66bd9e33c84d076f4c7eaf392e5ebd56539bfc Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
* Enqueue new text if added while the engine is busyVolker Hilsheimer2024-03-051-3/+10
| | | | | | | | | | | | | | | | Calling enqueue() should be equivalent to say() when the engine is Ready, otherwise it should enqueue the text. The old implementation only enqueued the text when the engine was in Speaking state, overriding the current utterance when the engine was already synthesizing, or paused. Adjust test to enqueue the next text chunk as soon as the engine transitions away from the Ready state. Pick-to: 6.7 6.6 Fixes: QTBUG-122884 Change-Id: I19518a92d1ae73b01dc3de1d9ae6178f5f55b3ad Reviewed-by: Axel Spoerl <axel.spoerl@qt.io>
* Remove extra semi-colonsTasuku Suzuki2024-02-061-1/+1
| | | | | Change-Id: Icb4f791daf9a8a2df51dfcec054c95e28c134070 Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
* Fix documentation typoFabio Falsini2024-01-211-1/+1
| | | | | | | | In the QML documentation the signal errorOccurred has been written errorOccured Pick-to: 6.7 6.6 6.5 Change-Id: Ibbca62d7d617aea482a20781afa4925bc79b52c3 Reviewed-by: Axel Spoerl <axel.spoerl@qt.io>
* Fix highlighting of Quick Speech exampleKai Köhne2023-11-161-1/+1
| | | | | | | | | Amends 85a0060f4814bb419c Pick-to: 6.5 6.6 Task-number: QTBUG-117220 Change-Id: I32d8b850d1761f3e889f1c44ffebc4f7b0f3c014 Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
* WinRT: implement boundary hint support in pauseVolker Hilsheimer2023-11-103-5/+59
| | | | | | | | | | | | | | | | Look for the next matching boundary, which stores its starting time. Calculate the corresponding byte using QAudioFormat, then cut the delivery of data off when we reach the matching byte. In case of immediate pause, suspend the sink immediately. The default is unchanged: we search for silence in the current chunk of data. Implementing boundary support for stop() might come later. Pick-to: 6.6 Change-Id: I2b4cf06dbf8e2c55321a5364d2366c255d9e9afe Reviewed-by: Axel Spoerl <axel.spoerl@qt.io>
* WinRT: don't emit Paused state if no pause was requestedVolker Hilsheimer2023-11-101-1/+2
| | | | | | | | | | | | | | | | If we start a synthesis process then we start the audio sink immediately when the stream is ready. However, there might not be any data yet, so the sink might transition briefly to suspended state, which we regularly interpret as the text-to-speech state being paused. Ignore such transitions if no pause was requested from the source. This stabilizes the sayMultiple test, which without this change emits too many state change signals and fails. Pick-to: 6.6 Change-Id: I5158d0a0ebde6be37394cf114e1242f29df00ef2 Reviewed-by: Axel Spoerl <axel.spoerl@qt.io>
* WinRT: make silence detection more robustVolker Hilsheimer2023-11-101-3/+6
| | | | | | | | | | | The silence detection fails frequently, as the speech synthesizer seems to produce low sample values rather than 0 between words. Not sure why. Shorten the silence window and make the threshold larger to reliably detect the silence in the test. Pick-to: 6.6 Change-Id: Id5c26e043d24cb918c055e2809ac5f279fd2f021 Reviewed-by: Axel Spoerl <axel.spoerl@qt.io>
* SAPI: fix word offsets in sayingWord signalVolker Hilsheimer2023-11-101-1/+1
| | | | | | | | | | | | | The event parameters take the leading XML into account, and the stored currentText includes the XML as well, so we only have to skip the prefix for the offset parameters of the signal. The existing test covers this already and fails without this change, just not CI as the Windows nodes don't have sound output devices. Pick-to: 6.6 Change-Id: If10130131d39f65619730e13e7c8c0996e6cf0a9 Reviewed-by: Axel Spoerl <axel.spoerl@qt.io>
* WinRT: fix hanging synthesize when RIFF header is removedVolker Hilsheimer2023-11-061-1/+2
| | | | | | | | | | | | | | | | Amends 428cae98619584a51c01be135fecf6b347c117b3. If we drop the RIFF header bytes, then we have fewer bytes available as well, so decrease that value. Otherwise we never fetch more data. Improve the test, which should have caught this regression, by testing that synthesise cycles correctly through the states even if no default audio output is present. The test was completely skipped because of that, not detecting the regression. Fixes: QTBUG-118668 Pick-to: 6.6 Change-Id: I3b4276c13ce2c77ec718d1b7bbca6f3421636890 Reviewed-by: Jarkko Koivikko <jarkko.koivikko@code-q.fi>
* WinRT: avoid warning about negative timerVolker Hilsheimer2023-11-051-1/+2
| | | | | | | | | | If we synthesize, then the audio sink never becomes active, and we never start the elapsed timer. As asking for the elapsed times of an invalid timer is undefined behavior, don't do it. Pick-to: 6.6 Change-Id: Ida32957e37eccada38ae66298b93b334127b6124 Reviewed-by: Jarkko Koivikko <jarkko.koivikko@code-q.fi>
* Highlight Quick Speech example for 'Data Processing & IO' categoryKai Köhne2023-10-201-0/+3
| | | | | | | Pick-to: 6.5 6.6 Task-number: QTBUG-117220 Change-Id: I09343c975401f7fa700539fe0ffaf5dc3e049210 Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
* Fix top-level qt5 -no-gui buildKai Köhne2023-10-112-10/+4
| | | | | | | | | | | Gracefully handle the case where Multimedia is not available. Also, as we now centrally check for Multimedia availability, remove the individual checks. Pick-to: 6.6 Fixes: QTBUG-117824 Change-Id: If40c7f98f1dfa48c91f504dbdf657067044860c3 Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
* JNI: Don't use "Object" methods, let the compiler do the workVolker Hilsheimer2023-09-241-5/+5
| | | | | | | The return type is an object type, so we get a QJniObject anyway. Change-Id: I6d1e095142e3e4dbfabcab0fe7597af47513f6e9 Reviewed-by: Axel Spoerl <axel.spoerl@qt.io>
* Explicitly include qjnitypes headerVolker Hilsheimer2023-09-211-0/+1
| | | | | | | Follow up on JNI changes in qtbase. Change-Id: Iaf3764a2658ce1ffba695c2ae90486ebc65f4154 Reviewed-by: Juha Vuolle <juha.vuolle@qt.io>
* JNI: replace TYPE declarations with CLASS declarationsVolker Hilsheimer2023-09-211-1/+1
| | | | | | | | | | | That we have two macros to declare a C++ type to represent a Java class is confusing. The TYPE macro as of now allows us to declare array types, but with QJniArray we won't need that anymore, and can just use Class[] as the type instead. Changing that will be a follow-up commit; for now, get rid of TYPE-usages to declare regular classes. Change-Id: I1272c572801fafd948d6977f02987c8a817f864c Reviewed-by: Juha Vuolle <juha.vuolle@qt.io>
* winrt: Fix crash if initialization failsJarkko Koivikko2023-08-231-0/+15
| | | | | | | | | Add early returns, if no OneCore voices installed. Pick-to: 6.6 6.5 Change-Id: I9e95b06b35a212e9471c192415e406d1e8c3e461 Reviewed-by: Axel Spoerl <axel.spoerl@qt.io> Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
* Add cmake and qmake project files to quickspeech exampleElias Hautala2023-08-221-9/+9
| | | | | | | | | | Adds cmake and qmake project files to the quickspeech example which allows the example to be built and deployd. Fixes: QTBUG-113820 Pick-to: 6.5 6.6 Change-Id: Ie52f70ccfbd173c43621a20604fffd46182f9e20 Reviewed-by: Nicholas Bennett <nicholas.bennett@qt.io>
* QDeclarativeTextToSpeech: fix GCC13 -Wuse-after-freeMarc Mutz2023-08-141-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | I don't see what the original code did wrong, but GCC13 doesn't understand it, and spews out the following: In copy constructor ‘Qt6::QtPrivate::QExplicitlySharedDataPointerV2<T>::QExplicitlySharedDataPointerV2(const Qt6::QtPrivate::QExplicitlySharedDataPointerV2<T>&) [with T = Qt6::QMapData<std::map<Qt6::QString, Qt6::QVariant, std::less<Qt6::QString>, std::allocator<std::pair<const Qt6::QString, Qt6::QVariant> > > >]’, inlined from ‘Qt6::QMap<Qt6::QString, Qt6::QVariant>::QMap(const Qt6::QMap<Qt6::QString, Qt6::QVariant>&)’ at qmap.h:185:7, inlined from ‘Qt6::QDeclarativeTextToSpeech::findVoices(const Qt6::QVariantMap&) const::<lambda(const Qt6::QVoice&)>::<lambda>(const Qt6::QDeclarativeTextToSpeech::findVoices(const Qt6::QVariantMap&) const::<lambda(const Qt6::QVoice&)>&)’ at qdeclarativetexttospeech.cpp:106:30, inlined from ‘constexpr __gnu_cxx::__ops::_Iter_pred<Qt6::QDeclarativeTextToSpeech::findVoices(const Qt6::QVariantMap&) const::<lambda(const Qt6::QVoice&)> >::_Iter_pred(const __gnu_cxx::__ops::_Iter_pred<Qt6::QDeclarativeTextToSpeech::findVoices(const Qt6::QVariantMap&) const::<lambda(const Qt6::QVoice&)> >&)’ at /d/gcc/13/include/c++/13.0.1/bits/predefined_ops.h:304:12, inlined from ‘constexpr _Iterator std::__find_if(_Iterator, _Iterator, _Predicate) [with _Iterator = Qt6::QList<Qt6::QVoice>::const_iterator; _Predicate = __gnu_cxx::__ops::_Iter_pred<Qt6::QDeclarativeTextToSpeech::findVoices(const Qt6::QVariantMap&) const::<lambda(const Qt6::QVoice&)> >]’ at /d/gcc/13/include/c++/13.0.1/bits/stl_algobase.h:2115:23, inlined from ‘constexpr _IIter std::find_if(_IIter, _IIter, _Predicate) [with _IIter = Qt6::QList<Qt6::QVoice>::const_iterator; _Predicate = Qt6::QDeclarativeTextToSpeech::findVoices(const Qt6::QVariantMap&) const::<lambda(const Qt6::QVoice&)>]’ at /d/gcc/13/include/c++/13.0.1/bits/stl_algo.h:3923:28, inlined from ‘auto Qt6::QtPrivate::sequential_erase_if(Container&, Predicate&) [with Container = Qt6::QList<Qt6::QVoice>; Predicate = Qt6::QDeclarativeTextToSpeech::findVoices(const Qt6::QVariantMap&) const::<lambda(const Qt6::QVoice&)>]’ at qcontainertools_impl.h:333:35, inlined from ‘Qt6::qsizetype Qt6::QList<T>::removeIf(Predicate) [with Predicate = Qt6::QDeclarativeTextToSpeech::findVoices(const Qt6::QVariantMap&) const::<lambda(const Qt6::QVoice&)>; T = Qt6::QVoice]’ at qlist.h:589:46, inlined from ‘Qt6::QList<Qt6::QVoice> Qt6::QDeclarativeTextToSpeech::findVoices(const Qt6::QVariantMap&) const’ at qdeclarativetexttospeech.cpp:106:20: qshareddata_impl.h:40:11: error: pointer used after ‘void operator delete(void*, std::size_t)’ [-Werror=use-after-free] 40 | : d(other.d) | ^~~~~~~~~~ In destructor ‘Qt6::QtPrivate::QExplicitlySharedDataPointerV2<T>::~QExplicitlySharedDataPointerV2() [with T = Qt6::QMapData<std::map<Qt6::QString, Qt6::QVariant, std::less<Qt6::QString>, std::allocator<std::pair<const Qt6::QString, Qt6::QVariant> > > >]’, inlined from ‘Qt6::QtPrivate::QExplicitlySharedDataPointerV2<T>::~QExplicitlySharedDataPointerV2() [with T = Qt6::QMapData<std::map<Qt6::QString, Qt6::QVariant, std::less<Qt6::QString>, std::allocator<std::pair<const Qt6::QString, Qt6::QVariant> > > >]’ at qshareddata_impl.h:65:5, inlined from ‘Qt6::QMap<Qt6::QString, Qt6::QVariant>::~QMap()’ at qmap.h:185:7, inlined from ‘Qt6::QDeclarativeTextToSpeech::findVoices(const Qt6::QVariantMap&) const::<lambda(const Qt6::QVoice&)>::~<lambda>()’ at qdeclarativetexttospeech.cpp:106:30, inlined from ‘constexpr __gnu_cxx::__ops::_Iter_pred<_Predicate> __gnu_cxx::__ops::__pred_iter(_Predicate) [with _Predicate = Qt6::QDeclarativeTextToSpeech::findVoices(const Qt6::QVariantMap&) const::<lambda(const Qt6::QVoice&)>]’ at /d/gcc/13/include/c++/13.0.1/bits/predefined_ops.h:325:58, inlined from ‘constexpr _IIter std::find_if(_IIter, _IIter, _Predicate) [with _IIter = Qt6::QList<Qt6::QVoice>::const_iterator; _Predicate = Qt6::QDeclarativeTextToSpeech::findVoices(const Qt6::QVariantMap&) const::<lambda(const Qt6::QVoice&)>]’ at /d/gcc/13/include/c++/13.0.1/bits/stl_algo.h:3923:28, inlined from ‘auto Qt6::QtPrivate::sequential_erase_if(Container&, Predicate&) [with Container = Qt6::QList<Qt6::QVoice>; Predicate = Qt6::QDeclarativeTextToSpeech::findVoices(const Qt6::QVariantMap&) const::<lambda(const Qt6::QVoice&)>]’ at qcontainertools_impl.h:333:35, inlined from ‘Qt6::qsizetype Qt6::QList<T>::removeIf(Predicate) [with Predicate = Qt6::QDeclarativeTextToSpeech::findVoices(const Qt6::QVariantMap&) const::<lambda(const Qt6::QVoice&)>; T = Qt6::QVoice]’ at qlist.h:589:46, inlined from ‘Qt6::QList<Qt6::QVoice> Qt6::QDeclarativeTextToSpeech::findVoices(const Qt6::QVariantMap&) const’ at qdeclarativetexttospeech.cpp:106:20: qshareddata_impl.h:68:13: note: call to ‘void operator delete(void*, std::size_t)’ here 68 | delete d; | ^~~~~~~~ Fix by taking the QVariantMap by reference instead of by value. That should be a bit more efficient, too, due to reduced atomic ref count manipulations. Amends 3543b7c3b69d69280122958f5949ac7827c543b0. Pick-to: 6.6 Change-Id: I3070ba17544ca71c9ab835cd6f6fd2e2748ef74a Reviewed-by: Jarkko Koivikko <jarkko.koivikko@code-q.fi> Reviewed-by: Jeremy Whiting <jpwhiting@kde.org> Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
* winrt: Fix artifact at the beginning of audioJarkko Koivikko2023-08-102-0/+15
| | | | | | | | | The artifact was generated by the RIFF/WAV header that was passed into the audio sink. Pick-to: 6.6 Change-Id: I33133b069894fecf506eb67c4877306f9d4109b1 Reviewed-by: Axel Spoerl <axel.spoerl@qt.io>
* sapi: Fix mapping of Age attribute (Child, Teen, Senior)Jarkko Koivikko2023-08-092-1/+16
| | | | | | Pick-to: 6.6 Change-Id: Ibdfead152d030f41c78e909452896abd0e3ce99e Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
* Prevent QVoice from being exported twice to QMLIvan Solovev2023-08-081-1/+8
| | | | | | | | | | | | | | We need to export the type as a value type, and also export its enums in a namespace. This resulted in duplicated entries in the qmltypes file, which confuses Qt Design Studio. Fix it by introducing a derived class, and using it for exporting the enums. Fixes: QTBUG-115363 Pick-to: 6.6 6.5 Change-Id: Iaeb21a81ede657499a62fa5325122592ec0b203e Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
* Allow enabling QT_USE_QSTRINGBUILDER for pluginsAlexey Edelev2023-08-072-2/+3
| | | | | Change-Id: Ic49f0b9912e246727487c1457aeab05484485b5f Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
* Build with QT_NO_CONTEXTLESS_CONNECTAhmad Samir2023-07-121-0/+1
| | | | | | | | | | | | | This disables the 3-arg QObject::connect() overload: QObject::connect(sender, signal, functor) For details see: https://lists.qt-project.org/pipermail/development/2023-July/044141.html No changes required. Change-Id: I0bea228494774d4ad0279aaf25ef96a75e31e047 Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
* Implicit capture of ‘this’ via ‘[=]’ is deprecated in C++20Ahmad Samir2023-07-121-1/+1
| | | | | Change-Id: I70fe1b26741376dbd112512b27a0d92e8d7d99f5 Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
* Doc: Remove \ingroup all-examples command from the docsJaishree Vyas2023-07-121-1/+0
| | | | | | | | Task-number: QTBUG-115044 Pick-to: 6.5 6.6 Change-Id: I83314f3b7955e1ef9c857bcc96c07f6f90b2f875 Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io> Reviewed-by: Topi Reiniö <topi.reinio@qt.io>
* Doc: Remove warninglimit .qdocconf variableTopi Reinio2023-06-271-3/+0
| | | | | | | | | | | | | | | | The most common limit for the maximum number of allowed documentation warnings is zero. As all Qt module docs include() a common configuration from qtbase, it's better to control the base warninglimit from a central location in qtbase/doc/global. This allows for a temporary increase of the limit across all modules as needed - for example, when updating the QDoc binary that the CI provisions to a version that introduces new types of documentation warnings. Task-number: QTBUG-113326 Change-Id: I82121df63a57575765df156e868c4db838bae79e Reviewed-by: Paul Wicking <paul.wicking@qt.io>
* Optimize findVoices implementationVolker Hilsheimer2023-06-201-14/+15
| | | | | | | | | | | | | | Instead of calling QList::removeIf in the recursive template, call it outside and use the recursive template to check each criteria for the current voice. Invert the logic for less brain-twisting: the helper returns true for voices that match all criteria. Pick-to: 6.6 Change-Id: I25364919ad0c2d71aefb8b9872752bf726e99334 Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org> Reviewed-by: Axel Spoerl <axel.spoerl@qt.io>
* Header cleanupVolker Hilsheimer2023-06-204-21/+42
| | | | | | | | | | | | | - add trailing comma for enums to minimize diff for future additions - remove unnecessarily inline keyword - use q20::remove_cvref_t instead of std::decay_t so that we don't decay arrays - remove unncessary parenths - add semi-public API warning to plugin headers Pick-to: 6.6 Change-Id: I2608bf2e3feff968d0404b20c1cb00a28da5c02c Reviewed-by: Axel Spoerl <axel.spoerl@qt.io>
* Doc: Fix warning in TextToSpeech::aboutToSynthesize()Topi Reinio2023-06-091-1/+1
| | | | | | | | src/tts/qtexttospeech.cpp:620: (qdoc) warning: Undocumented parameter 'id' Pick-to: 6.6 Change-Id: I5792b9b625d0c16f9afc8a4f8c2a6cfd65fc67ca Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
* API review: add revision tags and make properties FINALVolker Hilsheimer2023-06-073-11/+11
| | | | | | | | | | | | | | Add 6.6 revision tags to new properties and invokables, and make all properties FINAL. The `engine` property is only made FINAL in the QML wrapper class, as it needs to override that property to replace getters and setters to support lazy initialization. Pick-to: 6.6 Change-Id: I266b5a3229978f4da9998366af83d77fa744d434 Reviewed-by: Axel Spoerl <axel.spoerl@qt.io> Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
* Doc: Add Licenses and attributions sectionPaul Wicking2023-05-311-0/+13
| | | | | | | | | | | | The landing page for Qt Speech doesn't contain the customary section "Licenses and Attributions", common for all Qt modules. * Add "Licenses and attributions" section to the landing page. Pick-to: 6.5 Fixes: QTBUG-114099 Change-Id: I975ce793b23e4d26ef76f06927804ccc7939ddba Reviewed-by: Topi Reiniö <topi.reinio@qt.io>
* Doc: Indent by 4, not 3, spacesPaul Wicking2023-05-311-38/+38
| | | | | | | | | | | | | | By convention, documentation in Qt is indented by 4 spaces. The landing page for Qt Speech, however, indents by 3 spaces. This makes copying landing page content from other modules more cumbersome, as it is visually "noisy". Increase the indentation by one space. Pick-to: 6.5 Task-number: QTBUG-114099 Change-Id: I56223c1bebff226fa2e9de8115c15f961635d89e Reviewed-by: Topi Reiniö <topi.reinio@qt.io>
* API review: remove the synthesized signal and the simple slotVolker Hilsheimer2023-05-303-47/+61
| | | | | | | | | | | | | | | They were only need for QML clients, for C++ client the version taking a callable is more convenient. But QML clients cannot really use QAudioFormat (there is no QML version of the type), and operating on QByteArrays is also not something we want QML (or JavaScript code) to do. The engines still emit a signal, as that makes it easier to implement the engine. Change-Id: Ie24a41195cd5b7e27ec2b1562fb3f8e515c5adc3 Reviewed-by: Axel Spoerl <axel.spoerl@qt.io> Reviewed-by: Jeremy Whiting <jpwhiting@kde.org>
* API review: Allow synthesize callbacks that take a QAudioBufferVolker Hilsheimer2023-05-282-11/+44
| | | | | | | | | | | | | | Formally, QAudioBuffer is the right type for carrying audio data, but it's hardly used in Qt Multimedia itself, and not very practical to use for writing the received PCM data to a file or to stream it out to a QAudioSink (which operators on a QIODevice, e.g. with a byte array). Nevertheless, allow a callback to take a QAudioBuffer instead of QAudioFormat and QByteArray, as the QAudioBuffer facilities might be useful for some use cases. Change-Id: I260a4cf6cf91f57356373f4ef9cf248927159b40 Reviewed-by: Axel Spoerl <axel.spoerl@qt.io>
* Start the sunsetting of the macOS engineVolker Hilsheimer2023-05-281-1/+3
| | | | | | | There's no reason for maintaining this engine anymore. Change-Id: I323d59b15951a74b264c708a639be8c293eba1e8 Reviewed-by: Axel Spoerl <axel.spoerl@qt.io>
* Add PauseResume capability flagVolker Hilsheimer2023-05-2510-5/+27
| | | | | | | | | | | | | | | | | Android lacks this capability as the native TextToSpeech class has no API for this. Since we now have the capabilities enum, add PauseResume and don't list that for Android, so that applications can disable the respective UI. Do that for our examples - hide the pause & resume buttons if the capability flag is not set. Document the unsupported capabilities for all engines that lacks some features Fixes: QTBUG-113805 Change-Id: Ia8139e235f4cd968519423515e31c81285a2d349 Reviewed-by: Axel Spoerl <axel.spoerl@qt.io>
* API review: add word string to sayingWord signal parametersVolker Hilsheimer2023-05-2411-19/+28
| | | | | | | | | | | For UIs that just want to display the currently spoken word, this is easier to connect to existing APIs. Also add the ID of the utterance, as returned by enqueue(). The index and length into the overall string stay as the final parameters. Change-Id: I70bf35eeadd24540670cad2edd42126331796f4b Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
* API review: return an ID of the enqueued utteranceVolker Hilsheimer2023-05-243-36/+48
| | | | | | | | | | | | | | This way applications can easier keep track of things later, using the ID as a token to identify the text. Use that ID instead of the text string as the parameter in the aboutToSynthesize signal. Rename the "text" parameters and variables to "utterance" to make the relation to the BoundaryHint::Utterance clearer, and document the Utterance enum value better (and also add the missing [since] tag). Use a QQueue for the pendingUtterances variable instead of a list. Change-Id: Icc2054dca52cea450736d63ca0119989b762e39a Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
* VoiceSelector is new in Qt 6.6Volker Hilsheimer2023-05-131-0/+1
| | | | | | | Evidently qdoc doesn't know about QML_ADDED_IN_VERSION. Change-Id: I0aa1a0e4c830b78c0ff0e0a022aa56c5b6d6e7fd Reviewed-by: Axel Spoerl <axel.spoerl@qt.io>
* Doc: add \since 6.6 tags and fix linksVolker Hilsheimer2023-05-121-1/+9
| | | | | Change-Id: I52c59c1e9bdb4cc4c99f898352c52a19968527f4 Reviewed-by: Nicholas Bennett <nicholas.bennett@qt.io>
* Follow up on changes in qtbaseVolker Hilsheimer2023-05-111-1/+1
| | | | | | | Adapt to makeSlotObject rename to makeCallableObject. Change-Id: I5014b13d11747938e33c40cd88606dbce257fd8b Reviewed-by: Axel Spoerl <axel.spoerl@qt.io>
* Use new callback helper from qtbaseVolker Hilsheimer2023-05-112-61/+15
| | | | | | Change-Id: I8bf9bffbe06719a2239529168e2c6d585937f68d Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io> Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
* QTextToSpeech: rename sayNext to enqueueVolker Hilsheimer2023-05-102-10/+10
| | | | | | | | The text passed into the function is not said next, it's said at the end of the currently pending texts. Change-Id: Ic0ea885b65cdd8d7a055616fc9098d3c8cd3d397 Reviewed-by: Axel Spoerl <axel.spoerl@qt.io>
* Clean up potential memory leakVolker Hilsheimer2023-05-051-0/+2
| | | | | | | | | | The slot object stored during synthesizing should be dereferenced and destroyed when the engine transitions back to ready, but we should nevertheless not overwrite the pointer without derefencing. Change-Id: Id99653c555682f21b645c83db2ceb0ae143ab426 Reviewed-by: Axel Spoerl <axel.spoerl@qt.io> Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
* TextToSpeech: make engine parameters available from QMLVolker Hilsheimer2023-04-254-4/+42
| | | | | | | | | | | | | Add a map-type property that QML code can initialize to engine-specific key/value mappings. Changing the property at runtime re-initializes the engine. Implement asnychronous initialization option in the mock engine so that we can test those code paths better. Change-Id: I0f2667b9b8e2339fa2e6966a2669f6f54ff2572a Reviewed-by: Axel Spoerl <axel.spoerl@qt.io> Reviewed-by: Jarkko Koivikko <jarkko.koivikko@code-q.fi>