Ben*_*lan 6 text-to-speech say macos
我有大约 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 we ????r?den? in ?jæ??rd??um"
say --voice=Fiona hwæt we ????r?den? in ?jæ??rd??um
say --voice=Fiona /hwæt we ????r?den? in ?jæ??rd??um/
Run Code Online (Sandbox Code Playgroud)
但除了有时发音的 æ,它们都完全跳过了 IPA 字符。? 当然永远不会再将其纳入综合,而上次确实如此。
我是否遗漏了什么,或者他们是否可能出于某种原因在最近的更新中删除了 IPA 功能?我很确定我们使用的是 Mavericks,但也可能是 Snow Leopard。
小智 8
这是一个 Ruby 脚本,它接受一串 Unicode IPA 文本并将其转换为 OS X 的say命令语音语法。
将这段 Ruby 代码放入一个文件中——我们称之为ipa2say.rb. 使文件可执行(即chmod u+x ipa2say.rb)。执行可执行文件,将一些 IPA 文本传递给它。输出将出现一些 ASCII 拼音文本。
然后say使用[[inpt PHON]]指令运行。
所以,举个例子。假设您想要sayIPA 文本“??nt?r?næ??n?lf??n?t?k?ælf??b?tf?r?v?r”。从命令行:
echo "??nt?r?næ??n?l f??n?t?k ?ælf??b?t f??r?v?r" | ./ipa2say.rb
Run Code Online (Sandbox Code Playgroud)
它会吐出:
IXntrnAESnl fAXnEHtIXk AElfbEHt frEHvr
Run Code Online (Sandbox Code Playgroud)
然后你运行: say "[[inpt PHON]]IXntrnAESnl fAXnEHtIXk AElfbEHt frEHvr"
这是脚本。
#!/usr/bin/ruby -w
map = { 'æ' => 'AE',
'e?' => 'EY',
'?' => 'AO',
'??' => 'AX',
'i' => 'IY',
'?' => 'EH',
'?' => 'IH',
'a?' => 'AY',
'?' => 'IX',
'?' => 'AA',
'u' => 'UW',
'?' => 'UH',
'?' => 'UX',
'o?' => 'OW',
'a?' => 'AW',
'??' => 'OY',
'b' => 'b',
'?' => 'C',
'd' => 'd',
'ð' => 'D',
'f' => 'f',
'g' => 'g',
'h' => 'h',
'?' => 'J',
'k' => 'k',
'l' => 'l',
'm' => 'm',
'n' => 'n',
'?' => 'N',
'p' => 'p',
'r' => 'r',
's' => 's',
'?' => 'S',
't' => 't',
'?' => 'T',
'v' => 'v',
'w' => 'w',
'j' => 'y',
'z' => 'z',
'?' => 'Z',
'?' => '',
' ' => ' ',
'?' => ''
}
text = ARGF.read
substring = ''
text.split("").each do |c|
substring << c
if substring.length == 2
if map.has_key? substring
print map[ substring ]
else
front = substring[0]
if map.has_key? front
print map[ front ]
end
back = substring[1]
if map.has_key? back
print map[ back ]
end
end
substring = ''
end
end
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1875 次 |
| 最近记录: |