Die AVSpeechUtterance Rate funktioniert nicht für iOS 9 und früheren Versionen von OS. Welche Änderung muss ich machen, damit der Satz mit der gleichen Geschwindigkeit gesprochen wird? Gibt es noch andere Änderungen, die ich für iOS9 vornehmen muss? Es scheint, dass die Multiplikation der AVSpeechUtterance.rate mit 6.0 funktioniert. Vielen Dank!iOS9 AVSpeechAutorate Rate für AVSpeechSynthesizer Problem
Antwort
Ich sehe auch die Änderung nach dem Kompilieren mit dem neuen XCode. Unten sind meine Abbildungen von alter zu neuer Geschwindigkeit. Ich habe jetzt verschiedene Geschwindigkeitszuweisungen, wenn das Gerät < = iOS8 oder> = iOS9 ist.
iOS 8 iOS 9
Very Slow 0 0.42
Slower 0.06 0.5
My Normal 0.15 0.53
Faster 0.23 0.56
das scheint ungefähr richtig zu sein. Hast du auch iOS7 überprüft? – CristiCh
Ich habe gerade iOS 7 überprüft. Es spielt ein wenig langsamer als iOS 8 für mich. Das habe ich vorher nie bemerkt. Zum Beispiel denke ich, dass iOS 7 ungefähr .25 benötigt, um es mit 0.015 in iOS 8 zu vergleichen. Ich biete eine +/- 3 Geschwindigkeitssteuerung, so dass der Benutzer mit diesem kleinen Unterschied umgehen kann. –
Das ist für Apple wirklich uninteressant, meine App ist für Menschen mit Behinderungen ausgelegt und die Geschwindigkeit muss auf allen Geräten/iOS-Versionen genau gleich sein. Wer kennt die exakte Umsetzung von Version zu Version? –
Ich habe dieses Problem auch ein paar Mal getroffen. Angesichts der Häufigkeit von Änderungen an iOS in letzter Zeit hat ich einen Standard-Sprachkurs auf der iOS-Version auf Basis gesetzt wird der Benutzer in AppDelegate.swift
läuft etwa so:
// iOS speech synthesis is flakey between 8 and 9, so set default utterance rate based on iOS version
if NSProcessInfo().isOperatingSystemAtLeastVersion(NSOperatingSystemVersion(majorVersion: 8, minorVersion: 0, patchVersion: 0)) {
NSUserDefaults.standardUserDefaults().setFloat(0.15, forKey: "defaultSpeechRate")
if NSProcessInfo().isOperatingSystemAtLeastVersion(NSOperatingSystemVersion(majorVersion: 9, minorVersion: 0, patchVersion: 0)) {
NSUserDefaults.standardUserDefaults().setFloat(0.53, forKey: "defaultSpeechRate")
}
} else {
NSUserDefaults.standardUserDefaults().setFloat(0.5, forKey: "defaultSpeechRate")
}
Auf meinen Vorlieben Szene, fügte ich einen Schieberegler die Geschwindigkeit anzupassen:
@IBOutlet var speechRateSlider: UISlider!
In viewDidLoad
, habe ich die folgenden:
// Set speech rate
speechRateSlider.value = NSUserDefaults.standardUserDefaults().floatForKey("defaultSpeechRate")
speechRateSlider.maximumValue = 1.0
speechRateSlider.minimumValue = 0.0
speechRateSlider.continuous = true
speechRateSlider.addTarget(self, action: "adjustSpeechRate:", forControlEvents: UIControlEvents.ValueChanged)
ich auch eine Aktion der UISlider
gebunden:
@IBAction func adjustSpeechRate(sender: AnyObject) {
NSUserDefaults.standardUserDefaults().setFloat(speechRateSlider.value, forKey: "defaultSpeechRate")
speechRateSlider.setValue(NSUserDefaults.standardUserDefaults().floatForKey("defaultSpeechRate"), animated: true)
print(NSUserDefaults.standardUserDefaults().floatForKey("defaultSpeechRate"))
}
das unerwartete Verhalten auf verschiedenen Geräten und so viele Versionen von iOS Umlauf gegeben, entschied ich mich, diesen Weg zu gehen, anstatt hart Code es in meine App.
Inwiefern funktioniert es nicht für iOS9? – Fogmeister
Es spricht viel langsamer, also habe ich die Rate für iOS9 um 6.0 multipliziert. Aber ich mag diese Lösung nicht. – CristiCh
Ich würde nicht den gleichen Multiplikator für jede Rate verwenden. Der Unterschied zwischen den Synthesizern kann 6x mit einer langsamen Rate sein, aber die beiden Raten beginnen sich zu konvergieren, je näher man an 1 kommt. Siehe Ernie Thomasons Antwort unten. – Gregarious