batch-file - Hybrid Batch-VBS TTS script not working
问题描述
I tried to make a hybrid Batch-VBS script out of a VBS script that i already made. It would give a inputBox
, and use the results to sapi.spvoice.Speak
it. I tried to make it into a batch script (below), but it doesn't work, and tts.vbs ends up containing only
sapi.Speak message
.
Batch Script:
@echo off
:start
cls
echo Batch Text-To-Speech
echo By SudDaBuilder
:: echo Fixed by %YourNameHere% ::
set /p msg=What do you want your PC to say?
set /p vce=Choose a Voice (0 - Male, 1 - Female)
pause
cls
echo Dim message, sapi, voice > tts.vbs
echo message=%msg% > tts.vbs
echo voice=%vce% > tts.vbs
echo Set sapi=CreateObject("sapi.spvoice") > tts.vbs
echo with sapi > tts.vbs
echo Set .voice = .getvoices.item(voice) > tts.vbs
echo .Volume = 100 > tts.vbs
echo end with > tts.vbs
echo sapi.Speak message > tts.vbs
cscript tts.vbs
cls
pause
:again
cls
set /p retry=Again? (y/n)
if %retry% == y goto start
goto end
:end
echo See you soon!
ping localhost > nul
解决方案
您可以将代码直接嵌入到批处理脚本中,而无需使用临时文件。这将提高脚本的速度,因为不会有多余的 IO 操作:
<!-- : BATCH
@echo off
:start
cls
echo Batch Text-To-Speech
echo By SudDaBuilder
:: echo Fixed by %YourNameHere% ::
set /p msg=What do you want your PC to say?
set /p vce=Choose a Voice (0 - Male, 1 - Female)
pause
cscript //nologo "%~f0?.wsf" %msg% %vce%
:again
cls
set /p retry=Again? (y/n)
if %retry% == y goto start
goto end
:end
echo See you soon!
ping localhost > nul
exit /b %errorlevel%
BATCH : --->
<job><script language="VBScript">
Dim message, voice
message=WScript.Arguments.Item(0)
voice=WScript.Arguments.Item(1)
'WScript.Echo(voice & "--" & message)
set sapi = CreateObject("SAPI.SpVoice")
with sapi
Set .voice = .getvoices.item(voice)
'.Volume = 100
end with
sapi.Speak( message)
</script></job>
您甚至可以在一行中使用 sp 语音对象:
@echo off
set /p "to_say=enter a text :"
mshta "javascript:code(close((V=(v=new ActiveXObject('SAPI.SpVoice')).GetVoices()).count&&v.Speak('%to_say%')))"
推荐阅读
- python - 如何从 python 中的数据框行值创建 CSV?
- opengl - 如何进行纹理的平面映射
- c - 我有一个 C 代码,但有些测试用例没有通过
- python-3.x - 在 python 3 中使用 numpy 创建低秩矩阵近似
- django - 在Django中只允许用户注册以@开头的用户名
- elasticsearch - 如何在elasticsearch中查询特定的数组索引?
- python - 处理熊猫数据框中的缺失值作为张量流的输入
- swift - 如何快速为方法编写单元测试,返回通过调用模拟类方法获得的响应的承诺?
- javascript - 在 Javascript 中查找值的乘积
- python - python:python类中列表或字典上的信号量保护