Playing a sound in a Swift Playground

后端 未结 2 1671
忘了有多久
忘了有多久 2020-12-18 07:11

How can I play a sound file with AVFoundation in a Swift playground? Ideally, the file would be in a URL, not in the local drive, but that\'s not i

相关标签:
2条回答
  • 2020-12-18 07:30

    This works on a project I haven't tried on Playground. First drag your sound to your project and choose to copy for your destination if needed and check "add to target" to your app.

    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()
    }
    
    0 讨论(0)
  • 2020-12-18 07:33

    I'm fumbling around in the dark on this one myself, but I think it may be due to some limitation of swift playgrounds. Consider this code:

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

    If we run this swift script in the terminal, it works fine and plays the midi file, but if you run the code in a playground, you get

    AVMIDIPlayer failed: The operation couldn’t be completed. (com.apple.coreaudio.avfaudio error -1.)

    On the positive side, being able to run it in a terminal shows that the code does work.

    0 讨论(0)
提交回复
热议问题