来自命令行的 ms 语音
Posted
技术标签:
【中文标题】来自命令行的 ms 语音【英文标题】:ms speech from command line 【发布时间】:2010-11-05 15:42:28 【问题描述】:有没有办法从命令行使用 MS Speech 实用程序?我可以在 mac 上完成,但在 Windows XP 上找不到任何参考。
【问题讨论】:
相关:askubuntu.com/questions/53896/natural-sounding-text-to-speech 相关:askubuntu.com/questions/21811/… 【参考方案1】:我在主题上的 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"
Ubuntu 桌面 (>=2015) 使用原生 spd-say
spd-say "hello"
在任何其他 Linux 上
参考How to text-to-speech output using command-line? 命令行函数using google TTS (wget to mp3->mplayer) 使用谷歌命令with mplayer directly:/usr/bin/mplayer -ao alsa -really-quiet -noconsolecontrols "http://translate.google.com/translate_tts?ie=UTF-8&client=tw-ob&q=Hello%20World&tl=en"
;
在 Raspberry Pi、Win、OSX(或任何远程)上使用 Node-Red
npm i @987654324@
【讨论】:
哇,这是一个很棒的答案 当我运行 mshta 命令时,我得到一个拒绝访问响应。 @ColorCodin 听起来像是,您需要在提升的环境中运行它。就像以管理员身份运行“cmd.exe”或为所有用户授予对 mshta.exe 的访问权限。 如何在 Windows 上使用 mshta.exe 更改音频输出设备? @MacMarde 你会在 *** 中搜索“vbscript 更改音频输入”或类似的东西【参考方案2】:有一个很好的开源程序可以在 Windows 上完成您所要求的工作,称为 Peter's Text to Speech,可在此处获得:http://jampal.sourceforge.net/ptts.html
它包含一个名为 ptts.exe 的二进制文件,它将从标准输入中读出文本,因此您可以像这样运行它:
echo hello there | ptts.exe
或者,您可以使用以下三行 VBS 脚本来获得类似的基本 TTS:
'say.vbs
set s = CreateObject("SAPI.SpVoice")
s.Speak Wscript.Arguments(0), 3
s.WaitUntilDone(1000)
你可以像这样从命令行调用它:
cscript say.vbs "hello there"
如果您使用脚本路线,您可能希望找到一些更广泛的代码示例,其中包含可变超时和错误处理。
希望对你有帮助。
【讨论】:
您可以安装彼得的文本转语音程序Jampal,然后执行ptts.vbs文件播放文本文件。您选择的声音需要已经安装在 Windows 中。示例:C:\Program Files\Jampal>cscript "c:\program files\jampal\ptts.vbs" -voice "IVONA Amy" < raven.txt
和 C:\Program Files\Jampal>cscript "c:\program files\jampal\ptts.vbs" -voice "IVONA Jennifer" < raven.txt
【参考方案3】:
如果找不到命令,您可以随时将 .Net 3.0 中的 System.Speech.Synthesis.SpeechSynthesizer 包装起来(不要忘记引用“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);
【讨论】:
使用 github.com/oleg-shilo/cs-script 这可以在命令行中使用,无需编译也无需 Visual Studio【参考方案4】:还有一种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"
【讨论】:
【参考方案5】:还有 Balabolca: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 上尝试了它,并在 Wine 中安装了 SAPI5。它工作得很好。
【讨论】:
【参考方案6】: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
【讨论】:
【参考方案7】:您最好的方法是编写一个小型命令行实用程序来为您执行此操作。这不会是很多工作 - 只需读取文本,然后使用 ms tts 库。
另一种选择是使用Cepstral。它带有一个不错的命令行实用程序,听起来比 ms tts 好几年。
【讨论】:
以上是关于来自命令行的 ms 语音的主要内容,如果未能解决你的问题,请参考以下文章
来自命令行的颠覆(svn):任何一个“反映所有更改”的命令?