问题描述
我发现我可以将语音转换为声音,如下所示:
import AppKit
ss = AppKit.NsspeechSynthesizer.alloc().init()
ss.setVoice_('com.apple.speech.synthesis.voice.Alex')
ss.startSpeakingString_toURL_("Hello",AppKit.NSURL.fileURLWithPath_("hello.aiff"))
# then wait until ve.isspeaking() returns False
下一步,为了获得更大的控制权,我想先将文字转换成音素,然后再说出来。
phonemes = ss.phonemesFromText_("Hello")
但是现在我被困住了,因为我从文档中知道要使startSpeakingString
接受音素作为输入,您首先需要将NsspeechSynthesizer.SpeechPropertyKey.Mode设置为“ phoneme”。而且我认为我应该使用setobject_forProperty_error_
进行设置。
我不明白两件事:
-
PyObjC中的
NsspeechSynthesizer.SpeechPropertyKey.Mode
在哪里?我抄录了整个PyObjC目录,SpeechPropertyKey
在任何地方都没有提及。 -
如何使用
setobject_forProperty_error_
进行设置?我认为基于the docs,第一个参数是要设置的值(尽管它被称为“一个对象”,因此在这种情况下为True?),第二个为密钥(在这种情况下将为音素?),最后有一个错误回调。但是我不确定如何在Python中传递这些参数。
解决方法
PyObjC中的NSSpeechSynthesizer.SpeechPropertyKey.Mode在哪里?
无处。
如何使用setObject_forProperty_error_进行设置?
ss.setObject_forProperty_error_("PHON","inpt",None)
“ PHON”与NSSpeechSynthesizer.SpeechPropertyKey.Mode.phoneme相同 “ inpt”与NSSpeechSynthesizer.SpeechPropertyKey.inputMode相同
似乎在PyObjC的任何地方都没有定义它们,但是我通过启动XCode并编写了一个简短的Swift代码段来找到它们:
import Foundation
import AppKit
let synth = NSSpeechSynthesizer()
let x = NSSpeechSynthesizer.SpeechPropertyKey.Mode.phoneme
let y = NSSpeechSynthesizer.SpeechPropertyKey.inputMode
现在在调试器中查看x和y显示它们是上面提到的字符串。
关于如何调用setObject_forProperty_error_的方法,我只是尝试传入这些字符串,并传入None作为错误处理程序,并且有效。