问题是它say
不会等待 Siri 真正说出这些话,它只是将一个数据包发送到你的 iDevice,然后继续。我能想到的最简单的方法是等待几秒钟,具体取决于文本的长度。所以首先我们需要一个方法来给我们等待的时间(以秒为单位)。我尝试使用 OSX 内置say
命令并得到以下结果:
$ time say "For example if You tell me 'Turn on sidelight' I will turn the sidelights in Living room like now..."
say 0,17s user 0,05s system 3% cpu 6,290 total
$ time say "That was the sidelights, and now if like I can turn on the gallery for You, just tell me 'turn on gallery' like so... "
say 0,17s user 0,06s system 2% cpu 8,055 total
$ time say "This only part of things I can do after mod."
say 0,13s user 0,04s system 5% cpu 2,996 total
所以这意味着我们有以下数据:
# Characters w/o whitespace | Seconds to execute
------------------------------+---------------------
77 | 6.290
87 | 8.055
34 | 2.996
这使我们每个字符平均有大约0.0875
几秒钟的时间。您可能需要自己评估场景的平均时间并使用更多样本。此函数将换say
行,然后等待 Siri 说出文本:
def say_and_wait text, seconds_per_char=0.0875
say text
num_speakable_chars = text.gsub(/[^\w]/,'').size
sleep num_speakable_chars * seconds_per_char
end
wheregsub(/[^\w]/,'')
将从字符串中删除任何非单词字符。现在你可以用它来简单地说一些东西并等待它被说出来:
say_and_wait "This is a test, just checking if 0.875 seconds per character are a good fit."
或者您也可以在特殊情况下覆盖持续时间:
say_and_wait "I will wait for ten seconds here...", 10
请让我知道这对你有没有用。