2014-10-30 19 views
5

Jak mogę odtwarzać plik dźwiękowy z AVFoundation w Swiftplayground? Idealnie byłoby, gdyby plik znajdował się w adresie URL, a nie na dysku lokalnym, ale nie jest to ważne.Odtwarzanie dźwięku na placu zabaw Swift

+0

Kod, który próbowałeś do tej pory? –

+0

Spójrz na ten link http://stackoverflow.com/questions/24043904/creating-and-playing-a-sound-in-swift?rq=1 –

+0

Nie jestem pewien, czy możesz. Na pewno można utworzyć nowy folder '' Resources' pod treścią playground' i dodatkowo plac zabaw, znajdzie je ze ścieżką coś takiego: odtwarzanego pliku: ///var/folders/74/d78g19sj65bc6z2n6gjw9n4r0000gn/T/com.apple. dt.Xcode.pg/applications/YourApp-67685-8.app/Want_You.mp3 ale 'avPlayer.prepareToPlay()' zawsze zwraca 'false'. –

Odpowiedz

2

Sam się gmeram po ciemku, ale myślę, że może to być spowodowane ograniczeniem szybkich placów zabaw. Rozważmy następujący kod:

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

Jeśli uruchomić ten szybki skrypt w terminalu, to działa dobrze i odtwarza plik MIDI, ale jeśli uruchomić kod na placu zabaw, można dostać

AVMIDIPlayer failed: Operacja nie mogła zostać zakończona. (com.apple.coreaudio.avfaudio błąd -1.)

Po stronie pozytywnej, możliwość uruchomienia go w terminalu pokazuje, że kod działa.

+0

Otrzymuję te same wyniki ... – cfischer

1

To działa na projekcie, którego nie próbowałem na placu zabaw. Najpierw przeciągnij dźwięk do projektu i wybierz kopiowanie do miejsca docelowego, jeśli to konieczne, i zaznacz "dodaj do celu" do swojej aplikacji.

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() 
} 
Powiązane problemy