8

AVSpeechUtterance レートは、iOS 9 とそれ以前のバージョンの OS では同じようには機能しません。文が同じ速度で話されるようにするには、これを変更する必要があります。iOS9 用に他に必要な変更はありますか? AVSpeechUtterance.rate に 6.0 を掛けるとうまくいくようです。ありがとうございました!

4

2 に答える 2

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
于 2015-10-02T19:31:04.257 に答える
2

私もこの問題に何度か遭遇しました。最近の iOS の変更頻度を考慮して、ユーザーが実行している 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"))
}

デバイス間で予期しない動作が発生し、非常に多くのバージョンの iOS が存在することを考慮して、アプリにハードコードするのではなく、この方法を選択しました。

于 2015-12-09T02:40:31.187 に答える