web-dev-qa-db-fra.com

discours ms à partir de la ligne de commande

Existe-t-il un moyen d'utiliser l'utilitaire MS Speech à partir de la ligne de commande? Je peux le faire sur un Mac, mais je n'y trouve aucune référence sous Windows XP.

Merci.

27
MasterZ

Je ne pense pas qu'il existe un outil en ligne de commande pour cela, mais quelqu'un en a écrit un:

http://krolik.net/post/Say-exe-a-simple-command-line-text-to-speech-program-for-Windows.aspx

4
Lazy Bob

Mes 2 cents sur le sujet, les lignes de commande en ligne:

  • sur Win en utilisant PowerShell.exe

    PowerShell -Command "Add-Type –AssemblyName System.Speech; (New-Object System.Speech.Synthesis.SpeechSynthesizer).Speak('hello');"
    
  • sur Win en utilisant mshta.exe

    mshta vbscript:Execute("CreateObject(""SAPI.SpVoice"").Speak(""Hello"")(window.close)")
    
  • sous OSX en utilisant say

    say "hello"
    
  • Ubuntu Desktop (> = 2015) en utilisant natif spd-say

    spd-say "hello"
    
  • sur tout autre Linux

  • sur Raspberry Pi, Win, OSX en utilisant Node-Red

    npm i node-red-contrib-sysmessage

32
BananaAcid

Il y a un joli programme open source qui fait ce que vous demandez sous Windows appelé Peter's Text to Speech disponible ici: http://jampal.sourceforge.net/ptts.html

Il contient un binaire appelé ptts.exe qui prononcera du texte à partir de l'entrée standard, vous pouvez donc l'exécuter comme ceci:

echo hello there | ptts.exe

Alternativement, vous pouvez utiliser le script VBS à trois lignes suivant pour obtenir des TTS de base similaires:

'say.vbs
set s = CreateObject("SAPI.SpVoice")
s.Speak Wscript.Arguments(0), 3
s.WaitUntilDone(1000)

Et vous pouvez invoquer cela à partir de la ligne de commande comme ceci:

cscript say.vbs "hello there"

Si vous suivez la route des scripts, vous voudrez probablement trouver des exemples de code plus complets avec un délai d'attente variable et une gestion des erreurs.

J'espère que ça aide.

24
Chris Sears

Il existe également une méthode PowerShell:

Créez un fichier appelé speak.ps1

param([string]$inputText)
Add-Type –AssemblyName System.Speech 
$synth = New-Object System.Speech.Synthesis.SpeechSynthesizer
$synth.Speak($inputText);

Ensuite, vous pouvez l'appeler

.\speak.ps1 "I'm sorry Dave, I'm afraid I can't do that"
4
Andy Joiner

Si vous ne trouvez pas de commande, vous pouvez toujours envelopper le System.Speech.Synthesis.SpeechSynthesizer de .Net 3.0 (N'oubliez pas de faire référence à "System.Speech")

using System.Speech.Synthesis;

namespace Talk
{
    class Program
    {
        static void Main(string[] args)
        {
            using (var ss = new SpeechSynthesizer())
                foreach (var toSay in args)
                    ss.Speak(toSay);
        }
    }
}
3
Matthew Whited
rem The user decides what to convert here
 :input
 cls
 echo Type in what you want the computer to say and then press the enter key.
 echo.
 set /p text=

 rem Making the temp file
 :num
 set num=%random%
 if exist temp%num%.vbs goto num
 echo ' > "temp%num%.vbs"
 echo set speech = Wscript.CreateObject("SAPI.spVoice") >> "temp%num%.vbs"
 echo speech.speak "%text%" >> "temp%num%.vbs"
 start temp%num%.vbs
 pause
 del temp%num%.vbs
 goto input



pause
3
belcher

Il y a aussi Balabolca : http://www.cross-plus-a.com/bconsole.htm Il a une commande outil de ligne balcon.exe. Vous pouvez l'utiliser comme ceci:

  1. Liste des voix:

    balcon.exe -l
    
  2. Fichier Speak:

    balcon.exe -n "IVONA 2 Jennifer" -f file.txt
    
  3. Parlez à partir de la ligne de commande:

    balcon.exe -n "IVONA 2 Jennifer" -t "hello there"
    

D'autres options de ligne de commande sont disponibles. Je l'ai essayé sur Ubuntu avec SAPI5 installé dans Wine. Cela fonctionne très bien.

2
alex ivanov

Votre meilleure approche consiste à écrire un petit utilitaire de ligne de commande qui le fera pour vous. Ce ne serait pas beaucoup de travail - il suffit de lire le texte et d'utiliser la bibliothèque ms tts.

Une autre alternative consiste à utiliser Cepstral . Il est livré avec un utilitaire de ligne de commande Nice et sonne des années-lumière mieux que le ms tts.

2
Shane C. Mason