我有大约 200 行贝奥武甫,大约一年半前我和几个朋友将它们翻译成了国际音标。当时,我们用来检查发音的工具之一是 OS X 的say
命令。
以下是根据 Klaeber 版诗歌转换成 IPA 格式后的前六行,我确信say
可以正确读出,因为我自己已经在 MacBook 上运行过它,而我现在就是用这台 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ð
现在,无论我怎么努力,我都无法让它正确地读出上面的任何一行。我试过了所有的英语语音(10.5 之前的语音是搞笑),但我确信之前有效的配音,比如 Fiona 和 Kate,现在似乎完全忽略了 IPA 角色。
这些是我这次使用的一些不太 DRY 的测试命令:
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/
但是它们都完全跳过了 IPA 字符,除了有时会发音的 æ。ɣ 肯定再也不会出现在合成中,而上次它确实出现了。
是我遗漏了什么吗?还是说他们可能出于某种原因在最近的更新中删除了 IPA 功能?我确信我们使用的是 Mavericks,但也可能是 Snow Leopard。
答案1
这是一个 Ruby 脚本,它接受一串 Unicode IPA 文本并将其转换为 OS X 的say
命令语音句法。
将这段 Ruby 代码放入一个文件(我们称之为)ipa2say.rb
。使文件可执行(即chmod u+x ipa2say.rb
)。执行可执行文件,将一些 IPA 文本传送给它。输出将得到一些 ASCII 语音文本。
然后say
使用该[[inpt PHON]]
指令运行。
举个例子。假设您想要say
IPA 文本“ˌɪntərˈnæʃənəl fəˈnɛtɪk ˈælfəˌbɛt fəˈrɛvər”。从命令行:
echo "ˌɪntərˈnæʃənəl fəˈnɛtɪk ˈælfəˌbɛt fəˈrɛvər" | ./ipa2say.rb
它会吐出:
IXntrnAESnl fAXnEHtIXk AElfbEHt frEHvr
然后运行: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
答案2
只是想补充一点,IPA 发音似乎已移至 VoiceOver,我猜现在它是一个完全不同的 TTS 引擎。转到 VoiceOver 实用程序、语音,然后发音,可以使用 IPA 进行自定义。但这对“说”和“编辑、语音、开始说话”命令完全没有影响,不过——呃!
答案3
如果对短语不起作用,请尝试在每个单词周围加上括号/斜线。这不起作用:
say "/hwæt we ˈɡɑːrˌdenɑ in ˈjæːɑrdɑɣum/"
但这似乎:
say "/hwæt/ /we/ /ˈɡɑːrˌdenɑ/ /in/ /ˈjæːɑrdɑɣum/"
方括号也有效:
say "[huː] [ðɑ] [æðelɪŋɡɑs] [ˈelːen] [ˈfremːedon]"
祝你好运!
(因为我重读并发现您尝试用斜线括住整个短语,所以进行了编辑。)