1

我正在尝试将文件末尾的流(通过 tail -f)发送到节日,这是一个文本到语音程序。尾 -f ./文件名 | Festival --tts可以很好地解决这个问题。

这是我的问题:我想更改来自 tail -f 的流,以便节日可以更好地合成它,并避免它说出整个时间戳。我知道像 sed 和 grep 这样的程序可以做到这一点。不幸的是 tail -f ./filename | sed 's/:/ 说/' | Festival --tts不输出任何声音。

是的,我检查一下是否tail -f ./filename | sed 's/:/ says/'输出任何东西,它做得很好。

我也用 grep 试过这个,在我编辑我的流之后我不能让节日 --tts说任何话。

任何允许我的流被编辑然后说出来的东西都会受到欢迎,我不会被 sed 和 grep 束缚。

4

1 回答 1

0

tail -f本身不起作用,因为节日在输出音频之前正在等待输入流关闭。作为tail -f输入,输入流永远不会关闭。

但是,您可以使用 bashread命令分解尾部输出,通过 grep 运行它,然后使用如下脚本在单独的进程中将其传递给节日:

tail -f ./filename | grep something |  while read line; do 
  echo "$line" | festival --tts
done

如果您的 grep 过滤器没有返回太多数据,则 grep 缓冲区填充和刷新需要一些时间。要减小 grep 缓冲区的大小,请使用grep --line-buffered something. sed 具有类似的缓冲功能,您可以使用-used 中的 (unbuffered) 选项来禁用它们。

于 2013-09-14T03:19:59.257 回答