Wie der Zugriff auf Siri-Stimme ausgewählt durch die Benutzer-Einstellungen in iOS 11

Ich Schreibe eine app, die text-to-speech mit AVSpeechSynthesizer. Der code für die Erzeugung der äußerung und mit der Sprachausgabe wurde gut funktioniert.

let utterance = AVSpeechUtterance(string: text)
utterance.voice = currentVoice
speechSynthesizer.speak(utterance)

Nun mit iOS 11, ich will Spiel, die Stimme, der ausgewählt durch die Benutzer in der Handy-app „Einstellungen“, aber ich sehe keine Möglichkeit, diese Einstellung.

Ich habe versucht, immer die Liste der installierten Stimmen und auf der Suche nach einer, der hat eine quality von .enhanced, aber manchmal gibt es keine enhanced voice installiert, und selbst wenn es ist, es kann oder kann nicht die Stimme ausgewählt, indem der Benutzer in der app „Einstellungen“.

static var enhanced: AVSpeechSynthesisVoice? {
    for voice in AVSpeechSynthesisVoice.speechVoices() {
        if voice.quality == .enhanced {
            return voice
        }
    }

    return nil
}

Die Fragen sind von zweierlei Art:

  1. Wie kann ich bestimmen, welche voice ausgewählt wurde, die vom Benutzer in der Einstellung der app?
  2. Warum auf einigen iOS-11-Handys, die sind mit der neuen Siri-Stimme bin ich nicht der Suche nach einer „enhanced“ Stimme installiert?

Wie der Zugriff auf Siri-Stimme ausgewählt durch die Benutzer-Einstellungen in iOS 11

InformationsquelleAutor picciano | 2017-09-20



2 Replies
  1. 2

    Ich nehme an, wenn es eine Methode zur Verfügung, die für die Auswahl und die gleiche Stimme wie in der app „Einstellungen“, dann wäre es angezeigt, auf die Dokumentation für die Klasse AVSpeechSynthesisVoice unter der Suche nach Stimmen Thema. Springen der definition im code of AVSpeechSynthesisVoice, konnte ich nicht finden irgendwelche anderen Methoden zum abrufen Stimmen.

    Hier ist mein workaround immer auf eine erweiterte voice-over für die app, die ich auf Arbeit bin:

    Verbesserte Versionen der Stimmen sind wohl nicht vorhanden ist in der neuen iOS-Geräten standardmäßig, um zu sparen Lagerung. Durchlaufen thru verfügbaren Stimmen auf mein nagelneues iPhone, fand ich nur Standard-Qualität Stimmen wie: [AVSpeechSynthesisVoice 0x1c4e11cf0] Sprache: de-de, Name: Samantha, Qualität: Standard [com.apple.ttsbundle.Samantha-kompakt]

    Fand ich diese Artikel zum aktivieren von zusätzlichen voice-over-Stimmen und heruntergeladen namens „Samantha (Erweitert)“ unter Ihnen. Die überprüfung der Liste der verfügbaren Stimmen wieder, bemerkte ich die folgende Ergänzung:
    [AVSpeechSynthesisVoice 0x1c4c03060] Sprache: de-de, Name: Samantha (Erweitert), Qualität: Verstärkte [Kom.apple.ttsbundle.Samantha-premium]

    Ab jetzt war ich in der Lage, wählen Sie eine erweiterte Sprache, die auf Xcode. Da die AVSpeechSynthesisVoice.currentLanguageCode () – Methode stellt die aktuell gewählte Sprache, lief Sie den folgenden code, um eine Auswahl der ersten verstärkten Stimme, die ich finden konnte. Wenn keine enhanced-version verfügbar war, würde ich nur wählen Sie die verfügbaren Standard – (der code ist für eine VoiceOver-custom-Klasse, die ich erschaffe, um alle reden, die in meiner app. Das Stück unten aktualisiert seine Stimme variabel).

    var voice: AVSpeechSynthesisVoice!
    
    for availableVoice in AVSpeechSynthesisVoice.speechVoices(){
            if ((availableVoice.language == AVSpeechSynthesisVoice.currentLanguageCode()) &&
                (availableVoice.quality == AVSpeechSynthesisVoiceQuality.enhanced)){ //If you have found the enhanced version of the currently selected language voice amongst your available voices... Usually there's only one selected.
                self.voice = availableVoice
                print("\(availableVoice.name) selected as voice for uttering speeches. Quality: \(availableVoice.quality.rawValue)")
            }
    }
    if let selectedVoice = self.voice { //if sucessfully unwrapped, the previous routine was able to identify one of the enhanced voices
            print("The following voice identifier has been loaded: ",selectedVoice.identifier)
    } else {
            self.voice = AVSpeechSynthesisVoice(language: AVSpeechSynthesisVoice.currentLanguageCode()) // load any of the voices that matches the current language selection for the device in case no enhanced voice has been found.

    }

    Ich bin auch in der Hoffnung Apple wird enthüllen, eine Methode zum direkten laden der ausgewählten Sprache, aber ich hoffe, dass diese Arbeit dazu dienen können, in der Zwischenzeit. Ich denke, Siri verbessert, die Stimme wird heruntergeladen unterwegs, also vielleicht ist dies der Grund, warum es so lange braucht, um Antwort auf meine Sprachbefehle 🙂

    Beste Grüße.

    • Wie es aussieht können Sie auf den „Namen“ Stimmen, und sogar Ihre premium – /Erweiterten Versionen, wenn der Benutzer heruntergeladen hat, Sie an das Gerät. Die Siri Stimme (ich denke, es ist „Nora“ auf macOS, aber NICHT auf iOS) scheint immer noch off-limits. Wenn ich wählen Sie Sie als meine Standard-voice in den Einstellungen und Fragen, für eine @"en-US" Stimme, bekomme ich die alten, computery Siri. Mist.
    • Ich schrieb openradar.appspot.com/42656565, Zugriff auf Siri ‚ s Stimme. Bitte dupe.
  2. 1

    Es sieht aus wie das neue Siri Stimme unter iOS 11 ist nicht Teil der AVSpeechSynthesis-API und nicht für Entwickler zur Verfügung.

    In macOS 10.13 High Sierra (die bekommt auch die neue Stimme), es scheint eine neue SiriTTS Rahmen, der wahrscheinlich im Zusammenhang mit dieser Funktionalität, aber es ist in PrivateFrameworks, damit es nicht eine Entwickler-API.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.