Raspberry Pi上的GoogleTTS不会说出日期和时间

时间:2019-09-17 22:15:23

标签: python raspberry-pi

我正在Raspberry Pi上使用GoogleTTS。我的代码将让GoogleTTS大声说出普通文本,而不是当前时间或日期。它将为您提供正确的时间和日期。我还有一个声音叫做Festival,如果我用Festival --tts代替GoogleTTS,它会说出时间和日期。但是,我尝试使其与GoogleTTS配合使用,因为声音更好。请帮忙!谢谢!

尝试过:

voice.speak(os.system(“ date'+%I:%M%P'”)) voice.speak(os.system(“ date'+%A,%d,%B,%Y'”))

我尝试了def os.system(“ date'+%I:%M%P'”)和(os.system(“ date'+%A,%d,%B,%Y'”) time1和date1。然后是voice.speak(time1)和voice.speak(date1)。它只是给了我一些柔和的音频输出,例如%。

我本来尝试过的:

import time
import os
import sys
from google_tts import GoogleTTS

voice = GoogleTTS()
voice.speak("Hello NAME. The time is.")
os.system("date '+%I:%M %P'")
os.system("date '+%I:%M %P' | GoogleTTS")
voice.speak("And the date is.")
os.system("date '+%A, %d, %B, %Y'")
os.system("date '+%A, %d, %B, %Y' | GoogleTTS")

当我尝试def时:

import time
import os
import sys
from google_tts import GoogleTTS

voice = GoogleTTS()
voice.speak("Hello NAME. The time is.")

def time1():
    os.system("date '+%I:%M %P'")

voice = GoogleTTS()
voice.speak(time1)

voice = GoogleTTS()
voice.speak("And the date is.")

def date1():
    os.system("date '+%A, %d, %B, %Y'")

voice = GoogleTTS()
voice.speak(date1)

这是两种有效的语音方式:

import time
import os
import sys
from google_tts import GoogleTTS

voice = GoogleTTS()
voice.speak("Hello NAME. The time is.")
os.system("date '+%I:%M %P'")
os.system("date '+%I:%M %P' | festival --tts")
voice.speak("And the date is.")
os.system("date '+%A, %d, %B, %Y'")
os.system("date '+%A, %d, %B, %Y' | festival --tts")

对于我最初尝试的东西,我得到了:

06:06下午 sh:1:GoogleTTS:未找到 2019年九月17日星期二 sh:1:GoogleTTS:未找到 日期:写入错误:管道损坏

对于def,我遇到了相同的错误:

两个声音没有错误,只是shell文本输出:

06:07下午 2019年9月17日,星期二

1 个答案:

答案 0 :(得分:0)

此处使用的库正在接收通过speak方法转换为语音的字符串。

os.system在子shell中执行命令,使您无法检索标准输出中打印的文本。

但是subprocess允许检索以stdout打印的文本并将其绑定到名称。

import subprocess

from google_tts import GoogleTTS

voice = GoogleTTS()
voice.speak("Hello NAME. The time is.")


completed_process = subprocess.run(
    "date '+%A, %d, %B, %Y'", shell=True, capture_output=True
)
date_today = completed_process.stdout.decode().strip()

voice.speak(date_today)