UIButtonを押したときに再生するために、タップ音を追加しようとしています。これまでに2つの方法を試しましたが、期待したほどうまくいった方法はありませんでした。
単純なSystemSoundsを使用してみましたが、ユーザーがオーディオの音量を制御できない(または非常に制限されている)ため、これらは醜い解決策です。
また、次の形式でAVAudioPlayerを試しました(ViewControllerのinitメソッドで呼び出されます)。
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryAmbient error:nil]; [[AVAudioSession sharedInstance] setActive:YES error:nil]; [[AVAudioSession sharedInstance] setDelegate:self]; NSString *filePath = [[NSBundle mainBundle] pathForResource: @"button_pushed" ofType: @"wav"]; NSURL *fileURL = [[NSURL alloc] initFileURLWithPath: filePath]; self.buttonPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL: fileURL error: nil]; [buttonPlayer prepareToPlay]; [buttonPlayer setDelegate: self];
この2番目の方法は、最初の方法よりもはるかにうまく機能しているように見えました。特に、次のステートメントでサウンドを呼び出した場合:
if (self.clickPlayer.playing) {
[self.clickPlayer stop];
self.clickPlayer.currentTime = 0;
[self.clickPlayer play];
}
else {
[self.clickPlayer play];
}
上記により、ボタンを繰り返し押したときに非常に高速な応答が得られました。ちなみに、私のアプリでは応答時間が速いことが不可欠ですが、残念ながら、この2番目の方法は失敗します。
アプリケーションを約10秒間アイドル状態にすると、最初のサウンドのロードにかなりの遅延が発生します(その後、高速になり、再び応答します)。それだけでなく、ボタンが押されるのを遅らせます。この遅延は非常に小さいですが(おそらく1秒未満)、残念ながら、アプリケーションのユーザビリティに影響を与えます。まるでサウンドの割り当てが自動的に解除され、しばらく使用しないたびに初期化するか、メモリに入れる必要があるかのようです。
サウンドを常に利用可能に保ち、ボタンサウンドを実装するための遅延または別の、おそらく単純な方法を回避するための回避策はありますか?
さらにいくつかの情報:1。ARCを使用しています2. IBを使用していません3.現在、オーディオデリゲートメソッドは実装されていません4.他のアプリケーションからバックグラウンドでオーディオを再生する機能は重要です5.遅延が発生しましたiPhone5の場合; だから、私はそれがそれほど強力でないデバイスでどれくらいかかるか想像することができるだけです...