我正在尝试将文件结尾的流(通过tail -f)发送到festival,这是一个文本到语音程序。 tail -f ./filename | festival --tts 可以正常使用。
这是我的问题: 我想改变来自tail -f的流,以便节日可以更好地合成它,并避免它说出整个时间戳。我知道像sed和grep这样的程序可以做到这一点。不幸的是 tail -f ./filename | sed's /:/ say /'| festival --tts 不会输出任何声音。
是的,我检查了 tail -f ./filename | sed's /:/ say /'输出任何东西,它就可以了。我也用grep尝试了这个,在编辑完流后,我无法让 festival --tts 说出任何内容。
任何允许对我的信息流进行编辑,然后说出来的内容都会受到欢迎,我不会受到sed和grep的束缚。
答案 0 :(得分:0)
tail -f
本身不起作用,因为节日在输出音频之前等待输入流关闭。使用tail -f
作为输入时,输入流将永远不会关闭。
但是,您可以使用bash read
命令打破尾部输出,通过grep运行它,并使用如下脚本在单独的进程中将其传递给festival:
tail -f ./filename | grep something | while read line; do
echo "$line" | festival --tts
done
如果你的grep过滤器没有返回太多数据,那么在grep缓冲区填充和刷新之前需要一些时间。要减小grep缓冲区的大小,请使用grep --line-buffered something
。 sed具有类似的缓冲功能,您可以使用sed中的-u
(无缓冲)选项来禁用它们。