快速播放声音

时间:2016-03-02 15:13:30

标签: ios xcode swift audio

大家好我想尝试在我的xcode游戏中快速播放声音并自动启动,我尝试了一堆不同的代码。我能够在下面的viewdidload方法中使用Objective-C编写和运行它,我创建了一个声音本身的方法,并在viewdidload中调用它。

-(void)Loadingsound {

AudioServicesPlaySystemSound(Loadingsound);

}

-(void)viewDidLoad {

[super viewDidLoad];

NSURL *LoadingSound = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"Tap Sound" ofType:@"wav"]];

AudioServicesCreateSystemSoundID((__bridge CFURLRef)LoadingSound, &Loadingsound);

[self Loadingsound];

但是现在我试图在swift中复制它,但我无法这样做。我在下面的另一个问题中看到了这个代码在堆栈溢出问题,但是现在这是在Xcode 7.2.1和Swift 2.0上,是否有可能有一种新的方法来编写它?这是我尝试过的代码,当游戏开始时声音没有加载。

override func viewDidLoad() {

    super.viewDidLoad()


if let soundURL = NSBundle.mainBundle().URLForResource("Tap Sound", withExtension: "wav") {
        var mySound: SystemSoundID = 0

        AudioServicesCreateSystemSoundID(soundURL, &mySound)

        // Play

        AudioServicesPlaySystemSound(mySound);
}

我尝试运行代码的另一种方法是......

覆盖func viewDidLoad(){

    super.viewDidLoad()

var loadingsound = NSURL(fileURLWithPath: 

NSBundle.mainBundle().pathForResource("Tap Sound", ofType: "wav"))

    var audioPlayer = AVAudioPlayer()

        audioPlayer = AVAudioPlayer(contentsOfURL: loadingsound, error: nil)
        audioPlayer.prepareToPlay()

        audioPlayer.play()

在我尝试运行它的方法中,符合失败并显示错误,告诉我输入“!”在“wav”中绑定并在此之后放置括号后签名。在我输入感叹号之后,它告诉我将下面的“错误”替换为“filetypeHint”。有人请帮我解决这个问题。原版在objective-c中工作得非常好,有人可以帮助我快速翻译那些确切的代码。我看到的其他示例显示错误。

谢谢!

1 个答案:

答案 0 :(得分:2)

检查您的“Tap Sound”声音文件是否在项目目标中。您需要通过URLForResource加载,在我的情况下,请不要设置扩展类型。你只需要文件名。你可以把它放在这样的方法中。

func playMusic(_ filename: String) {
    var audioPlayer: AVAudioPlayer?
    let url = Bundle.main.url(forResource: filename, withExtension: nil)
    if (url == nil) {
       print("Could not find file: \(filename)")
       return
    }

    do {
        try audioPlayer =  AVAudioPlayer(contentsOf: url!)
        let player = audioPlayer

        // From Documentation: Negative integer value to loop the sound indefinitely until you call the stop method.
        player!.numberOfLoops = -1
        player!.prepareToPlay()
        player!.play()
    } catch _ {
        audioPlayer = nil;
    } 
}

// call the function with your soundfile
playMusic("Tap Sound")