Есть ли способ использовать утилиту MS Speech из командной строки? Я могу сделать это на Mac, но не могу найти ссылки на него в Windows XP.
Спасибо.
Есть ли способ использовать утилиту MS Speech из командной строки? Я могу сделать это на Mac, но не могу найти ссылки на него в Windows XP.
Спасибо.
Я не думаю, что для этого есть инструмент командной строки, но кто-то написал один:
http://krolik.net/post/Say-exe-a-simple-command-line-text-to-speech-program-for-Windows.aspx
Мои 2 цента по теме, командная строка однострочные:
на Win с помощью PowerShell.exe
PowerShell -Command "Add-Type –AssemblyName System.Speech; (New-Object System.Speech.Synthesis.SpeechSynthesizer).Speak('hello');"
на Win с помощью mshta.exe
mshta vbscript:Execute("CreateObject(""SAPI.SpVoice"").Speak(""Hello"")(window.close)")
на OSX с помощью say
say "hello"
на любом другом Linux
на Raspberry Pi, Win, OSX с использованием Node-Red
Там хорошая программа с открытым исходным кодом, которая делает то, о чем вы просите в Windows, называется Peter Text to Speech: http://jampal.sourceforge.net/ptts.html
Он содержит двоичный файл ptts.exe, который будет читать текст со стандартного ввода, поэтому вы можете запускать его следующим образом:
echo hello there | ptts.exe
В качестве альтернативы вы можете использовать следующие три строки VBS script, чтобы получить аналогичные базовые TTS:
'say.vbs
set s = CreateObject("SAPI.SpVoice")
s.Speak Wscript.Arguments(0), 3
s.WaitUntilDone(1000)
И вы можете вызвать это из командной строки следующим образом:
cscript say.vbs "hello there"
Если вы перейдете по маршруту script, вы, вероятно, захотите найти более обширные примеры кода с тайм-аутом переменной и обработкой ошибок.
Надеюсь, что это поможет.
Если вы не можете найти команду, вы всегда можете обернуть System.Speech.Synthesis.SpeechSynthesizer из .Net 3.0 (не забудьте указать ссылку "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);
}
}
}
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
Существует также способ powershell:
Создайте файл с именем speak.ps1
param([string]$inputText)
Add-Type –AssemblyName System.Speech
$synth = New-Object System.Speech.Synthesis.SpeechSynthesizer
$synth.Speak($inputText);
Затем вы можете назвать его
.\speak.ps1 "I'm sorry Dave, I'm afraid I can't do that"
Ваш лучший подход - написать небольшую утилиту командной строки, которая сделает это за вас. Это не будет большой работой - просто прочитайте текст, а затем используйте библиотеку ms tts.
Другой альтернативой является использование Cepstral. Он поставляется с приятной утилитой командной строки и звучит светлее, чем мс tts.
Там также Балаболка: http://www.cross-plus-a.com/bconsole.htm У него есть инструмент командной строки balcon.exe
. Вы можете использовать это так:
Список голосов:
balcon.exe -l
Говорить файл:
balcon.exe -n "IVONA 2 Jennifer" -f file.txt
Говорите из командной строки:
balcon.exe -n "IVONA 2 Jennifer" -t "hello there"
Доступны дополнительные параметры командной строки. Я попробовал это на Ubuntu с установленным SAP Wine в Wine. Работает просто отлично.