Projet

Général

Profil

Ajout du son

On va utiliser le son dans Imageo pour différentes choses, j'ai donc créé une enum qui prévoit 3 cas d'enregistrement : orthographe, association, instruction.
Mais, contrairement à ce que j'avais fait dans une première implémentation, je fais maintenant le choix de n'avoir qu'un seul AbulEduMultiMediaV1 de type Recorder, dont le vais "promener" le audioControlWidget, en mettant à jour des chemins d'enregistrement et de lecture en même temps.

La lecture vocale des consignes (enregistrement uniquement)

Sur la page des consignes on a un QGroupBox checkable qui, s'il est actif, donne accès à 4 QRadioButton (1 par type d'exercice).
Quand on coche le QGroupBox, la variable qui porte la valeur de mon enum est mise à instruction. De plus, l'AbulEduMultiMediaV1 est mis en non TTS et son audioControlWidget est placé (par parentement) dans la QFrame frmEnregistrementConsignes. Enfin, le bouton radio correspondant au premier exercice (orthographe) est coché.
Au clic sur un des boutons radio le chemin d'enregistrement du QAudioRecorder ET le chemin de lecture de l'AbulEduAudioPlayerV1 sont mis à jour vers le nom d'un fichier au nom explicite dans dossierTemp/data/instructions/
Ce fichier, créé dans un sous-dossier de data, sera donc sans qu'il n'y ait rien de plus à faire aujourd'hui ajouté au fichier abe à l'enregistrement et recréé à la réouverture de l'abe.
Pour un type d'exercice donné, si la consigne est cochée dans l'éditeur elle va s'afficher, et si le fichier correspondant existe dans dossierTemp/data/instruction/ l'AbulEduMultiMediaV1 permettra de le lire sur l'AbulEduExerciceWidgetMessageV1.
On pourra dans un second temps puisqu'on a une consigne par défaut pour chaque exercice ajouter un enregistrement par défaut, correspondant à la lecture par quelqu'un d'autre que moi de cette consigne.

La lecture vocale du mot attendu dans les exercices (TTS par défaut, possibilité d'enregistrement)

A chaque image sont associés deux mots : le mot qui doit être correctement orthographié dans l'exercice Orthographe, et le mot qui doit être associé à une image dans les 3 exercices de type Association.
Ces mots sont choisis dans la page de paramétrage. J'avais prévu au début des cases à cocher comme dans ALLER pour indiquer si le type d'exercice était présent dans le module, je les ai transformées en QRadioButton ce qui me permet d'avoir le QGroupBox correspondant au type d'exercice actif ou pas. Quand je coche le QRadioButton correspondant à un type d'exercice, le QGroupBox correspondant devient accessible j'insère l'audioControlWidget dans le layout de la QFrame frmSound... prévue pour.
J'avais dans une première implémentation prévu d'enregistrer comme data du QListWidgetItem qui porte mon image 4 informations : le chemin de l'enregistrement du mot orthographe, le chemin de l'enregistrement du mot association, et deux booléens indiquant si on utilise la synthèse vocale pour chacun des types d'exercice.
Je simplifie en n'enregistrant que les chemins des enregistrements : s'ils sont vides je suis en synthèse vocale, sinon c'est que je souhaite les utiliser.
Je pourrai toujours si finalement c'est mieux de pouvoir n'être pas content de son enregistrement et souhaiter revenir à la synthèse vocale enregistrer dans le QSettings si la case est cochée ou pas ...
De plus, la cache à cocher et l'audioControlWidget pour association ne sont accessibles que si le mot est différent de celui d'_orthographe_ : l'idée c'est que, si c'est le même, je ne vais pas le réenregistrer.
Donc quand j'arrive sur un mot
  • c'est le QRadioButton orthographe qui est coché et son QGroupBox accessible, et la variable qui porte la valeur de mon enum est mise à orthographe
  • si je n'ai pas de fichier correspondant à
    ui->lwSelectionBis->selectedItems().at(0)->data(Qt::UserRole+5).toString())
    

    (soit parce que la QString est vide, soit parce que le fichier n'existe pas) je dois avoir la case TTS cochée, je fais un abeMultimediaSetTTS(AbulEduMultiMediaSettingsV1::fre) à mon AbulEduMultiMediaV1 (en attendant une gestion plus fine des langues), et je lui passe comme newMedia AbulEduMediaMedias(QString(),QString(),ui->leOrtographe->text());
  • dans le cas contraire, ma case TTS doit être décochée, je fais un abeMultimediaSetTTS(AbulEduMultiMediaSettingsV1::None) à mon AbulEduMultiMediaV1, et je lui passe comme newMedia AbulEduMediaMedias(QString(),mon fichier enregistré en Qt::UserRole+5,QString()).
  • Si la case était cochée mais que je la décoche, je dois mettre monAbulEduMultiMediaV1 en non TTS, construire un chemin d'enregistrement vers dossierTemp/data/sons/ avec le mot orthographe+".ogg" et le passer comme chemin d'enregistrement au QAudioRecorder ET comme chemin de lecture à l'AbulEduAudioPlayerV1. Sur le slotRecordingStopped, il faudra que j'enregistre ce son pour mon QListWidgetItem comme data en Qt::UserRole+5 mais aussi si le mot association est vide ou identique au mot orthographe en Qt::UserRole+6
  • Quand je clique sur le QRadioButton association, la variable qui porte la valeur de mon enum est mise à association
    • si le mot association est identique au mot orthographe ma case TTS et mon audioControlWidget (qui quand même en cas doit être inséré dans le layout de la QFrame frmSoundAssociation) sont cachés
    • dans ce cas, si je modifie le mot association, ma case TTS et mon audioControlWidget apparaissent, je mets QString() au Qt::UserRole+6, je mets monAbulEduMultiMediaV1 en non TTS, je construis un chemin d'enregistrement vers dossierTemp/data/sons/ avec le mot association+".ogg" et je le passe comme chemin d'enregistrement au QAudioRecorder ET comme chemin de lecture à l'AbulEduAudioPlayerV1. Sur le slotRecordingStopped, il faudra que j'enregistre ce son pour mon QListWidgetItem comme data en Qt::UserRole+6
    • si le mot association est différent du mot orthographe ma case TTS et mon audioControlWidget sont visibles,
      • si je n'ai pas de fichier correspondant à
        ui->lwSelectionBis->selectedItems().at(0)->data(Qt::UserRole+6).toString())
        

        (soit parce que la QString est vide, soit parce que le fichier n'existe pas) je dois avoir la case TTS cochée, je fais un abeMultimediaSetTTS(AbulEduMultiMediaSettingsV1::fre) à mon AbulEduMultiMediaV1 (en attendant une gestion plus fine des langues), et je lui passe comme newMedia AbulEduMediaMedias(QString(),QString(),ui->leOrtographe->text())
      • dans le cas contraire, ma case TTS doit être décochée, je fais un abeMultimediaSetTTS(AbulEduMultiMediaSettingsV1::None) à mon AbulEduMultiMediaV1, et je lui passe comme newMedia AbulEduMediaMedias(QString(),_mon fichier enregistré en Qt::UserRole+6,QString())_.
Redmine Appliance - Powered by TurnKey Linux