无延迟播放音效

时间:2015-08-03 17:00:20

标签: ios swift audio avfoundation avaudioplayer

我正在尝试制作一个小应用程序,以便快速教自己,并且我在解决如何让我的应用程序以某种方式运行方面遇到一些问题。

我的应用程序应该能够播放一个无声的声音,就像它在这个视频中的声音一样......

https://www.youtube.com/watch?v=Ks5bzvT-D6I

但每次重复点击屏幕时,播放声音之前会有一点延迟,所以听起来根本就没那么。

import UIKit
import AVFoundation

class ViewController: UIViewController {

    var audioPlayer = AVAudioPlayer()

    override func viewDidLoad() {
        super.viewDidLoad()

        var hornSound = NSURL(fileURLWithPath: NSBundle.mainBundle().pathForResource("horn", ofType: "mp3")!)

        AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback, error: nil)
        AVAudioSession.sharedInstance().setActive(true, error: nil)

        var error:NSError?
        audioPlayer = AVAudioPlayer(contentsOfURL: hornSound, error: &error)
        audioPlayer.prepareToPlay()
    }

    @IBAction func playSound(sender: UIButton) {
        audioPlayer.pause()
        audioPlayer.currentTime = 0
        audioPlayer.play()
    }
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }


}

我也遇到过关于使用spritekit

的这个帖子

Creating and playing a sound in swift

在试图让它播放声音时没有延迟,但是使用精灵套件我不能停止现有声音,所以它们只是重叠而不是我想要的效果。

是否有解决方案让它按照视频中的声音运作。

1 个答案:

答案 0 :(得分:5)

Apple建议AVAudioPlayer播放音频数据,除非您需要非常低的I / O延迟

所以你可能想尝试另一种方法。

在我的一个应用程序中,我通过从我的wav文件创建系统声音ID来播放倒计时声音。在课堂上试试这个:

import UIKit
import AudioToolbox

class ViewController: UIViewController {
    var sound: SystemSoundID = 0

    override func viewDidLoad() {
        super.viewDidLoad()

        var hornSound = NSURL(fileURLWithPath: NSBundle.mainBundle().pathForResource("horn", ofType: "mp3")!)

        AudioServicesCreateSystemSoundID(hornSound!, &self.sound)
    }

    @IBAction func playSound(sender: UIButton) {
        AudioServicesPlaySystemSound(self.sound)
    }

    ...
}