Доступ к голосовым атрибутам в библиотеке Ma c OS NSSpeechSynthesizer - PullRequest
0 голосов
/ 11 июля 2020

Я не понимаю, как получить доступ к голосовым атрибутам. Я знаю, что это, вероятно, новый ie вопрос, и он очень похож на c в Swift, но я не могу понять его всю жизнь. Согласно этому сайту, https://developer.apple.com/documentation/appkit/nsspeechsynthesizer/1448458-attributes Я могу получить доступ к голосовым атрибутам, открыв dictioanry. Я нашел список атрибутов: имя, возраст, пол и т. Д. c. Однако, когда я вызываю атрибуты для данного голосового идентификатора, я получаю кучу странных значений, и я не могу получить доступ ни к чему: Моя последняя попытка заключалась в том, чтобы сделать это, но она не сработала:

struct ttsVoice {
    let name: String
    let language: String
}

let tts = NSSpeechSynthesizer()
let availableVoices = NSSpeechSynthesizer.availableVoices
let voiceMap: [ttsVoice]=[]
func listVoices() -> Void {
    availableVoices.forEach { element in
        let voiceDictionary = NSSpeechSynthesizer.attributes(forVoice: element)
let name = voiceDictionary["name"]

}
    }

I пробовал много других подходов, некоторые сказали, что я не могу преобразовать строку в NSVoiceAttributeKey, et c. Этот просто говорит, что невозможно преобразовать значение типа String в ожидаемый тип аргумента NSSpeechSynthesizer.VoiceAttributeKey, engine.swift, Error

Кто-нибудь делал это раньше? Я уверен, что это что-то очень простое.

Спасибо.

1 Ответ

1 голос
/ 13 июля 2020

Я разобрался. Это было очень нелогично. Очевидно, этот словарь имеет voiceATtributeKeys в качестве ключей, а не строк. Итак, вам нужно сделать примерно так:

    availableVoices.forEach { element in
        let voiceDictionary = NSSpeechSynthesizer.attributes(forVoice: element)
        let name = voiceDictionary[NSSpeechSynthesizer.VoiceAttributeKey.name]!
        let language = voiceDictionary[NSSpeechSynthesizer.VoiceAttributeKey.localeIdentifier]!
print("voice \(name) speaks \(language)")
}

Спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...