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 '[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
你的新说法会像旧说法一样工作,但使用你喜欢的发音。
| 归档时间: |
|
| 查看次数: |
6143 次 |
| 最近记录: |