CMake 03: Text To Speech

Nella puntata precedente abbiamo visto come aggiungere un file di risorse, una icona e un pulsante. Ora vediamo come aggiungere una libreria di Qt.

Vi ricordo che potete trovare il codice su GitHub.

Aggiungere una libreria Qt al progetto

Un modulo Qt può essere aggiunto al nostro progetto a mano inserendolo in 2 funzioni:

  • find_package()
  • target_link_libraries()

Supponiamo di voler aggiungere un pulsante per sintetizzare un messaggio vocale. Per fare questo serve il modulo QTextToSpeech. Aggiungiamolo ai pacchetti richiesti:

find_package(Qt5 COMPONENTS TextToSpeech REQUIRED)

Salvando il file CMakeLists.txt, CMake si attiva e andando a vedere la sezione CMake Modules vedremo una nuova cartella: Qt5TextToSpeech

Ora dobbiamo aggiungere la libreria al comando target_link_libraries(), ma come facciamo a sapere il nome esatto? Semplice basta aprire Qt5TextToSpeechConfig.cmake e cercare il comando set che assegna il nome alla libreria. Sfogliate il codice e troverete:

set(Qt5TextToSpeech_LIBRARIES Qt5::TextToSpeech)

Ecco la nostra etichetta è Qt5::TextToSpeech, pertanto inseriamo il comando:

target_link_libraries(CMakeWidgetProject PRIVATE Qt5::TextToSpeech)

Semplice no? Se hai un buon tutorial sì! (In realtà si tratta di mettere Qt5:: prima del nome del modulo)

Creare il pulsante Hello

Come faccio ad inserire un pulsante per riprodurre un messagio?

Iniziamo scegliendo una icona, per esempio con Icon8. Io ho trovato l’icona

icons8-voice.png

e l’ho messa nella cartella icons. Poi dobbiamo accodare l’icona nel file:

CMakeWidgetProject-res.qrc

Per finire apriamo il file mainwindow.ui ed inseriamo un pulsante che chiameremo cmdHello, impostiamo il titolo come “Hello!” e poi assegniamo la nostra icona prendendola dalle risorse e visualizzandola in formato (32×32):

Attivo QTextToSpeech

Per prima cosa devo attivare il motore per far parlare il computer. Pertanto è bene creare una property nella definizione della classe MainWindow. Ecco la definizione completa della classe:

class MainWindow : public QMainWindow
{
    Q_OBJECT
public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();
private slots:
    void on_cmdYouTube_clicked();
private:
    Ui::MainWindow *ui;
    QTextToSpeech m_engine;
};

Ricordate che Alt+Invio, se il cursore è su m_engine, inserisce l’intestazione necessaria:

#include <QTextToSpeech>

Creaiamo lo slot

Ora torniamo nuovamente a mainwindow.ui (SHIFT+F4) e creiamo lo slot clicked() del pulsante, facendo “tasto destro”, “go to slot”, “clicked”.

Ci ritroveremo nel codice dello slot, ove bastano 2 righe di codice per fare tutto:

void MainWindow::on_cmdHello_clicked()
{
    m_engine.setLocale(QLocale(QLocale::Italian, QLocale::Italy));
    m_engine.say("Buon Giorno, Gualeni Gianbattista!");
}

Notate che ho impostato la lingua del motore usando la classe QLocale inserendo prima la lingua e poi la nazione.

Fatto! Adesso la nostra applicazione parla! Naturalmente il messaggio può essere diverso… Potremmo anche creare una casella di testo per inserire il messaggio da pronunciare.

Per sicurezza provo a vedere come funziona con macOS, Linux e Windows.

Test con macOS

La resa vocale mi sembra buona. È molto simile al risponditore vocale della mia banca.

Test con Linux

Non è eccezionale, anzi è un poco gracchiante. Magari ci sono delle librerie migliori da installare a livello di sistema operativo, non ho fatto ricerche.

Test con Windows

Anche per Windows, niente male. Naturalmente sto usando Windows 10. Ricordo di esperimenti analoghi fatti con Windows 7, dove il motore funzionava bene solo per l’inglese.

Conclusioni

Tutorial veloce, per oggi. Vi ricordo che potete trovare il codice su GitHub:

https://github.com/g-gualeni/CMakeWidgetProjectWeb

Il prossimo post sarà decisamente più complesso. Vedremo come inserire la versione di una applicazione nel file della applicazione stessa. Il lavoro verrà diviso in due parti, una per macOS e una per Windows. Per Linux non ho capito bene se c’è una sorta di standard, e mi farebbe piacere ricevere dei commenti in materia.

Autore: Gianbattista

Appassionato di tecnologia, sono l'autore di Qt5 Quanto Basta. Per lavoro mi occupo di elaborazione delle immagini per applicazioni industriali, ma nel tempo libero adoro creare applicazioni con Qt (www.qt.io)

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *