我怎样才能改变 OS X 的‘说’命令发音的方式?

我怎样才能改变 OS X 的‘说’命令发音的方式?

OS X 的say命令对于某些任务很有用(例如 Skype 的“当联系人上线时通知我”),但它对某些名字的发音不正确。有没有办法教人以say不同的方式发音?

例如,尝试:

say "Hi, Joel Spolsky"

“ol” 听起来像“ball”而不是“old”。我想添加一个例外,说“像这样发音 Spolsky”,而不是试图教授新的语言规则。我敢打赌肯定有办法,因为它可以按照 Apple 的要求发音“iphone”。


更新- 经过一些研究,我了解到了以下信息:

  1. 文本转语音分为将文本转换为音素,然后使用语音将音素转换为音频。更改语音不会影响音素。
  2. 语音合成管理器有一些功能将文本转换为音素以及一种方法 注册语音词典这将添加新的文本音素映射。但是,Apple 的语音词典必须是二进制形式 - 我没有找到任何 plist XML。
  3. dtrace在运行时使用say,我发现在 /System/Library/PrivateFrameworks/SpeechDictionary.framework/Resources 中打开了一些有趣的文件。这可能是语音词典,但它们都是二进制的,除了 Homophones,它是 XML。向 Homophones 添加条目没有任何作用 - 它可能用于语音转文本。它们也是由 Apple 签名的代码 - 更改它们可能会导致某些程序无法运行。
    • 前缀词典
    • 购物车名称
    • CartLite
    • 符号词典
    • 同音词
  4. 方法添加文本版本的应用程序界面元素,以便 VoiceOver 可以正常工作,其中很多内容开发人员可以免费获得,但也有一些棘手之处。这里的标准似乎是根据需要使用拼音拼写。

我的猜测是:

  1. say是语音合成管理器之上的一层轻量级代码。Apple 开发人员可以轻松添加命令行选项,以将路径设置为语音词典 plist 来进行备选音素映射,但他们没有这样做。编写更好的say.
  2. Skype 可能直接使用语音合成管理器,除了按语音拼写之外,没有留下任何方法来改变我朋友名字的发音方式,这很愚蠢。
  3. 制作命令行版本的最简单方法say是按照 JRobert 建议的方式。

以下是我的快速实现,使用了 Doug Harris 的拼写建议:

#!/bin/sh
echo $@ | tr '[A-Z]' '[a-z]' |
sed "s/spolsky/spowlsky/g" |
/usr/bin/say

最后,一些有趣的命令行内容:

# Apple is weird
sqlite3 /System/Library/PrivateFrameworks/SpeechDictionary.framework/Resources/Tuples .dump
# Get too much information about what files are being opened
sudo dtrace -n 'syscall::open*:entry { printf("%s %s",execname,copyinstr(arg0)); }'
# Just fun
say -v bad "Joel Spolsky Spolsky Spolsky Spolsky Spolsky, Joel Spolsky Spolsky Spolsky Spolsky Spolsky"
echo "scale=1000; 4*a(1)" | bc -l | say

答案1

你也可以输入你想要发音的音素。语法并不复杂。

前任:

[[inpt PHON]] 哈哈哈。

查看此链接了解更多信息:http://developer.apple.com/library/mac/#documentation/UserExperience/Conceptual/SpeechSynthesisProgrammingGuide/Phonemes/Phonemes.html#//apple_ref/doc/uid/TP40004365-CH9-SW1

答案2

  • 创建一个单词对列表 [spolsky spowlsky; joel jole; ...]。
  • 用您最喜欢的脚本语言创建一个脚本,根据您的单词对列表替换其参数列表中的单词,并将修改后的参数列表传递给“/usr/bin/say”。
  • 使脚本可执行,将其命名为“say”,并将其放在 $PATH 中比“/usr/bin”更早出现的文件夹中。
  • 当您找到更多想要以不同方式发音的单词时,请将拼写变体添加到您的单词对列表中。

您的新说法将与旧说法一样,但采用您喜欢的发音。

答案3

@bruno-carvalho 的回答为我解答了这个问题。但是,我还需要找到标签[[inpt TEXT]],让 say 命令返回正常读取(语音合成)文本。例如:
say [[inpt PHON]] hAAIH, [[inpt TEXT]] how are you?

希望将其添加到答案中可以帮助后续阅读该问题的读者。

答案4

这是一个令人遗憾的限制,因为 Apple 似乎已经在这方面取得了很大进展。VoiceOver 用户可以使用 VoiceOver 实用程序(语音->发音)轻松插入自己的发音。但是,VoiceOver 设置似乎不适用于 Safari 和其他 Apple 提供的应用程序中的“说”命令或编辑->语音->“开始语音”菜单。

相关内容