在Swift游乐场播放声音

时间:2014-10-30 16:00:19

标签: swift

如何在Swift playground中播放AVFoundation的声音文件?理想情况下,文件将位于URL中,而不是本地驱动器中,但这并不重要。

2 个答案:

答案 0 :(得分:2)

我自己在黑暗中摸索着,但我认为这可能是由于游乐场的一些限制。请考虑以下代码:

#!/usr/bin/swift

import Cocoa
import AVFoundation

var error: NSError?

println("Hello, Audio!")
var url = NSURL(fileURLWithPath: "/Users/somebody/myfile.mid") // Change to a local midi file
var midi = AVMIDIPlayer(contentsOfURL: url, soundBankURL: nil, error: &error)
if midi == nil {
    if let e = error {
        println("AVMIDIPlayer failed: " + e.localizedDescription)
    }
}
midi.play(nil)
while midi.playing {
    // Spin (yeah, that's bad!)
}

如果我们在终端中运行这个swift 脚本,它可以正常工作并播放midi文件,但是如果你在游乐场中运行代码,你就会得到

  

AVMIDIPlayer失败:无法完成操作。 (com.apple.coreaudio.avfaudio错误-1。)

从积极的方面来说,能够在终端中运行它会显示代码确实有效。

答案 1 :(得分:1)

这适用于我在Playground上没试过的项目。首先将声音拖到项目中,然后根据需要选择复制目的地,并选中“添加到目标”到您的应用。

import Cocoa
import AVFoundation


var beepSound = NSURL(fileURLWithPath: NSBundle.mainBundle().pathForResource("beep", ofType: "aif")!)
func initBeep(){
    beepPlayer = AVAudioPlayer(contentsOfURL: beepSound, error: nil)
    beepPlayer.prepareToPlay()
}

func playBeepSound(){
    beepPlayer.play()
}
func applicationDidFinishLaunching(aNotification: NSNotification?) { 

    initBeep() 
}
@IBAction func btnPlayBeepSound(sender: AnyObject) {
   playBeepSound()
}