【发布时间】:2012-04-11 14:38:27
【问题描述】:
我正在尝试找到一种方法来获取合成语音并将其录制到音频文件中。我目前使用pyttsx 作为我的文本转语音库,但没有将输出保存到文件的机制,只能直接从扬声器播放。我查看了detecting and recording audio 和PyAudio,但它们似乎从麦克风获取输入,而不是将传出的音频重定向到文件。有没有已知的方法可以做到这一点?
【问题讨论】:
标签: python text-to-speech
我正在尝试找到一种方法来获取合成语音并将其录制到音频文件中。我目前使用pyttsx 作为我的文本转语音库,但没有将输出保存到文件的机制,只能直接从扬声器播放。我查看了detecting and recording audio 和PyAudio,但它们似乎从麦克风获取输入,而不是将传出的音频重定向到文件。有没有已知的方法可以做到这一点?
【问题讨论】:
标签: python text-to-speech
您可以使用subprocess 使用-w 参数调用espeak。
import subprocess
def textToWav(text,file_name):
subprocess.call(["espeak", "-w"+file_name+".wav", text])
textToWav('hello world','hello')
这将写入 file_name.wav 而不会大声读出。如果您的文本在文件中(例如 text.txt),您需要使用 -f 参数(“-f”+text)调用 espeak。我建议阅读espeak man pages 以查看您拥有的所有选项。
希望这会有所帮助。
【讨论】:
您可以使用更高级的 SAPI 包装器将输出保存到 wav 文件。比如你可以试试
https://github.com/DeepHorizons/tts
代码应如下所示:
import tts.sapi
voice = tts.sapi.Sapi()
voice.set_voice("Joey")
voice.create_recording('hello.wav', "Hello")
【讨论】:
这是一个让您可以访问 NSSpeechSynthesizer API 的示例
#!/usr/bin/env python
from AppKit import NSSpeechSynthesizer
import sys
import Foundation
if len(sys.argv) < 2:
text = raw_input('type text to speak> ')
else:
text = sys.argv[1]
nssp = NSSpeechSynthesizer
ve = nssp.alloc().init()
ve.setRate_(100)
url = Foundation.NSURL.fileURLWithPath_('yourpath/test.aiff')
ve.startSpeakingString_toURL_(text,url)
【讨论】:
使用大胆的 VB 输入和输出仿真器电缆来记录任何 engine.play() 输出。
您需要下载 VB 电缆,然后通过 windows 将它们设置为默认的 windows 声音设置,然后将 Audacity 的输入设置为 Microsoft 声音映射器输入,在 Audacity 上点击录制并播放您的脚本。你会注意到一旦它在 Audacity 上完成,然后导出你需要循环的内容。
此方法可能超出范围并不完美,但适用于 pyttsx3 并且记录质量比 espeak 更好。
【讨论】:
您也可以使用 Amazon Polly API:
下面是一个使用python的例子:
【讨论】: