OS X 的say
命令对某些任务很有用(例如 Skype 的“联系人上线时通知我”),但它会错误地发音一些姓名。有没有办法教say
一个单词的不同发音?
例如,尝试:
say "Hi, Joel Spolsky"
Run Code Online (Sandbox Code Playgroud)
'ol' 听起来像 'ball' 而不是 'old'。我想添加一个例外,说“像这样发音 Spolsky”,而不是尝试教授新的语言规则。我敢打赌有一种方法,因为它可以像 Apple 想要的那样发音“iphone”。
更新- 经过一些研究,这是我学到的:
dtrace
在运行say
,我发现在/System/Library/PrivateFrameworks/SpeechDictionary.framework/Resources打开了一些有趣的文件。这大概就是语音词典了,但是除了同音字是XML,都是二进制的。向同音词添加条目没有任何作用 - 它可能用于语音到文本。它们也是由 Apple 签名的代码 - 更改它们可能会阻止某些程序运行。
我的猜测是:
say
是语音合成管理器之上的一个轻量级代码。Apple 开发人员很容易添加一个命令行选项来获取语音字典 plist 的路径以进行备用音素映射,但他们没有。编写一个更好的say
.say
是 JRobert 建议的方式。 这是我的快速实施,使用道格哈里斯的拼写建议:
#!/bin/sh
echo $@ | tr …
Run Code Online (Sandbox Code Playgroud) 我有大约 200 行 Beowulf,我和我的几个朋友大约在一年半前将它们翻译成国际音标。当时,我们用来检查发音的工具之一是 OS X 的say
命令。
这是根据转换成 IPA 的诗的 Klaeber 版本的前六行,我知道肯定say
可以正确读出,因为我自己在 MacBook 上运行了它,我正在输入这个问题:
hwæt we ????r?den? in ?jæ??rd??um
?ðe?od?kyni??? ?rym? je?fru?non
hu? ð? æðel????s ?el?en ?frem?edon!
oft ?yld ?efi? ??æ?ðen? ?ræ??tum,
?m?ni?um mæj?um ?me?odusetl? ov?tæ?ax,
'ejzud? e?or?s, syð??nærest wæ??rð
Run Code Online (Sandbox Code Playgroud)
现在,尽我所能,我无法再正确读出上述任何一行。我已经尝试了所有讲英语的声音(10.5 之前的声音很搞笑),但是我之前肯定工作过的声音,例如 Fiona 和 Kate,现在似乎完全忽略了 IPA 字符。
这些是我这次使用的有点不干的测试命令:
say --rate=150 --voice=Fiona "/hwæt we ????r?den? in ?jæ??rd??um/"
say --voice=Fiona "/hwæt we ????r?den? in ?jæ??rd??um/"
say --rate=150 --voice=Fiona "hwæt we ????r?den? in ?jæ??rd??um"
say --voice=Fiona "hwæt …
Run Code Online (Sandbox Code Playgroud)