2014-10-30 142 views
5

如何使用AVFoundation在Swiftplayground中播放聲音文件?理想情況下,該文件將在URL中,而不是在本地驅動器中,但這並不重要。在快速遊樂場播放聲音

+0

您到目前爲止嘗試過的任何代碼? – 2014-10-30 16:29:37

+0

看看這個鏈接http://stackoverflow.com/questions/24043904/creating-and-playing-a-sound-in-swift?rq=1 – 2014-10-30 16:33:44

+0

我不確定你可以。 爲了確保你能在'playground'內容創建新的文件夾'Resources'進一步遊樂場將與路徑類似發現: 播放文件:///var/folders/74/d78g19sj65bc6z2n6gjw9n4r0000gn/T/com.apple。 dt.Xcode.pg/applications/YourApp-67685-8.app/Want_You.mp3 但是'avPlayer.prepareToPlay()'將總是返回'false'。 – 2014-10-30 17:05:18

回答

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!) 
} 

如果我們運行在終端這個迅速腳本,它工作正常,並播放MIDI文件,但如果你運行在一個操場上的代碼,你會得到

AVMIDIPlayer失敗:操作無法完成。 (com.apple.coreaudio.avfaudio錯誤-1。)

從積極的方面來看,能夠在終端中運行它表明代碼確實有效。

+0

我得到了相同的結果... – cfischer 2014-10-31 12:11:53

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() 
}