2015-09-24 5 views
8

Скорость AVSpeechUtterance не работает одинаково для iOS 9 и предыдущих версий ОС. Какое изменение я должен сделать, чтобы предложение говорилось с одинаковой скоростью. Есть ли какие-либо другие изменения, которые мне нужно сделать для iOS9? Кажется, что умножение AVSpeechUtterance.rate на 6.0 работает отлично. Спасибо!iOS9 AVSpeechИнтернет скорости для проблемы с AVSpeechSynthesizer

+0

Каким образом он не работает для iOS9? – Fogmeister

+0

Он говорит гораздо медленнее, поэтому множил ставку на 6.0 для iOS9. Но мне это не нравится. – CristiCh

+0

Я бы не использовал один и тот же множитель для любой скорости. Разница между синтезаторами может составлять 6х с низкой скоростью, но две скорости начинают сближаться ближе, чем вы добираетесь до 1. См. Ответ Эрни Томасона ниже. – Gregarious

ответ

12

Я также вижу изменение после компиляции с новым XCode. Ниже приведены мои сопоставления от старой к новой скорости. Теперь у меня разные назначения скорости, если у устройства < = iOS8 или> = 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

это похоже примерно правильный. вы также проверили iOS7? – CristiCh

+1

Я только что проверил iOS 7. Он играет немного медленнее, чем iOS 8 для меня. Я этого никогда не понимал. Например, я думаю, что iOS 7 нуждается в 0,25, чтобы получить его .015 в iOS 8. Я предоставляю управление скоростью +/- 3, чтобы пользователь мог справиться с этой небольшой разницей. –

+1

Это действительно не учтено для Apple, мое приложение предназначено для людей с ограниченными возможностями, и скорость должна быть одинаковой на всех версиях устройств/iOS. Кто-нибудь знает точное преобразование из версии в версию? –

1

Я столкнулся с этим вопросом несколько раз. Учитывая периодичность изменений прошивки в последнее время, я установил скорость речи по умолчанию, основанную на версии IOS пользователь работает в AppDelegate.swift как так:

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

На моих предпочтениях сцены, я добавил ползунок для регулировки скорости:

@IBOutlet var speechRateSlider: UISlider! 

в viewDidLoad, я добавил следующее:

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

Я также связали действие на 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")) 
} 

Учитывая неожиданное поведение различных устройств и так много версий прошивки, плавающую вокруг, я решил пойти по этому пути, а не прописывать его в мое приложение.

Смежные вопросы