【发布时间】:2015-06-05 00:29:40
【问题描述】:
如何使用 AppleScript 获取已安装声音的列表?我看到以前使用过:“告诉应用程序声音”或查看目录“/System/Library/Speech/Voices/”中有哪些文件,但这些方法似乎不再起作用了。
【问题讨论】:
标签: applescript text-to-speech
如何使用 AppleScript 获取已安装声音的列表?我看到以前使用过:“告诉应用程序声音”或查看目录“/System/Library/Speech/Voices/”中有哪些文件,但这些方法似乎不再起作用了。
【问题讨论】:
标签: applescript text-to-speech
您可以使用 shell 脚本 say 和 -v 选项来获取列表。
do shell script "say -v?"
-v 语音,--voice=语音 指定要使用的声音。默认是在 系统偏好。获取安装在 系统,指定“?”作为声音名称。
在我的系统上,我会得到一个很长的列表,例如:
Deranged en_US # I need to go on a really long vacation.
Fred en_US # I sure like being inside this fancy computer
Good News en_US # Congratulations you just won the sweepstakes and you don't have to pay income tax again.
Hysterical en_US # Please stop tickling me!
Jorge es_ES # Hola, me llamo Jorge y soy una voz española.
为了只提取名称,我将使用名称后面的空格作为分隔符来分隔名称和垃圾
set the_name to do shell script "say -v? | awk -F\"\\ \\ \" '{print $1}'"
所以我在这里将 say 命令的结果通过管道传输到 awk。
-F fs 选项 将输入字段分隔符定义为正则表达式 fs。 所以这就是我使用空格将名称与垃圾分开的地方。
我只需要给出一个双倍空格,而不是名称和垃圾之间的全部空格。我还必须用每个反斜杠来转义空格。
而且因为我们在 Applescript 中,所以我们实际上需要转义转义符以将它们传递到 shell。当然也可以避免多余的引号。
\"\\ \\ \"
awk {print $1} 将打印出字段 1 ($1) 中的所有字段
这给了我:
Deranged
Fred
Good News
Hysterical
Jorge
【讨论】: