从Python设置NSSpeechSynthesizer模式

问题描述

我正在使用PyObjC绑定来尝试从音素中获取语音文件

我发现我可以将语音转换为声音,如下所示:

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作为错误处理程序,并且有效。