![Speech-dispatcher 停止工作,spd-say 启动,但在几个词之后停止](https://linux22.com/image/1175222/Speech-dispatcher%20%E5%81%9C%E6%AD%A2%E5%B7%A5%E4%BD%9C%EF%BC%8Cspd-say%20%E5%90%AF%E5%8A%A8%EF%BC%8C%E4%BD%86%E5%9C%A8%E5%87%A0%E4%B8%AA%E8%AF%8D%E4%B9%8B%E5%90%8E%E5%81%9C%E6%AD%A2%20.png)
我的语音调度程序有问题。如所述:speech-dispatcher
停止工作。spd-say
启动,但在说了几句话后停止。
更准确地说:
- 我有一篇较长的文字。(这https://github.com/systemd/systemd/blob/master/NEWS从 246 更改 到 245 更改)
- 我将其输入到 spd-say 中:
spd-say -l de -r 50 -t male1 "$(cat temp.txt)"
- 我注意到它正在用德语读英语。所以我照做了
killall speech-dispatcher
。这实际上给我带来了麻烦。 - 我运行了
sudo service speech-dispatcher restart
。然后spd-say -l en -r 50 -t male1 "$(cat temp.txt)"
它再也没有完成第二句话。Firefox 中的朗读功能也不再起作用了。
我认为使用 killall 通常不是一个好主意,并且我错过了 spd-say 的以下选项:
-w, --wait Wait till the message is spoken or discarded
-S, --stop Stop speaking the message being spoken
-C, --cancel Cancel all messages
有人可以帮助我让语音调度程序重新工作而无需重新启动或注销吗,并告诉我它是如何在 gnome 会话中集成的,这似乎是这里的问题,因为系统范围的语音调度程序被禁用。
修改 1:刚刚启动了虚拟机,它在输入相同文本示例和其他文本示例时失败。我尝试输入少一点的文本,删除开头的空格和星号,但它仍然在第二句中间中止。在另一个例子中,它在第一个句子之后停止(此处:https://docs.ansible.com/ansible/latest/network/dev_guide/developing_plugins_network.html)。好的一面是:当我在 Firefox 中没有选项可以读取页面或文件上的文本时,我开始使用此命令。我刚刚注意到它至少可以很好地读取 systemd 更改日志。
编辑 2:Firefox 可以再次运行了,在我费尽心思尝试解决最初的问题之后,它只需要重新启动。
答案1
您需要使用 spd-say -w 来防止这种情况发生。
如果没有它,spd-say 会向 Speech-dispatcher 发送说某事的请求,Speech-dispatcher 会说“好的,我会这样做!”,然后 spd-say 会退出。如果此时 Speech-dispatcher 还没有说完,spd-say 退出后它就会停止。
我不知道为什么架构决定这样做。因为是这样,所以我认为 spd-say 应该使用 --no-wait 而不是 --wait 更有意义,但我认为我们都同意文档在这一点上没有它应该的那么清楚。