2015-09-24 12 views
8

La velocità di AVSpeechUtterance non funziona allo stesso modo per iOS 9 e versioni precedenti del sistema operativo. Qual è il cambiamento che devo fare in modo che la frase venga pronunciata alla stessa velocità. Ci sono altri cambiamenti che devo fare per iOS9? Sembra che la moltiplicazione di AVSpeechUtterance.rate di 6.0 funzioni correttamente. Grazie!iOS9 AVSpeechCorso di frequenza per il problema di AVSpeechSynthesizer

+0

In che modo non funziona lo stesso per iOS9? – Fogmeister

+0

Parla molto più lentamente, quindi ho moltiplicato la frequenza di 6.0 per iOS9. Ma non mi piace questa soluzione. – CristiCh

+0

Non utilizzerei lo stesso moltiplicatore per nessuna velocità. La differenza tra i sintetizzatori potrebbe essere 6x a un ritmo lento, ma i due tassi iniziano a convergere più ci si avvicina a 1. Vedere la risposta di Ernie Thomason sotto. – Gregarious

risposta

12

Vedo anche la modifica dopo la compilazione con il nuovo XCode. Di seguito sono riportate le mie mappature dalla vecchia alla nuova velocità. Ora ho diverse assegnazioni di velocità se il dispositivo è < = iOS8 o> = iOS9.

  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 
+0

sembra essere giusto. hai controllato anche iOS7? – CristiCh

+1

Ho appena controllato iOS 7. Suona un po 'più lento di iOS 8 per me. Non l'ho mai capito prima. Ad esempio, penso che iOS 7 abbia bisogno di circa 0,25 per farlo corrispondere a .015 in iOS 8. Fornisco un controllo di velocità +/- 3 in modo che l'utente possa gestire questa piccola differenza. –

+1

Questo è davvero non considerato per Apple, la mia app è progettata per persone con disabilità e la velocità deve essere esattamente la stessa su tutti i dispositivi/versioni iOS. Qualcuno conosce la conversione esatta dalla versione alla versione? –

1

Mi sono imbattuto in questo problema anche un paio di volte. Data la frequenza delle modifiche a iOS ultimamente, ho impostato una velocità di lettura di default in base alla versione di iOS l'utente è in esecuzione in AppDelegate.swift in questo modo:

// 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") 
} 

Sulla mia scena preferenze, ho aggiunto un cursore per regolare la velocità:

@IBOutlet var speechRateSlider: UISlider! 

In viewDidLoad, ho aggiunto il seguente:

// 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) 

ho anche legato un'azione al UISlider:

@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")) 
} 

Dato il comportamento imprevisto tra i dispositivi e così tante versioni di iOS in giro, ho optato per seguire questa strada, piuttosto che hard-code nella mia app.

Problemi correlati