如何使用`say`命令在序列中使用多个音色?

时间:2015-12-05 00:19:27

标签: macos bash text-to-speech

我正在尝试在mac终端上使用序列中的多个语音来使用say命令。

例如,请注意以下代码:

say -v 'Alex' 'Hello World'
say -v 'Kathy' 'Hello World!' 

这会做我想要的但它会重复命令say。我假装的是这样的:

say -v 'Alex' 'Hello World' -v 'Kathy' 'Hello World'

此行不起作用,但它代表我正在尝试做的事情。

我的当前脚本编写如下:

say -o ttsTest.aiff \
-v 'Kathy' "Hello world! This is Kathy speaking!" \
-v 'Fred' "And here is Fred." \
-v 'Bruce' "Right" \
-v 'Alex' "Alex over here, don't forget me." 

以上代码以单一语音读取所有文本。

参考文献: say(1)

PS:如上面我的脚本摘录所示,我试图将多个声音输出到同一个文件中。

3 个答案:

答案 0 :(得分:2)

使用say命令无法执行您的操作。如果可以这样做,引用肯定会注意到-v可以多次使用,而不是。{/ p>

您需要的是合并AIFF文件的工具。 OS X不附带一个,但存在这样的命令行工具,例如soxffmpeg等,但您必须自己构建它们。

BTW要在终端中获取命令的引用,只需使用man工具,例如man say显示引用(向上/向下滚动箭头键,空格键向下滚动整页,<转到第一行,>转到最后一行,退出{{ 1}};您也可以搜索,例如输入q并按Enter键,它会向前搜索语音,/voice再次搜索,n搜索语音但向后搜索?voice 1}}以获得更多帮助)

答案 1 :(得分:0)

您可以通过链接cmd1 && cmd2来运行其他命令。所以你会把

say -v 'Alex' 'Hello World' && say -v 'Kathy' 'Hello World!'

答案 2 :(得分:0)

你可以写一个脚本:

#!/bin/bash
while [ ! -z "$1" ]; do
    voice="$1"
    shift
    say -v "$voice" "$1"
    shift
done

将其保存到文件中,运行chmod +x myscript,然后按以下方式调用它:

`./myscript Kathy "Hello world! This is Kathy speaking!" Fred "And here is Fred." Bruce "Right" Alex "Alex over here, don't forget me."`