3.Sound

Cette solution comporte un module Dfplayer, avec une carte SD pour les sons et un amplificateur.
Le tout est commandé par une liaison serie (uart) fournie par le microprocesseur UI.
La dictée de nombres a été écrite en python sur base des programmes C++ de V5.

Format sd card

Formater obligatoirement avec https://www.sdcard.org/downloads/
Ceci est la version linux:
https://www.sdcard.org/downloads/sd-memory-card-formatter-for-linux/
Utilisation par mon laptop:

  • download dans /mnt/data/Software/C_Soft_Lin/SD_Format
  • sudo ./format_sd -l SND /dev/mmcblk0
  • créer un folder 01
  • réalisé le 8/3/2024 sur la carte '1', Fat32

Générer les sons

la procédure 2_wav_robert utilise le programme pico2wave pour transformer une liste de textes en fichiers '.WAV,' avec le programme sox pour ajuster les fins de fichier.
Ces programmes sont spécifiques à linux.
On peut également utiliser un programme tel que Audacity pour dicter chaque message.

J'ai un folder 'SND_special' avec des bruits spéciaux.

Il faut créer ou vider le folder 'SND', y ajouter les bruits spéciaux puis utiliser 2_wav_robert pour créer tous les autres sons.
Les fichiers .wav sont écrits en 16khz mono

Fichier index des sons

Dfplayer est bizarre: il n'utilise pas le nom du fichier, seulement l'ordre dans lequel ils ont été écrits sur une carte sd fraîchement formatée.
Utiliser le programme df_load.py pour écrire un à un chaque fichier du folder 'SND' sur la carte SD. Ce programme crée un dictionnaire qu'il écrit dans le folder de développement sous le nom defindex.json.

key = 'nom du fichier'
contenu=

  • numéro de suite en 4 chiffres => nom de fichier xxxx.wav
  • id folder( supports up to 100 folders, every folder can hold up to 255 songs) attention , ce programme ne vérifie pas encore la limite de 255 fichiers par folder
  • texte qui a été fourni à pico2wave serait utile. Ajouter cette information et sans doute modifier la procédure 2_wav

Dictée

Message

Un programme envoie un message sous la forme d'une liste dont les éléments sont recopiés tels que vers le lcd , chaque élément de la liste est affiché sur une ligne de l'écran.

  • un string est une clé du fichier index, qui fournit le numéro de fichier pour Dfplayer.
  • un string qui représente un nombre avec éventuellement quelques décimales
    • partie entière
    • séparateur 'point'
    • partie fractionnaire avec au choix 1,2 ou 3 décimales

Base software

driver dfplayer.py

Utilisé pour commander le module dfplayer.
Dfplayer.py : https://github.com/ShrimpingIt/micropython-dfplayer/blob/master/dfplayer.py
Il comporte un main() utilisé pour valider la génération des sons

Conversion nombre-> str

Le programme sound.py traite ce 'nombre' et le transforme en une suite d'index des fichiers son , qui sont écrites dans une file d'attente (liste dfq) .
Cette file d'attente est vidée par le driver dfplayer, normalement avec asyncio.
Inspiré par les programmes V5 ..core/sound.cpp et sound_fr.cpp ,voir RCCL_N2W
La division entière existe en python avec // 1000//3 => 333

Sons 'chantés' pour le vario

Base Hardware

dfrobot.png pins
Le processeur UI est un microprocesseur pico.
La liaison serial avec le processeur de calcul utilise UART0.
La liaison avec Dfrobot utilise UART1 :

  • Tx du pico(GP4)reliée à pin Rx du Dfplayer
  • GP2 relié à la pin 'busy'
  • VSYS (pico) relié à VCC, ou VBUS pour le test
  • GND (pico) relié aux 2 GND du Dfplayer
  • HP relié entre SPK1 et SPK2
  • une oreillette reliée entre DAC1 et GND