ms discorso dalla riga di comando
-
22-07-2019 - |
Domanda
Esiste un modo per utilizzare l'utilità MS Speech dalla riga di comando? Posso farlo su un Mac, ma non riesco a trovare alcun riferimento ad esso su Windows XP.
Grazie.
Soluzione
Non credo che ci sia uno strumento da riga di comando, ma qualcuno ne ha scritto uno:
http://krolik.net/post/Say-exe-a-simple-command-line-text-to-speech-program-for-Windows.aspx
Altri suggerimenti
I miei 2 centesimi sull'argomento, riga di comando a riga singola:
-
su Win usando
PowerShell.exe
PowerShell -Command "Add-Type –AssemblyName System.Speech; (New-Object System.Speech.Synthesis.SpeechSynthesizer).Speak('hello');"
-
su Win usando
mshta.exe
mshta vbscript:Execute("CreateObject(""SAPI.SpVoice"").Speak(""Hello"")(window.close)")
-
su OSX usando
say
say "hello"
-
Ubuntu Desktop (> = 2015) usando
nativospd-say
spd-say "hello"
-
su qualsiasi altro Linux
- fare riferimento a Come si può produrre un output di sintesi vocale utilizzando la riga di comando?
- funzione della riga di comando utilizzando google TTS (wget to mp3- > mplayer)
-
su Raspberry Pi, Win, OSX usando Node-Red
C'è un bel programma open source che fa quello che stai chiedendo su Windows chiamato Text's Speech di Peter disponibile qui: http://jampal.sourceforge.net/ptts.html
Contiene un file binario chiamato ptts.exe che pronuncia il testo dall'input standard, quindi è possibile eseguirlo in questo modo:
echo hello there | ptts.exe
In alternativa, è possibile utilizzare il seguente script VBS a tre righe per ottenere TTS di base simili:
'say.vbs
set s = CreateObject("SAPI.SpVoice")
s.Speak Wscript.Arguments(0), 3
s.WaitUntilDone(1000)
E puoi invocarlo dalla riga di comando in questo modo:
cscript say.vbs "hello there"
Se segui il percorso dello script, probabilmente vorrai trovare alcuni esempi di codice più estesi con timeout variabile e gestione degli errori.
Spero che sia d'aiuto.
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
Se non riesci a trovare un comando puoi sempre racchiudere System.Speech.Synthesis.SpeechSynthesizer da .Net 3.0 (Non dimenticare di fare riferimento a" 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);
}
}
}
Esiste anche un modo PowerShell:
Crea un file chiamato speak.ps1
param([string]$inputText)
Add-Type –AssemblyName System.Speech
$synth = New-Object System.Speech.Synthesis.SpeechSynthesizer
$synth.Speak($inputText);
Quindi puoi chiamarlo
.\speak.ps1 "I'm sorry Dave, I'm afraid I can't do that"
Il tuo approccio migliore è quello di scrivere una piccola utility da riga di comando che lo farà per te. Non richiederebbe molto lavoro: basta leggere il testo e quindi utilizzare la libreria ms tts.
Un'altra alternativa è utilizzare Cepstral . Viene fornito con una bella utility da riga di comando e suona anni luce meglio dei messaggi.
C'è anche Balabolca : http: // www. cross-plus-a.com/bconsole.htm
Ha uno strumento da riga di comando balcon.exe
. Puoi usarlo in questo modo:
-
Elenco voci:
balcon.exe -l
-
Pronuncia file:
balcon.exe -n "IVONA 2 Jennifer" -f file.txt
-
Parla dalla riga di comando:
balcon.exe -n "IVONA 2 Jennifer" -t "hello there"
Sono disponibili altre opzioni da riga di comando. L'ho provato su Ubuntu con SAPI5 installato in Wine. Funziona bene.