Voici une modification pour que Svxlink sache dire les nombres de 1000 à 9999.
Vous allez vous dire, mais pourquoi faire, et bien dans mon cas c’est pour la pression atmosphérique des données météo.
Je n’avais pas vu avant car dans ma vidéo sur ce sujet précedent j’étais en dessous de 1000.
Pour appliquer cette modification, il est nécessaire d’éditer le fichier suivant:
/usr/share/svxlink/sounds/fr_FR/events.d/locale.tcl
Ce fichier a été travaillé par F1SMF en 2011 et depuis, je l’ai également fait évoluer. Il est utile pour améliorer la diction en français des chiffres en autre.
J’ai volontairement fait une ligne par millier pour une meilleure qualité vocale.
Nous utilisons l’index0 (1er caractère de la chaine) puis allons lire la tranche de millier qui lui correspond. Le reste repasse dans la boucle de lecture de chiffre standard.
Si un 0 est en 2ème position il sera ignoré, la lecture des décimales se fera directement.
Il sera bien sûr nécessaire d’ajouter les sons 1000 à 9000.wav dans le repertoire Default.
/usr/share/svxlink/sounds/fr_FR/Default/
Dans votre programme Svxlink, on utilisera la commande playFourDigitNumber suivi de votre variable ou de votre nombre à lire.
Ex: playFourDigitNumber $pression;
code source à insérer dans locale.tcl:
[sourcecode language=”bash”]
#
# Say the specified three digit number (1000 – 9999)
#
proc playFourDigitNumber {number} {
if {[string length $number] != 6} {
puts "*** WARNING: Function playFourDigitNumber received a non four digit number:$
return;
}
set first [string index $number 0];
if {($first == "1")} {
playMsg "Default" "1000";
} elseif {($first == "2")} {
playMsg "Default" "2000";
} elseif {($first == "3")} {
playMsg "Default" "3000";
} elseif {($first == "4")} {
playMsg "Default" "4000";
} elseif {($first == "5")} {
playMsg "Default" "5000";
} elseif {($first == "6")} {
playMsg "Default" "6000";
} elseif {($first == "7")} {
playMsg "Default" "7000";
} elseif {($first == "8")} {
playMsg "Default" "8000";
} elseif {($first == "9")} {
playMsg "Default" "9000";
}
set first [string index $number 1];
if {($first == "0") || ($first == "O")} {
playNumber [string range $number 2 5];
} else {
playNumber [string range $number 1 5];
}
}
[/sourcecode]
Juan
Il est déconseillé de modifier directement le fichier de logiciel. Svxlink prends en compte une copie de fichier TCL que l’on place dans un sous répertoire local/
Pour ton exemple il s’agit de modifier une copie du fichier :/usr/share/svxlink/sounds/fr_FR/events.d/local/locale.tcl