JossAlf Posté(e) le 9 octobre 2015 Signaler Posté(e) le 9 octobre 2015 Je viens de tomber sur ce site alors que google translate me jouait encore des tours (limitation avec demande de captcha). http://www.voicerss.org. Il y a une API et plein de doc. Je me suis inscrit mais ce n'est pas vraiment utile pour l'utilisation que je veux en faire : générer des fichiers MP3 pour le diffuser sur mes squeezebox (ou sur tout autre système audio Sonos en tête) En version gratuite on a droit à 350 générations de TTS par jour avec l'API. Ca devrait nous suffire pour le moment. Mais je ne sais pas si le fait d'utiliser une commande http rentre dans cette limitation de l'utilisation avec l'API (à tester donc). On peut jouer sur différents paramètres : voir la doc ici (http://www.voicerss.org/api/documentation.aspx) la langue (canada) : hl=fr-ca -> si omis c'est en anglais le codec (mp3, WAV,AAC ...) : c=AAC -> si omis le mp3 est par défaut l'échantillonnage : f=16khz_16bit_stereo -> si omis, c'est 8 kHz, 8 Bit, Mono par défaut Exemple qui annonce "ouverture du portail" en français au format AAC en 16Khz : http://www.voicerss.org/controls/speech.ashx?hl=fr-fr&c=aac&f=16khz_16bit_stereo&src=Ouverture%20du%20portail Voici un exemple de code qui utilise voiceRSS (ça se passe ligne 99 pour le lien vers VoiceRSS). Ce code peut être placé dans un bouton d'un virtual device. On pourra l'appeler au moment de se coucher ou de fermer la maison. Le code vérifie l'état des portes et annonce en TTS sur un squeezebox qu'"elles sont toutes fermées" ou que l'une ou plusieurs sont ouvertes en les nommant. L'intérêt de la TTS c'est que le code est dynamique et qu'il fabrique la phrase en fonction de la situation : "Toutes les portes sont fermées" "Attention la porte d'entrée me semble ouverte". "Attention il y a X portes ouvertes. Celle de la XX, et de YY, et du ZZ." -> "Attention il y a 3 portes ouvertes. Celle de la cuisine, et de l'entrée, et du portail." NB : pour que la synthèse vocale soit agréable à écouter il faut parfois jouer sur l'orthographe. Exemple : "Attention a la porteu d'entrai elle me semble ouverte ." Je n'ai pas tout vérifié avec voiceRSS mais c'était le cas avec google. J'avoue que la TTS de google est un peu plus naturelle et agréable à entendre. Mais au moins cette solution fonctionne gratuitement 350 fois par jour ! -- Adresse IP du Logitech Media Server local ipadd = "192.168.0.46" -- le port du serveur local portno = 9090 -- L'adresse MAC de la squeeze local player = "00:xx:xx:29:xx:3e " local playername = "SqueezeBox " -- réglage du niveau sonore local NiveauSo = 35 local notification = "" local NombrePorte = 0 -- 32 Garage if tonumber(fibaro:getValue(305, "value")) > 0 then NombrePorte = NombrePorte + 1 if NombrePorte > 1 then notification = notification.." et du garage ." else notification = notification.." du garage ." end end -- 34 Chambre bas if tonumber(fibaro:getValue(307, "value")) > 0 then NombrePorte = NombrePorte + 1 if NombrePorte > 1 then notification = notification.." et de la chambre du bas ." else notification = notification.." de la chambre du bas ." end end -- 38 Entrée principale if tonumber(fibaro:getValue(313, "value")) > 0 then NombrePorte = NombrePorte + 1 if NombrePorte > 1 then notification = notification.." et de lentrer ." else notification = notification.." de lentrer ." end end -- 39 cuisine du bas if tonumber(fibaro:getValue(330, "value")) > 0 then NombrePorte = NombrePorte + 1 if NombrePorte > 1 then notification = notification.." et de la cuisine du bas ." else notification = notification.." de la cuisine du bas ." end end -- 45 portail if tonumber(fibaro:getValue(45, "value")) > 0 then NombrePorte = NombrePorte + 1 if NombrePorte > 1 then notification = notification.." et du portail ." else notification = notification.." du portail ." end end -- Si il n'y a pas de porte ouverte : if NombrePorte == 0 then notification = "Toutes les porte sont fermer." end -- Si il n'y a qu'un porte ouverte : if NombrePorte == 1 then notification = "Attention a la porteu "..notification.." elle me semble ouverte ." end -- Si on a plusieurs portes ouvertes : if NombrePorte > 1 then notification = "Attention il y a "..NombrePorte.." porte ouverte . Celle "..notification end -- Allumage de la squeezebox local cmnd = "Power 1 " local stringtosend = player .. cmnd .. string.char(10) tcpSocket = Net.FTcpSocket(ipadd, portno) tcpSocket:setReadTimeout(2*1000) bytes, errorCode = tcpSocket:write(stringtosend) -- On règle le volume sonore ici 35 local cmnd = "mixer volume " .. NiveauSo .. " " local stringtosend = player .. cmnd .. string.char(10) tcpSocket = Net.FTcpSocket(ipadd, portno) tcpSocket:setReadTimeout(2*1000) bytes, errorCode = tcpSocket:write(stringtosend) -- On envoie le message local notification = string.gsub((notification)," ", "%%20"); --on remplace les espaces par %20 fibaro:debug(notification) local cmnd = "playlist play http://www.voicerss.org/controls/speech.ashx?hl=fr-fr&src=" .. notification; local stringtosend = player .. cmnd .. string.char(10) tcpSocket = Net.FTcpSocket(ipadd, portno) tcpSocket:setReadTimeout(2*1000) bytes, errorCode = tcpSocket:write(stringtosend) -- OFF de la squeezeBox après 10 secondes fibaro:sleep(10*1000) local cmnd = "power 0 " local stringtosend = player .. cmnd .. string.char(10) tcpSocket = Net.FTcpSocket(ipadd, portno) tcpSocket:setReadTimeout(2*1000) bytes, errorCode = tcpSocket:write(stringtosend) Amusez-vous bien 6
JossAlf Posté(e) le 9 octobre 2015 Auteur Signaler Posté(e) le 9 octobre 2015 POur en revenir au code du tutot Emission Simplifiée Sur Squeezebox Tts Ou Mp3 . Voici les 2 syntaxes : --Google Translate TTS local cmnd = "playlist play http://translate.google.com/translate_tts?tl=FR&ie=UTF-8&client=t&q=" .. notification; --Voicerss TTS local cmnd = "playlist play http://www.voicerss.org/controls/speech.ashx?hl=fr-fr&src=" .. notification;
jojo Posté(e) le 9 octobre 2015 Signaler Posté(e) le 9 octobre 2015 pour générer des mp3 (pas du vrai TTS "live" donc, car pas d'API), j'utilise simplement ceci http://text2speech.us/# 2
pepite Posté(e) le 9 octobre 2015 Signaler Posté(e) le 9 octobre 2015 Sympa le boulot, L'avantage du TTS, c'est qu'on peut faire un peu ce qu'on veut au niveau message, mais c'est marrant, je ne l'utilise pas mais je serais plutot mp3, mais tout a préparer au préalable avec text2speech vivement que j'utilise cela ;-)
jojo Posté(e) le 9 octobre 2015 Signaler Posté(e) le 9 octobre 2015 j'utilise des mp3 pour diffuser un message fixe, type "les enfants, à table !", "l'alarme de nuit est activée et une porte extérieure est ouverte", ... Cela à l'avantage de ne pas dépendre de l'internet, ni pas de latence. Si tu veux faire un message dynamique style "Bonjour, il fait 10 degrés" tu dois passer par le TTS et la latence qui va avec
pepite Posté(e) le 9 octobre 2015 Signaler Posté(e) le 9 octobre 2015 oui j'avais bien compris @jojo, merci pour l'explication, ca fait du bien un petit rafraichissement de neurones C'est la latence du TTS qui me gene ;-)
Shyrka973 Posté(e) le 9 octobre 2015 Signaler Posté(e) le 9 octobre 2015 @JossAlf Merci. Je vais le rajouter comme secours dans le Karotz. Si on a réellement doit à 350 générations quotidiennes, c'est largement suffisant pour utilisation de tous les jours. @jojo Pour les messages dynamiques, il suffit de mettre en place un cache pour éviter d'interroger le service à nouveau pour les mêmes phrases. Dans le cache, on stocke la phrase demandée et le mp3 généré. Le TTS du Karotz fonctionne sur ce principe.
pepite Posté(e) le 9 octobre 2015 Signaler Posté(e) le 9 octobre 2015 @Shyrka : comment tu crees le cache . car dans ce cas la, plus de souci de latence, ni avec le TTS ni avec le MP3 ? 1
Moicphil Posté(e) le 9 octobre 2015 Signaler Posté(e) le 9 octobre 2015 Merci JossAlf pour le tuto. Peut tu éditer et ajouter un exemple de code dans le 1er post stp. ( c'est pour le blog ),
Shyrka973 Posté(e) le 9 octobre 2015 Signaler Posté(e) le 9 octobre 2015 Pour faire simple, tu as un script PHP (se nommant "tts" par exemple) hébergée sur ton NAS. Pour générer le mp3, tu appelles ce script avec comme paramètre la phrase à générer. Il vérifie que la phrase généré est dans le cache. Si c'est le cas, il revoit le mp3 correspondant se trouvant dans le cache et donc pas de latence. Sinon, il appelle le service TTS (Voicerss par exemple) pour générer le mp3 qu'il stocke dans le cache et le renvoie. Il aura donc une latence la première fois. Le Karotz utilise ce principe. On utilise la commande MD5 sur la phrase générée pour obtenir un ID unique qui sert de base pour créer les fichiers dans le cache. Je n'ai pas créer de script en PHP car j'utilise un Karotz. J'ai aussi adapté le script du Karotz pour le faire tourner sur un raspberry. Le tts est la fonction du Karotz que j'utilise le plus et comme il est assez difficile de trouver un Karotz, j'ai donc reporter cette fonction sur un raspberry. Le Karotz ne retourne pas de mp3; il le lit immédiatement. J'ai du adapter celui du raspberry pour qu'il puisse aussi retourner le mp3 au lieu de le lire quand je veux, pour l'utiliser avec le SONOS. Il n'est pas très compliquer de recréer ce script en PHP. On peut aussi imaginer d'utiliser un PC sous Windows ou Mac pour générer les phrases pour ceux qui ont un de ces environnements tournant 24h/24. En effet, le TTS des derniers OS (Windows et OSX) a fait d'énorme progrès.
Massalia Posté(e) le 9 octobre 2015 Signaler Posté(e) le 9 octobre 2015 @Shikra973 Pour OpenKarotz je vais le faire si tu veut.
jojo Posté(e) le 9 octobre 2015 Signaler Posté(e) le 9 octobre 2015 @Shyrka973, Massalia, Si vous pouviez nous faire un petit script / package du genre, que l'on puisse poster sur un Syno (voir ce que Lazer a fait pour ces graphes) et comment on pourrait l'inclure dans le VD sonos de Krikroff ce serait GRANDIOSE !
jorderic Posté(e) le 10 octobre 2015 Signaler Posté(e) le 10 octobre 2015 Je rejoins jojo, j'utilise beaucoup la fonction TTS du VD de Krikroff pour les SONOS et depuis quelques jours, c'est HS.... Donc si vous pouviez nous aider, ce serait génial!
Rem's Posté(e) le 10 octobre 2015 Signaler Posté(e) le 10 octobre 2015 Idem, c'est bien dommage ... Cela évite la surprise de voir monter les volets, ou la lumière s'allumée ...!!
i-magin Posté(e) le 10 octobre 2015 Signaler Posté(e) le 10 octobre 2015 Après 2 tests réussis ce matin du TTS Google sur SONOS et Squeeze Box, plus rien ne passe... avec erreur 503 affichée sur ma Squeezebox boom Google a donc verrouillé à nouveau les requêtes automatiques Merci @JossAlf pour cette nouvelle solution de TTS que je viens de tester sur squeezebox
JossAlf Posté(e) le 10 octobre 2015 Auteur Signaler Posté(e) le 10 octobre 2015 @moicphil je te fais ça dès que je trouve 10 minutes. Envoyé de mon iPhone àl'aide de Tapatalk
JossAlf Posté(e) le 10 octobre 2015 Auteur Signaler Posté(e) le 10 octobre 2015 Edition du premier message pour y ajouter un exemple en lua.
jorderic Posté(e) le 12 novembre 2015 Signaler Posté(e) le 12 novembre 2015 @JossAlf: Juste pour te remercier de tes contributions sur la squeezebox ! Avec un peu d'adaptation, j'ai monté un Raspberry avec un carte DAC hifiberry et du coup j'ai un système de diffusion des TTS et mp3 ànouveau parfaitement fonctionnel! (àla place de la diffusion sur les sonos)
sebcbien Posté(e) le 21 décembre 2015 Signaler Posté(e) le 21 décembre 2015 @Shikra973 Pour OpenKarotz je vais le faire si tu veut. Bonjour Massalia, Shikra973, Je suis nouveau avec la Karotz, j'ai réussi à le faire fonctionner en"local" via l'api du karotz et openkarotz (j'en profite pour te remercier du super boulôt,ça marche au poil) Par contre avec voicerss, je ne vois pas comment faire fonctionner ce service avec le karotz. il faut un php ou ça peut fonctionner juste avec la HC2 ?
Shyrka973 Posté(e) le 30 janvier 2016 Signaler Posté(e) le 30 janvier 2016 Bonjour, Je constate que le TTS du Karotz ne fonctionne plus depuis une ou deux semaines. Le TTS engine concerné est celui de Massalia: AcapelaTTS. J'ai donc ajouté Voicerss au Karotz. Il y a deux fichiers à modifier: /www/cgi-bin/tts et /www/cgi-bin/tts.inc Il faut ajouter cette fonction à tts.inc: function VoicerssTTS { TTS=$1 NOCACHE=$2 MUTE=$3 MD5FILE="" CURL_PARAM=$(echo "&hl=fr-fr&src="$TTS) MD5FILE=$(echo "$TTS" | md5sum | cut -d ' ' -f 1) echo $( echo \"$TTS\" | UrlDecode) > $CNF_DATADIR/Tmp/${MD5FILE}.txt eval $(echo "curl -A '${UA}' -o $CNF_DATADIR/Tmp/${MD5FILE}.mp3 --data '${CURL_PARAM}' http://www.voicerss.org/controls/speech.ashx" ) >>/dev/null 2>>/dev/null if [ "$5" != "1" ]; then Log "[TTS]" "Playing sound ${MD5FILE}.mp3" PlaySound $CNF_DATADIR/Tmp/${MD5FILE}.mp3 fi if [ "$NOCACHE" == "1" ]; then rm -f $CNF_DATADIR/Tmp/${MD5FILE}.mp3 >>/dev/null 2>>/dev/null rm -f $CNF_DATADIR/Tmp/${MD5FILE}.txt >>/dev/null 2>>/dev/null else Log "[TTS]" "Storing sound ${MD5FILE}.mp3 to cache" fi echo ${MD5FILE} } Et insérer sa référence ainsi dans tts: case $TTS_ENGINE in 1) MP3_ID=$(GoogleTTS $TTS $VOICE $NO_CACHE $RAW_VOICE);; 2) MP3_ID=$(VioletTTS $TTS $VOICE $NO_CACHE $RAW_VOICE);; 3) MP3_ID=$(VoicerssTTS $TTS $NO_CACHE $MUTE);; *) MP3_ID=$(AcapelaTTS $TTS $VOICE $NO_CACHE $RAW_VOICE $MUTE);; esac Vous pouvez ainsi appeler la fonction tes ainsi: http://karotz/cgi-bin/tts?engine=3&text=coucou Si le paramètre engine est omis, c'est AcapelaTTS qui est utilisé par défaut. Il est aussi très simple de rendre VoicerssTTS par défaut. Je préfère modifier la fonction TTS des VD Karotz en y ajoutant l'option engine. 1
sebcbien Posté(e) le 28 mai 2016 Signaler Posté(e) le 28 mai 2016 Merci beaucoup, ça marche toujours impec ! J'ai aussi ajouté un adaptateur Ethernet et maintenant mon Lapinou n'est plus jamais muet
Nozoum Posté(e) le 20 janvier 2017 Signaler Posté(e) le 20 janvier 2017 (modifié) Bonjour, Je rebondi sur ce sujet, certes ancien mais bon ça peut servir. L'API google fonctionne sans restriction mais il faut respecter une syntaxe et notamment ajouter un paramètre client dans l'URL et passer par le site .fr et pas .com sinon on a une erreur de réseau... Exemple d'URL: https://translate.google.fr/translate_tts?ie=UTF-8&q=message&tl=fr-FR&client=tw-ob Par contre étant donné que le VD de Krikroff ne fonctionne pas chez moi, je sais maintenant générer des mp3 à la volée mais pas les faire diffuser sur mes Sonos, je poursuis mes recherches. EDIT: Autre solution basée sur l'API Google mais sans les contraintes: https://google-translate-proxy.herokuapp.com/api/tts?query=Bonjour James. Il est 8 heures 30 minutes. Nous sommes le samedi 21 janvier 2017. Le temps est clair et la température extérieure est de moins 3 degrés celcius.&language=fr&speed=1.2 Cette solution fonctionne très bien, plus simple et presque plus rapide que la solution google native et en plus on peu régler la vitesse de dictée du texte Modifié le 20 janvier 2017 par Nozoum Ajout 2
Massalia Posté(e) le 21 janvier 2017 Signaler Posté(e) le 21 janvier 2017 Bonjour Je viens d'intégrer les modifcations pour que le TTS fonctionne, je publie ça dans la journée. 1
pepite Posté(e) le 21 janvier 2017 Signaler Posté(e) le 21 janvier 2017 Aucune contrainte? La reponse est plutot rapide?
Messages recommandés