如何更改 OS X 的“say”命令的发音方式?

jwh*_*ock 14 say macos

OS X 的say命令对某些任务很有用(例如 Skype 的“联系人上线时通知我”),但它会错误地发音一些姓名。有没有办法教say一个单词的不同发音?

例如,尝试:

say "Hi, Joel Spolsky"
Run Code Online (Sandbox Code Playgroud)

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


更新- 经过一些研究,这是我学到的:

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

我的猜测是:

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

这是我的快速实施,使用道格哈里斯的拼写建议:

#!/bin/sh
echo $@ | tr '[A-Z]' '[a-z]' |
sed "s/spolsky/spowlsky/g" |
/usr/bin/say
Run Code Online (Sandbox Code Playgroud)

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

# 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
Run Code Online (Sandbox Code Playgroud)

小智 8

那么你也可以输入你想说的确切音素。语法没有那么复杂。

前任:

[[输入 PHON]] 哈哈。

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


JRo*_*ert 6

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

你的新说法会像旧说法一样工作,但使用你喜欢的发音。