Board logo

标题: [其他] 让批处理发声--- 朗读单词 [打印本页]

作者: lixiaodaoaaa    时间: 2008-9-6 21:53     标题: 让批处理发声--- 朗读单词

                   ★ 让批处理发声--- 朗读单词 ★   

                                                   
今天给大家一起学习的是让批处理发声。希望不会的,我们一起学习,高手不要笑话我就可以了。讲的非常的罗嗦,希望楼下跟帖的不要骂我就是了.......肯定有什么不对的地方,恳请大家批评指正,
共同提高,共同进步!

这里用到了批处理和vbs结合。我们还是先看代码吧:
-------------------------------------------------------------------------------------------------------------

  1. @echo off
  2. mshta vbscript:createobject("sapi.spvoice").speak("I love bathome")(window.close)                  
  3. pause
复制代码


-------------------------------------------------------------------------------------------------------------
很简单吧?
这里就是用批处理的mshta命令把bat与vbs结合起来了,用vbs调用函数发声,很不错!这个mshta的意义非常的重要,如果要想让bat和vbs结合就非得用mshta命令
mshta vbscript:create.............................
这里的vbscript的意思是bat与vbs脚本宿主的结合
当然可以把javascript结合起来,也是可以的,以后有时间学了javascript的话,
我就把java代码干上去,大家一起学习下哈或者其他脚本文件都可以往后面跟下去...............
文章最后面有个简单的javascript的例子,希望大家也去实验下效果....
vbscript就说明后面跟的是vbs脚本的内容,后面的脚本就是vbs脚本.....
-------------------------------------------------------------------------------------------------------------

我们接着往下看:
vbscript:createobject("sapi.spvoive").speak("I love bathome")(window.close)
解说:这里创建了一个sapi.spvoice对象,并调用它的speak方法,"I love bathome"是要朗读的内容。
当然要朗读的i love bathome,也可以换成其他的东西,例如my name is lixiaodao 或者i love ******
呵呵,都是可以的...................但是可不能换成汉字,它可不认识汉字,呵呵……

接着解释后面的(window.close)
在解释它之前,我们可以把代码后面的 (window.close)去掉,去实验下,

-------------------------------------------------------------------------------------------------------
  1. @echo off
  2. mshta vbscript:createobject("sapi.spvoice").speak("I love bathome")               
  3. pause
复制代码
-------------------------------------------------------------------------------------------------------

我们会发现确实是朗读了i love bathome,但是朗读后,就跳出了一个窗口,
window.close就是关闭这个窗口的....................

可以把代码优化一下,看起来操作起来好一点,我写了下面的代码;

-----------------------------------------------------------------------------------------------------------------------
  1. @echo off
  2. color a2
  3. title 批处理发声实验 by:lixiaodaoaaa qq:346825741
  4. @mode con cols=50 lines=11
  5. mshta vbscript:createobject("sapi.spvoice").speak("I love bathome")(window.close)
  6. mshta vbscript:createobject("sapi.spvoice").speak("my name is lixiaodao")(window.close)
  7. mshta vbscript:createobject("sapi.spvoice").speak("my qq number is 346825741")(window.close)
  8. pause&exit
复制代码

---------------------------------------------------------------------------------------------------------
举个很简单的javascript的例子,大家实验下bat与javascript的结合.


  1. mshta javascript:window.alert("欢迎来到批处理之家,批处理之家欢迎您!")(window.close())
复制代码


window.close不用讲了,已经讲过了,讲一下alert,就是弹出消息的意思,实验下,看效果......
代码很简单,我不做多说明,欢迎复制代码实验下,看效果,呵呵
写完了,确实很罗嗦,恳请大家批评指正.............................

写的很垃圾很仓促,定有不妥之处,恳请各位大师,各位专家批评指正
感谢各位,提出好的思路和方法.....





**************************************************
版务执行:Batcher
执行时间:2008-09-06
操作内容:从"批处理教学&资料"转移帖子到"代码咨询&讨论";分类;删除标题中的特殊字符
**************************************************


[ 本帖最后由 lixiaodaoaaa 于 2008-9-7 12:12 编辑 ]
作者: lixiaodaoaaa    时间: 2008-9-6 22:22     标题: 貌似发错地方了。。

恳请管理员把它移动到教学资料区,容易出问题。。汗。。。
发错地方了,我自己改不过来

作者: pusofalse    时间: 2008-9-6 22:56

与java相结合的代码貌似有点错误,楼主试下。
作者: zqz0012005    时间: 2008-9-7 05:17     标题: 回复 3楼 的帖子

应为
  1. mshta javascript:window.alert("欢迎来到批处理之家,批处理之家欢迎您!")(window.close())
复制代码

window.alert可以只写成alert
作者: lixiaodaoaaa    时间: 2008-9-7 12:13     标题: 谢谢pusofalse

谢谢pusofalse
问题已经改正,感谢zqz12005写的代码已经成功的更正过了,
你们很耐心很细致,再次的感谢你们的支持和评论
作者: lixiaodaoaaa    时间: 2008-9-7 12:15     标题: 有的系统还可以朗读汉语,汗

突然发现一个问题啊,有的系统还可以朗读汉语,汗
我靠,你不信实验下,看看你的电脑能不能读汉语啊?
如果能读汉语,那就帅得了,读个  “我真的好想你啊”
“我爱你******”
哈哈,或者什么恐怖的,帅啊!
作者: qq641255849    时间: 2008-9-7 15:36     标题: 回复 6楼 的帖子

貌似微软有中文语音包下载...
作者: zqz0012005    时间: 2008-9-7 17:51

朗读中文参见:
利用TTS实现中英文混读

鉴于已在非常发表,不在此处重复。
作者: qingfengzhixia    时间: 2008-9-7 20:49

不错,支持一下
作者: wbwchina    时间: 2008-9-10 20:07     标题: 太羡慕了!

太羡慕了!太羡慕了!
作者: lixiaodaoaaa    时间: 2008-9-11 18:51     标题: 哈哈,不难大家努力 学习啊

哈哈,不难大家努力 学习啊
希望我们共同把学习上的心得拿出来,共同学习。共同提高,我是菜鸟
作者: wolfan    时间: 2012-8-25 21:35

怎么发女声呢? 男声无爱啊。
作者: 77七    时间: 2023-9-25 17:04

我想用顶楼的第一段代码朗读 一段数字字符串,执行顶楼的第一段代码(未修改),报错。系统为win10




我想写成以下的形式,请路过的大佬帮忙修改下,谢谢!
  1. @echo off
  2. rem code...
  3. set str=123456789
  4. mshta vbscript:createobject("sapi.spvoice").speak("%str%")(window.close)
  5. rem code...
  6. pause
复制代码

作者: Five66    时间: 2023-9-25 20:05

回复 13# 77七

试试将下面的保存为vbs,看能否正常运行

createobject("sapi.spvoice").speak "123456789"

不能的话,也许是vbs组件或sapi组件或相关设置出问题
能的话,大概是hta使用的浏览器或ie版本问题
作者: 77七    时间: 2023-9-25 20:23

回复 14# Five66

不能正常运行,报错几乎和上图相同,只有代码变了,代码:0  变为  代码:8007007E
作者: aloha20200628    时间: 2023-9-25 21:38


可先试代码A,若通过, 表明win10的默认mshta引擎ie11已经关闭了vbs支持,故须显式设置mshta引擎回滚到ie10。若还不行,再试代码B,mshta引擎从ie11开始仅支持js了。
  1. ::A》
  2. @echo off
  3. set "str=123456789"
  4. mshta vbscript:"<meta http-equiv=x-ua-compatible content=IE=10><script type=text/vbscript>createobject(""sapi.spvoice"").speak(""%str%"")(close)</script>"
  5. pause &exit/b
  6. ::B》
  7. @echo off
  8. set "str=123456789"
  9. mshta "javascript:close(new ActiveXObject('sapi.spvoice').speak('%str%'))"
  10. pause &exit/b
复制代码

作者: hlzj88    时间: 2023-9-25 21:44

  1. Set file = CreateObject("Scripting.FileSystemObject")
  2. if file.FileExists("内容.txt") then
  3. set txtfile=file.opentextfile("内容.txt",1)
  4. while NOT txtfile.atendofstream
  5. CreateObject("SAPI.SpVoice").Speak txtfile.ReadLine
  6. wend
  7. txtfile.close
  8. msgbox ("完")
  9. Else
  10. msgbox("是直接读内容.txt里的文字内容,没找到内容.txt")
  11. End If
复制代码
我不懂vbs,这是几年前收集的。
作者: 77七    时间: 2023-9-25 22:08

回复 16# aloha20200628


   a报错





b报错



作者: 77七    时间: 2023-9-25 22:10

回复 17# hlzj88


   和14楼代码报错相同
作者: Five66    时间: 2023-9-25 22:36

回复 15# 77七


看看路径
    %SystemRoot%\System32\Speech\
下有没有sapi的相关的组件文件

Common\sapi.dll
Engines\TTS\MSTTSEngine.dll
作者: aloha20200628    时间: 2023-9-25 22:39

本帖最后由 aloha20200628 于 2023-9-25 22:44 编辑

回复 18# 77七

本人的测试环境是win8.1简中系统,提供的A/B代码均予通过。
还有一个简单的测试建议》离开mshta脚本,仅分别测试js脚本,可否通过...
1.js
  1. new ActiveXObject('sapi.spvoice').speak('123456789');
复制代码

作者: 77七    时间: 2023-9-25 22:43

回复 20# Five66


   只有一个类似的文件,sapi_onecore.dll。

作者: 77七    时间: 2023-9-25 22:47

回复 21# aloha20200628


   和14楼、15楼报错相同。
作者: aloha20200628    时间: 2023-9-25 23:21

又在win10.22H2简中系统测试了 A/B 代码和 1.js 脚本,均予通过。
两个系统均有 "C:\Windows\System32\Speech\Common\sapi.dll"。
— 仅供参考。
作者: 77七    时间: 2023-9-25 23:33

感谢 Five66 aloha20200628 hlzj88 三位大佬帮助!原因已明了,我准备修复sapi.dll缺失的问题。
作者: Five66    时间: 2023-9-26 00:15

本帖最后由 Five66 于 2023-9-26 00:23 编辑

回复 25# 77七


    感觉像是系统版本的差异,对应的名字后面好像都加了个_onecore(但是实际使用的还是原版名字后面没有_onecore的,又或者实际使用的名字如sapi.spvoice也跟着变了)
作者: 77七    时间: 2023-9-26 01:23

回复 26# Five66


   问了两次ai,答案不一样,第一次忘了复制了,大概说 sapi_onecore.dll 是为uwp应用设计的
第二次
  1. sapi_onecore.dll和sapi.dll是Windows操作系统中与语音识别和语音合成相关的动态链接库(DLL)文件。它们之间的区别在于:
  2. Windows版本:sapi_onecore.dll是为Windows 10及更高版本设计的,而sapi.dll适用于较早的Windows版本,例如Windows 7、Windows 8等。
  3. 功能支持:sapi_onecore.dll提供了一种新的API接口,称为OneCore Speech API,它是基于Windows 10 OneCore技术栈开发的。这个API接口具有更好的性能和更多的功能特性,如噪声抑制、自适应麦克风阵列处理等。相比之下,sapi.dll的功能相对较少,不支持一些新的语音识别和语音合成特性。
  4. 兼容性:由于sapi_onecore.dll是为Windows 10及更高版本优化的,因此它可能不兼容较旧的Windows版本。而sapi.dll则可以在较旧的Windows版本上正常运行。
  5. 总之,sapi_onecore.dll和sapi.dll在功能特性、兼容性方面存在差异。如果你使用的是Windows 10及更高版本,并且需要利用最新的语音识别和语音合成功能,建议使用sapi_onecore.dll。如果你使用的是较旧的Windows版本,sapi.dll可能是更适合的选择。
复制代码


我尝试了网上的修复方法,没有成功。打算找段python代码,调用python,有个库,我今天没安装好,明天再慢慢尝试下。




欢迎光临 批处理之家 (http://bathome.net./) Powered by Discuz! 7.2