2016-04-04 7 views
0

Ich habe eine Klasse gemacht, die Audio-Griffe, die in meiner app gespielt wird:AVAudioPlayer spielt keinen Ton

import AVFoundation  

class GSAudio{ 
    var soundFileNameURL: NSURL = NSURL() 
    var soundFileName = "" 
    var soundPlay = AVAudioPlayer() 

    func playSound (soundFile: String){ 

     soundFileName = soundFile 
     soundFileNameURL = NSURL(fileURLWithPath: NSBundle.mainBundle().pathForResource(soundFileName, ofType: "aif", inDirectory:"Sounds")!) 
     do{ 
      try soundPlay = AVAudioPlayer(contentsOfURL: soundFileNameURL) 
     } catch { 
      print("Could not play sound file!") 
     } 

     soundPlay.prepareToPlay() 
     soundPlay.play() 
    } 
} 

Aber das Problem ist, wenn ich diesen Code aufrufen, indem Sie so etwas wie GSAudio().playSound("Start") aus einer anderen Klasse verwenden, Der Sound spielt nicht. Weiß jemand, warum das so ist? Jede Hilfe wird geschätzt.

Vielen Dank.

+0

Ist "GSAudio(). Playsound (" Start ")" den genauen Code Sie verwenden? Wenn dies der Fall ist, müssen Sie playSound wie folgt deklarieren: class fun playSound (soundFile: String) – dylanthelion

+1

Etwas stimmt hier nicht überein, da es sich bei SoundPlay um eine Instanzvariable handelt, benötigen Sie eine Instanz von GSAudio. Und diese Instanz muss bestehen bleiben, bis der Sound endet. Ich schätze, du erschaffst die Instanz und dann wird sie zerstört, bevor der Sound spielt - es ist mir oft genug passiert! Behalten Sie einen permanenten Verweis auf die Instanz, bis sie abgeschlossen ist. – emrys57

Antwort

0

Ich habe Methode AVAudioPlayer und es funktioniert gut, wenn die Schaltfläche klicken Aktion dann führen Sie diese unten Methode gut spielen, aber Sie möchten Klasse und Methode (ex 'GSAudio(). PlaySound ("Start")) von verschiedenen aufrufen Klasse, Sie erstellen die Delegate-Methode zum Aufruf, es funktioniert gut.

@IBAction func btnPlayAction(sender: AnyObject) { 

       let fileURL: NSURL = NSURL(string: previewUrl)! 
       let soundData = NSData(contentsOfURL: fileURL) 

       do { 
        playerVal = try AVAudioPlayer(data: soundData!) 
       } 
       catch { 
        print("Something bad happened. Try catching specific errors to narrow things down",error) 
       } 

       playerVal.delegate = self 
       playerVal.prepareToPlay() 

       playerVal.play() 
} 

hoffen, seine hilfreich

0

Ihre Sound-Datei überprüfen (URL) Pfad .. (drucken That) und Checkout file: // da ist oder nicht, das ist Hauptproblem bei dem Sound ULR Ok es hinzufügen Datei: //

// Oder Verwenden Sie dieses One

NSURL * SoundURL = [NSURL fileURLWithPath: YourFilePath];

versuchen diese Und mir ist ich richtig bin oder nicht