Swift 6での書き方
短い効果音にはAudioToolboxを使えるよ。se.wavをアプリのリソースに追加して使ってね。画面などのプロパティにEffectSound?を保持し、再生時にplay()を呼び出す。解放時にはサウンドIDも破棄するよ。下の速度の話は当時の体験談で、現在の環境で一律に速いと保証するものではないよ。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
import Foundation import AudioToolbox final class EffectSound { private var soundID: SystemSoundID = 0 init?() { guard let url = Bundle.main.url(forResource: "se", withExtension: "wav") else { return nil } guard AudioServicesCreateSystemSoundID(url as CFURL, &soundID) == kAudioServicesNoError else { return nil } } func play() { AudioServicesPlaySystemSound(soundID) } deinit { AudioServicesDisposeSystemSoundID(soundID) } } |
以下は旧バージョン当時の記録
1秒間に何回も連続で鳴らすような処理をしてみたら
AVAudioPlayerでは重すぎたので、SystemSoundIDを使ってみたら軽かったのでこっちを採用。
SystemSoundIDの実装(Swift)
|
1 2 3 4 5 6 7 8 9 10 11 |
import AudioToolbox /* 中略 */ //準備(画面読み込み時など) var soundIdRing:SystemSoundID = 0 let soundUrl = NSURL.fileURLWithPath(NSBundle.mainBundle().pathForResource("se", ofType:"wav")!) AudioServicesCreateSystemSoundID(soundUrl, &soundIdRing) //実際に音を鳴らす AudioServicesPlaySystemSound(soundIdRing) |
ゲームとか、他で処理とられるようなものはSystemSoundID使うべき。
システム画面とかBGMとかだったら、AVAudioPlayerで良さげ。
