如何使用AppleScript获取已安装语音的列表?

Cue*_*Cue 1 applescript text-to-speech

如何使用AppleScript获取已安装语音的列表?我看到前段时间使用了:"告诉应用程序声音"或查看目录"/ System/Library/Speech/Voices /"中的文件,但似乎这些方法不再起作用了.

mar*_*nte 5

您可以使用shell脚本say和-v选项来获取列表.

do shell script "say -v?"
Run Code Online (Sandbox Code Playgroud)

-v voice, - voice = 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.
Run Code Online (Sandbox Code Playgroud)

要仅提取名称,我将使用名称后面的空格作为分隔符来拆分名称和垃圾

set the_name to do shell script "say -v? |   awk -F\"\\ \\ \" '{print $1}'"
Run Code Online (Sandbox Code Playgroud)

所以在这里我将say命令的结果传递给awk.

-F fs选项将输入字段分隔符定义为正则表达式fs.所以这就是我使用空格将名称与垃圾分开的地方.

我只需要给出一个双重空间而不是名称和垃圾之间的全部空间.我也必须用每个反斜杠来逃避空间.

因为我们在Applescript中,我们需要实际逃避转义以将它们传递到shell.当然,逃避额外的报价.

\"\\ \\ \"
Run Code Online (Sandbox Code Playgroud)

awk {print $ 1}将打印出字段1中的所有字段($ 1)

这给了我:

Deranged
Fred
Good News
Hysterical
Jorge
Run Code Online (Sandbox Code Playgroud)