我正在为Mac OS X编写一个morse代码命令行工具,使用Swift作为脚本语言编写。我想让用户选择使用苹果的NSSpeechSynthesizer来收听莫尔斯电码。我可以让它在一个应用程序内工作,不费吹灰之力。但是在命令行工具或Swift脚本中,startSpeakingString()函数是听不见的——除非我逐行遍历代码。
下面是Swift中的代码(对于正确的命令行工具或脚本也是如此)
import Foundation
import AppKit
var synth:NSSpeechSynthesizer = NSSpeechSynthesizer.init()
synth.startSpeakingString("dit dah")
这是Objective-C命令行工具中的代码
@import Foundation;
@import AppKit;
int main(int argc, const char * argv[]) {
@autoreleasepool {
NSSpeechSynthesizer *synth = [[NSSpeechSynthesizer alloc] init];
[synth startSpeakingString:@"dit dah"];
}
return 0
}
nsspeechysizer实例似乎在所有情况下都是合法的。函数的作用是:在任何情况下都返回true。这是我的回购协议(正在进行中):https://github.com/jpavley/swift-scripts
最佳答案
NSSpeechSynthesizer.isAnyApplicationSpeaking()等待语音结束。
import Foundation
import AppKit
class Speaker: NSObject , NSSpeechSynthesizerDelegate {
var synth : NSSpeechSynthesizer!
func run() {
self.synth = NSSpeechSynthesizer.init()
self.synth.delegate = self
self.synth.startSpeakingString("First word")
while(NSSpeechSynthesizer.isAnyApplicationSpeaking() == true) {}
}
}
var speak : Speaker = Speaker.init()
speak.run()