我正在为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()

10-04 12:44