Pour ma curiosité non commerciale, je suis intéressé par la transformation d'une partie de l'œuvre de Lewis Carroll en discours généré par une machine. Lors de l'envoi de la sortie vers un appareil audio, les say
La commande peut le faire même avec de très grandes quantités d'entrées :
$ wc ~/Downloads/lewis-carroll.txt
7066 55439 311589 /Users/xxxx/Downloads/lewis-carroll.txt
$ date; time say -f ~/Downloads/lewis-carroll.txt; date
Wed Oct 3 00:24:38 EDT 2018
real 368m11.986s
user 0m0.009s
sys 0m0.011s
Wed Oct 3 06:32:50 EDT 2018
Lors de l'envoi de la sortie vers un fichier, il semble également fonctionner avec de très petites quantités de texte en entrée :
$ date; head -c 310 ~/Downloads/lewis-carroll.txt | time say -o lewis-carroll.aac; date; ls -l lewis-carroll.aac
Thu Oct 4 08:46:18 EDT 2018
0.17 real 0.08 user 0.02 sys
Thu Oct 4 08:46:18 EDT 2018
-rw-r--r-- 1 xxxx staff 81426 Oct 4 08:46 lewis-carroll.aac
Avec plus d'entrées, ça ne fonctionne pas :
$ date; time head -c 311 ~/Downloads/lewis-carroll.txt | say -o lewis-carroll.aac; date; ls -l lewis-carroll.aac
Thu Oct 4 08:46:40 EDT 2018
(hangs !)
^C
real 0m30.243s
user 0m0.090s
sys 0m0.028s
Thu Oct 4 08:47:11 EDT 2018
-rw-r--r-- 1 xxxx staff 80865 Oct 4 08:46 lewis-carroll.aac
Ce n'est que le début des problèmes. D'autres tentatives d'exécuter say
se bloque également, quelle que soit la taille de l'entrée ou l'endroit où la sortie est censée aller (par ex, say Hello
). Pire encore, dès que les premiers say
se bloque, Chrome commence à faire de la plage. Heureusement, il existe une solution de contournement simple pour rétablir le fonctionnement normal du système :
$ pkill speechsynthesisd say
(Solution de contournement trouvée ici .)
Je peux comprendre qu'Apple veuille imposer des limites de débit (ou autre chose) à la synthèse vocale, pour empêcher les gens de générer des livres audio bon marché. (Ce qui serait bien ; ce n'est pas ce que j'essaie de faire.) Ce serait une façon assez horrible de mettre en œuvre la limitation du débit.
Je ne comprends pas que cette défaillance soit telle que d'autres logiciels (comme Chrome) soient perturbés.
J'ai fait quelque chose comme ça en 2012 (sur quelques kilooctets de texte) sans rencontrer ce genre de problème. Je n'ai pas assez d'historique pour reproduire cela.
Y a-t-il un moyen de contourner ce problème ?
Exécuter sur : MacOS 10.13.6 (17G65)
Mise à jour :
Comme @ashley, je suis capable de convertir une grande partie du dictionnaire en parole :
$ date; time head -c 2000 /usr/share/dict/words | say -o words.aac; date; ls -l words.aac
Mon Oct 8 09:54:50 EDT 2018
real 0m2.552s
user 0m0.555s
sys 0m0.111s
Mon Oct 8 09:54:53 EDT 2018
-rw-r--r-- 1 xxxx staff 543542 Oct 8 09:54 words.aac
En regardant plus attentivement mon entrée, j'ai découvert qu'elle était au format DOS (les lignes se terminent par CR-LF) au lieu du format Unix natif de MacOS (les lignes se terminent par LF). J'ai fait une copie dans ce dernier format, en supprimant six caractères CR du début de mon fichier ... et maintenant say
peut gérer six caractères de moins avant de se suspendre :
$ date; head -c 304 ~/Downloads/lewis-carroll-lf.txt | time say -o lewis-carroll.aac; date; ls -l lewis-carroll.aac
Mon Oct 8 09:49:51 EDT 2018
0.18 real 0.09 user 0.02 sys
Mon Oct 8 09:49:52 EDT 2018
-rw-r--r-- 1 xxxx staff 81426 Oct 8 09:49 lewis-carroll.aac
$ date; head -c 305 ~/Downloads/lewis-carroll-lf.txt | time say -o lewis-carroll.aac; date; ls -l lewis-carroll.aac
Mon Oct 8 09:49:55 EDT 2018
Command terminated abnormally.
29.72 real 0.09 user 0.02 sys
Mon Oct 8 09:50:25 EDT 2018
-rw-r--r-- 1 xxxx staff 80865 Oct 8 09:49 lewis-carroll.aac
(J'ajouterai plus d'informations sur mon apport à la fin de cette question).
Quant aux autres suggestions de @ashley :
-
J'ai essayé de diviser l'entrée en petits fichiers et de les convertir individuellement. C'est très utile pour explorer ce avec quoi je joue. Je dois franchir de très nombreux obstacles pour que cela fonctionne. (Je peux documenter cela davantage si cela peut aider).
-
J'espérais pouvoir faire tout cela à partir de la ligne de commande, sans avoir recours à la capture audio. C'est peut-être ma meilleure option pour créer un gros fichier audio.
-
Je peux reproduire ce problème avec la voix d'Alex -- la voix par défaut pour moi, et ma préférence pour le moment -- mais pas avec la voix de Daniel (bien que j'obtienne 79699 au lieu de 69867) :
$ date; head -c 305 ~/Downloads/lewis-carroll-lf.txt | time say -v Daniel -o lewis-carroll.aac; date; ls -l lewis-carroll.aac Mon Oct 8 19:53:11 EDT 2018 0.68 real 0.08 user 0.03 sys Mon Oct 8 19:53:11 EDT 2018 -rw-r--r-- 1 xxxx staff 79699 Oct 8 19:53 lewis-carroll.aac $ date; head -c 305 ~/Downloads/lewis-carroll-lf.txt | time say -v Alex -o lewis-carroll.aac; date; ls -l lewis-carroll.aac Mon Oct 8 19:53:21 EDT 2018 Command terminated abnormally. 21.75 real 0.08 user 0.02 sys Mon Oct 8 19:53:43 EDT 2018 -rw-r--r-- 1 xxxx staff 80865 Oct 8 19:53 lewis-carroll.aac
Cela suggère une solution de contournement évidente..... Je vais l'essayer dans un petit moment.
Voici ma contribution actuelle :
$ head -n 11 ~/Downloads/lewis-carroll-lf.txt
Alice was beginning to get very tired of sitting by her sister on the
bank, and of having nothing to do: once or twice she had peeped into the
book her sister was reading, but it had no pictures or conversations in
it, 'and what is the use of a book,' thought Alice 'without pictures or
conversations?'
So she was considering in her own mind (as well as she could, for the
hot day made her feel very sleepy and stupid), whether the pleasure
of making a daisy-chain would be worth the trouble of getting up and
picking the daisies, when suddenly a White Rabbit with pink eyes ran
close by her.
$ head -n 11 ~/Downloads/lewis-carroll-lf.txt | od -c
0000000 A l i c e w a s b e g i n n
0000020 i n g t o g e t v e r y
0000040 t i r e d o f s i t t i n g
0000060 b y h e r s i s t e r o
0000100 n t h e \n b a n k , a n d
0000120 o f h a v i n g n o t h i n
0000140 g t o d o : o n c e o r
0000160 t w i c e s h e h a d p
0000200 e e p e d i n t o t h e \n b
0000220 o o k h e r s i s t e r w
0000240 a s r e a d i n g , b u t
0000260 i t h a d n o p i c t u r
0000300 e s o r c o n v e r s a t i
0000320 o n s i n \n i t , ' a n d
0000340 w h a t i s t h e u s e
0000360 o f a b o o k , ' t h o u
0000400 g h t A l i c e ' w i t h o
0000420 u t p i c t u r e s o r \n c
0000440 o n v e r s a t i o n s ? ' \n \n
0000460 S o s h e w a s c o n s i
0000500 d e r i n g i n h e r o w
0000520 n m i n d ( a s w e l l
0000540 a s s h e c o u l d , f o
0000560 r t h e \n h o t d a y m a
0000600 d e h e r f e e l v e r y
0000620 s l e e p y a n d s t u p
0000640 i d ) , w h e t h e r t h e
0000660 p l e a s u r e \n o f m a k
0000700 i n g a d a i s y - c h a i
0000720 n w o u l d b e w o r t h
0000740 t h e t r o u b l e o f
0000760 g e t t i n g u p a n d \n p
0001000 i c k i n g t h e d a i s i
0001020 e s , w h e n s u d d e n l
0001040 y a W h i t e R a b b i t
0001060 w i t h p i n k e y e s
0001100 r a n \n c l o s e b y h e r
0001120 . \n
0001122
1 votes
Il semble que j'obtienne des tailles de fichiers de sortie différentes des vôtres. Quelle voix avez-vous sélectionnée dans Préférences système > Parole > Voix système ?
1 votes
J'ai Anglais (Royaume-Uni) > Daniel sélectionné. Encore une fois, je ne peux pas reproduire les blocages, cette fois en utilisant
lewis-carroll-lf.txt
copié à partir de votre mise à jour.say
sur les 304 premiers caractères me donne un69867
octet.aac
alors qu'il semble vous donner81426
des octets. Alors : notre décalage est-il la voix, peut-être ? Qu'est-ce que vous obtenez si vous passez à Daniel ?