将文本保存到语音 Python



我正在尝试将文本到语音转换的结果保存到Windows上的文件中。 我成功地让它说话(使用 speak.Speak(。 但是,保存文件没有这样的运气。

问题是AudioOutputStream尽管它列在Microsoft文档中,但未找到。

版本信息: 视窗 10, Python 3.6

错误

Traceback (most recent call last):
  File "...dd.py", line 87, in <module>
    speak.AudioOutputStream = filestream
  File "...win32comclientdynamic.py", line 565, in __setattr__
    self._oleobj_.Invoke(entry.dispid, 0, invoke_type, 0, value)
pywintypes.com_error: (-2147352573, 'Member not found.', None, None)

法典

from win32com.client import Dispatch
import win32api
speak = Dispatch("SAPI.SpVoice")
filestream = Dispatch("SAPI.SpFileStream")
filestream.open("out.wav", 3, False) 
for k in speak.GetAudioOutputs():
    print(k.GetDescription())
speak.AudioOutputStream = filestream
speak.Speak("test")
filestream.close()

我设法让它工作。 由于最初对这篇文章的反应很少,我相信将此修复程序留给未来的访问者将非常有用。

使用pip install comtypes安装库。 它比python的原生comtype实现更具协作性,更少卡顿。

import comtypes.client
speak = comtypes.client.CreateObject("SAPI.SpVoice")
filestream = comtypes.client.CreateObject("SAPI.spFileStream")
filestream.open("out.wav", 3, False)
speak.AudioOutputStream = filestream 
speak.Speak("test")
filestream.close()

我发现了这个问题,但 Neil 使用 comtypes 提供的解决方案对我不起作用,并给了我一个错误。

但是,他最初的解决方案确实适用于我的系统:

  • Windows 10 专业版,版本 19.0.19041 内部版本 19041
  • Python 3.8.1 64 位

我用它来为说话时钟创建.wav文件

import win32com.client
phrases = [
    "Zero",
    "One",
    "Two",
    "Three",
    "Four",
    "Five",
    "Six",
    "Seven",
    "Eight",
    "Nine",
    "Ten",
    "Eleven",
    "Twelve",
    "Thirteen",
    "Fourteen",
    "Fifteen",
    "Sixteen",
    "Seventeen", 
    "Eighteen",
    "Nineteen",
    "Twenty",
    "Thirty",
    "Fourty",
    "Fifty",
    "Hundred",
]
speaker = win32com.client.Dispatch("SAPI.SpVoice")
filestream = win32com.client.Dispatch("SAPI.SpFileStream")
def speak(phrase):
    speaker.speak(phrase)
    
def save_voice(phrase):
    filestream.open(".".join([phrase, "wav"]), 3, False)
    speaker.AudioOutputStream = filestream
    speaker.speak(phrase)
    filestream.close()
for phrase in phrases:
    save_voice(phrase)

相关内容

  • 没有找到相关文章

最新更新