Windows命令行下的TTS
Posted on 13 Dec 2014 WindowsSystemBatchTTS 添加评论Jampal mp3 Library中提供了一个命令行下的TTS,除了选项和MAC OSX下的say命令不大一样,功能上还是非常相似的。直接使用如下格式就能调用:
选项的解释如下:
选项 | 解释 |
---|---|
-w filename
|
创建一个wave文件,而不是直接输出到音频。输出文件将是CD音质的,44100Hz的16位立体声文件。可以使用-s 或-c 修改。
|
-m filename
|
以空行为分隔符,生成多个wave文件。自动添加五位的数字到文件名。 |
-r rate
|
阅读速度 -10 到 +10. 默认是0. |
-v volume
|
音量的百分比,默认是100. |
-s samples
|
采样率,默认是44100.可选采样率为 8000, 16000, 22050, 44100, 48000. |
-c channels
|
输出的声道数,默认为2。可设置为1或者2. |
-u filename
|
从文件而不是标准输入读入文件。文件可以是Unicode,ANSi或者默认编码的。可使用-e 选项指定。
|
-e encoding
|
指定输入文件的编码,可选项为ASCII,UTF-16LE. 默认为系统默认编码。 |
-voice xxxx
|
使用的TTS语音。 |
-vl
|
列出所有可用语音名称。 |
对于64位系统需要使用SysWow64中的cscript
,命令的形式需要修改为:
设置64bit系统的默认语音时,如果语音是32bit的,需要使用如下控制面板设置:
当然,每次输入那么长的命令是很不科学的。可以建立一个叫say.bat
的文件,内容为:
这样就可以用形如say [options]
的命令执行TTS任务了。
对于中文,如果系统的默认编码为GBK,可以使用如下命令输出中文语音(其中的字符编码按照实际文件改变):
将目录下所有txt文件转换为语音文件大概可以用这样的批处理文件(个人偏好ogg,如果需要mp3可以用lame):
想看懂有不大看得懂%~ni
的同学可以参见批处理中for循环怎么去掉变量的后缀名。
对了,最后共享一个ptts.vbs
,以防原项目不能访问了。
2014-12-14 更新:
对于中文,如果系统的默认编码为GBK,可以使用如下命令输出中文语音(其中的字符编码按照实际文件改变):
但是,如果文件中有非GBK字符,iconv
会自动退出。所以可以稍微修改命令行使iconv
忽略GBK的非法字符。命令如下:
iconv
还是比较有用的命令,等有时间单独介绍一下。