Board logo

标题: [原创] VBS利用TTS实现中英文混读 [打印本页]

作者: zqz0012005    时间: 2008-10-6 21:16     标题: VBS利用TTS实现中英文混读

参考vb代码改成的vbs:利用 VB 编写“文本朗读精灵
首发于verybat

XP下初始只有一个缺省语音引擎,为英文MSSam
朗读中文需要TTS简体中文语音库(好像装了Office也会安装?),下载地址(1.55M):
http://download.lingoes.cn/speech/Microsoft_TTS_51_chs.msi

一个语音引擎只能朗读一种语言,英文引擎不能朗读中文,同样中文引擎不能朗读英文,要朗读中英文混合的文本,必须进行分词,再分别选择相应语言的引擎。
  1. set objVoice = CreateObject("SAPI.SpVoice")
  2. set colVoice = objVoice.GetVoices() '获得语音引擎集合
  3. objVoice.Volume = 100 '设置音量,0到100,数字越大音量越大
  4. '得到所需语音引擎的编号
  5. langCN = "MSSimplifiedChineseVoice" '简体中文
  6. langEN = "MSSam" '如果安装了TTS Engines 5.1,还可以选择MSMike,MSMary
  7. for i=0 to colVoice.count-1
  8.     if Right(colVoice(i).Id, len(langCN)) = langCN then cnVoice = i
  9.     if Right(colVoice(i).Id, len(langEN)) = langEN then enVoice = i
  10. next
  11. '此函数用来检测是否为中文
  12. function isChinese(word)
  13. If Len(Hex(Asc(word))) > 2 Then
  14.     isChinese = True
  15. Else
  16.     isChinese = False
  17. End If
  18. end function
  19. strSource = "你真牛逼! I 服了 you! " '测试文本
  20. strDest = Mid(strSource, 1, 1)
  21. strSelect = ""
  22. splitKey = "/////" '设置对strSource按中文和英文进行分割的关键词,不要用strSource中出现的字词
  23. '以下for语句功能是把strSource中的中英文用splitKey分开
  24. For i = 2 To Len(strSource)
  25.     strSelect = Mid(strSource, i, 1)
  26.     If isChinese(strSelect) Then '如果是中文
  27.         If isChinese(Right(strDest, 1)) Then '如果前一个字符是中文
  28.             strDest = strDest & strSelect
  29.         Else
  30.             strDest = strDest & splitKey & strSelect
  31.         End If
  32.     Else
  33.         If isChinese(Right(strDest, 1)) Then '前一个字符是中文
  34.             strDest = strDest & splitKey & strSelect
  35.         Else
  36.             strDest = strDest & strSelect
  37.         End If
  38.     End If
  39. Next
  40. '将分开的strSource进行分组,并保存为数组形式
  41. arrDest = Split(strDest, splitKey)
  42. OK = True '设置OK为true的时候读中文
  43. If isChinese(arrDest(0)) Then
  44.     OK = True
  45. Else
  46.     OK = False
  47. End If
  48. '以下语句是逐组朗读
  49. For Each p In arrDest
  50.     If OK Then
  51.         set objVoice.Voice = colVoice.Item(cnVoice) '设置语音引擎为简体中文
  52.         objVoice.Speak(p)
  53.         OK = False
  54.     Else
  55.         set objVoice.Voice = colVoice.Item(enVoice)
  56.         objVoice.Speak(p)
  57.         OK = True
  58.     End If
  59. Next
复制代码

作者: 都市浪子666    时间: 2009-3-27 22:50

精彩,谢谢,收藏了,这个可是好玩的东西
作者: 我来了    时间: 2013-4-13 10:57

本帖最后由 我来了 于 2013-4-13 11:06 编辑

请教下师傅,
strSource = "你真牛逼! I 服了 you! " '测试文本

这句话,如此改成:strSource =剪贴板 ?

或nircmd.exe speak text ~$clipboard$套用上这句的表达式。

求表达式,感谢。
作者: CrLf    时间: 2013-4-30 14:58

回复 3# 我来了


    那你最好问 tmplinshi,他是第三方工具应用的专家




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