NSVoiceLocaleIdentifier的引用字符串在哪里?

时间:2016-12-05 23:23:17

标签: swift macos

我希望使用Swift在OSX上进行文本语音处理,其中语音使用的语言与为系统设置的首选项不同。我相信正确的方法是使用NSVoiceLocaleIdentifier。我在API documentation

中看到了这一点
  

NSVoiceLocaleIdentifier

     

声音的语言。 NSString

     

声明

     

NSString * const NSVoiceLocaleIdentifier;

     

讨论

     

描述的规范区域设置标识符字符串   语音的语言环境。语言环境通常由三部分组成   有序信息:语言代码,区域代码和变体   码。请参阅有关NSLocale类的文档或   国际化和本地化指南以获取更多信息。

我已经仔细阅读了有关NSLocale类和国际化和本地化指南的文档链接,下载了示例代码等,但我仍然没有找到NSStrings外观的参考。有人知道那些语言,区域和变体代码是什么以及它们是如何格式化的吗?

非常感谢提前。

1 个答案:

答案 0 :(得分:1)

拼凑一些东西 - 首先归功于信用到期,感谢Eric Aya解释如何获得Xcode playground to do speech synthesisGeorge Warner用于sample code printing out the available voices and locations,以及在上面的评论中Matt,我将我引向了一条工作路径。除非我有这个错误,否则看起来各种声音都围绕特定语言。所以我相信你为这个位置设置了声音。

这是Xcode游乐场的设置:

import Cocoa
import PlaygroundSupport
PlaygroundPage.current.needsIndefiniteExecution = true

以下是如何用西班牙语发声:

let synth = NSSpeechSynthesizer()
synth.setVoice( "com.apple.speech.synthesis.voice.paulina.premium" )
synth.startSpeaking( "Hola Mundo mañana" )

我怎么知道com.apple.speech.synthesis.voice.paulina.premium用西班牙语发言?

for voiceIdentifierString: String in NSSpeechSynthesizer.availableVoices() {
    var voiceLocaleIdentifier = ( NSSpeechSynthesizer.attributes( forVoice: voiceIdentifierString )[ NSVoiceLocaleIdentifier ] as! String )
    print( "\(voiceIdentifierString) speaks \(voiceLocaleIdentifier)" )
}

如果我的假设错了,纠正我。我正在为可能遇到类似需求的人发布此内容。