播放短音的最佳/最佳方式

时间:2015-02-04 18:58:22

标签: swift avaudioplayer audiotoolbox

我试图在我的Swift应用程序中播放一个简短的声音。 我想要播放的声音:

  • 很短(不到五秒钟);
  • 是系统声音之一(例如:收到的短信);
  • 很可能会在我的申请生命周期中多次播放;
  • 可以在小于声音长度的时间内发射两次(即在第一次完成比赛之前发射第一个并且第二个发射);

除此之外,我想:

  • 仅在应用程序处于活动状态且“静音”模式下才能听到声音。关闭;
  • 使手机振动(无论静音模式是打开还是关闭)。

到目前为止,这就是我所拥有的:

import AVFoundation

class SoundPlayer {
    // Singleton
    class var sharedInstance : SoundPlayer {
        struct Static {
            static let instance : SoundPlayer = SoundPlayer()
        }
        return Static.instance
    }

    // Properties
    var error:NSError?
    var audioPlayer = AVAudioPlayer()
    let soundURL = NSURL(fileURLWithPath: NSBundle.mainBundle().pathForResource("sound", ofType: "wav")!) // Working
    //let soundURL = NSURL(string:"/System/Library/Audio/UISounds/sms-received1.caf") // Working
    //let soundURL = NSURL(fileURLWithPath: NSBundle(identifier: "com.apple.UIKit")!.pathForResource("sms-received1", ofType: "caf")!) // Not working (crash at runtime)

    init() {
        AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryAmbient, error: nil)
        AVAudioSession.sharedInstance().setActive(true, error: nil)

        audioPlayer = AVAudioPlayer(contentsOfURL: soundURL, error: &error)

        if (error != nil) {
            println("[SoundPlayer] There was an error: \(error)")
        }
    }

    func playSound() {
        if (audioPlayer.playing) {
            audioPlayer.stop()
        }
        audioPlayer.play()
    }
}

据我所知,有几种播放声音的方法。 两种最常见的方式似乎是:AVAudioPlayer(就像我做的那样)和AudioToolbox

从那里开始,我问自己三个问题:

  1. 对于我的情况,这两个中哪一个最适合(最佳/适当)? AVAudioPlayer目前正常运作)
    • 我们是否可以播放系统声音? (如果不将自己的声音添加到项目中,则尺寸会非常小)
    • 如果是这样,NSURL(string:"/System/Library/Audio/UISounds/sms-received1.caf")是检索声音的好方法吗?有没有更好/更合适的解决方案?
  2. 有没有办法在发出声音的同时振动手机?

0 个答案:

没有答案