AVAudioPlayer no reproduce audio en Swift

Tengo este código en una aplicación Swift de vista única muy simple en mi ViewController :

 var audioPlayer = AVAudioPlayer() @IBAction func playMyFile(sender: AnyObject) { let fileString = NSBundle.mainBundle().pathForResource("audioFile", ofType: "m4a") let url = NSURL(fileURLWithPath: fileString) var error : NSError? audioPlayer = AVAudioPlayer(contentsOfURL: url, error: &error) audioPlayer.delegate = self audioPlayer.prepareToPlay() if (audioPlayer.isEqual(nil)) { println("There was an error: (er)") } else { audioPlayer.play() NSLog("working") } 

He agregado import AVFoundation y audioPlayer es una variable global. Cuando ejecuto el código, imprime "trabajando", así que lo hace sin errores pero no se reproduce ningún sonido. El dispositivo no está en silencio.

Su código está tan mal que el método socrático se descompone; Probablemente sea más fácil simplemente tirarlo y mostrarte:

 var player : AVAudioPlayer! = nil // will be Optional, must supply initializer @IBAction func playMyFile(sender: AnyObject?) { let path = NSBundle.mainBundle().pathForResource("audioFile", ofType:"m4a") let fileURL = NSURL(fileURLWithPath: path) player = AVAudioPlayer(contentsOfURL: fileURL, error: nil) player.prepareToPlay() player.delegate = self player.play() } 

No me he molestado en hacer una comprobación de errores, pero la ventaja es que se bloquea si hay un problema.

Un último punto, que puede o no ser relevante: no todos los files m4a se pueden reproducir. Un file altamente comprimido, por ejemplo, puede fallar silenciosamente (juego de palabras).

Aquí hay un fragment de trabajo de mi proyecto rápido. Reemplace "audiofile" por su nombre de file.

  var audioPlayer = AVAudioPlayer() let audioPath = NSURL(fileURLWithPath: NSBundle.mainBundle().pathForResource("audiofile", ofType: "mp3")) audioPlayer = AVAudioPlayer(contentsOfURL: audioPath, error: nil) audioPlayer.delegate = self audioPlayer.prepareToPlay() audioPlayer.play() 

Puede download el código fuente de la aplicación Swift Audio Player completamente funcional desde aquí https://github.com/bpolat/Music-Player

Importante que AvPlayer sea miembro de la class y no en la function dada, de lo contrario, queda fuera del scope … 🙂

 var audioPlayer = AVAudioPlayer() var alertSound = NSURL(fileURLWithPath: NSBundle.mainBundle().pathForResource("KiepRongBuon", ofType: "mp3")!) AVAudioSession.shanetworkingInstance().setCategory(AVAudioSessionCategoryPlayback, error: nil) AVAudioSession.shanetworkingInstance().setActive(true, error: nil) var error:NSError? audioPlayer = AVAudioPlayer(contentsOfURL: alertSound, error: &error) audioPlayer.prepareToPlay() audioPlayer.play() 

Utilicé el código siguiente en mi aplicación y funciona. Espero que sea útil.

 var audioPlayer: AVAudioPlayer! if var filePath = NSBundle.mainBundle().pathForResource("audioFile", ofType:"mp3"){ var filePathUrl = NSURL.fileURLWithPath(filePath) audioPlayer = AVAudioPlayer(contentsOfURL: filePathUrl, error: nil) audioPlayer.play() }else { println("Path for audio file not found") } 
 var audio: AVAudioPlayer = AVAudioPlayer() @IBAction func playaudio(sender: AnyObject) //method for playing audio { var audioPath = NSString(string: NSBundle.mainBundle().pathForResource("bus", ofType: "mp3")!) var error: NSError? = nil //instantiate the player audio = AVAudioPlayer(contentsOfURL: NSURL(string: audioPath as String), error: &error) audio.prepareToPlay() audio.play() } override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view. } 

Y no olvide importar AVFoundation Framework.

En Swift Coding usando Try catch, estos problemas resolverán y reproducirán el audio para mí y mi código a continuación,

 var playerVal = AVAudioPlayer() @IBAction func btnPlayAction(sender: AnyObject) { let fileURL: NSURL = NSURL(string: url)! 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() } 

swift 3.0:

  import UIKit import AVFoundation class ViewController: UIViewController { var audioplayer = AVAudioPlayer() @IBAction func Play(_ sender: Any) { audioplayer.play() } @IBAction func Pause(_ sender: Any) { if audioplayer.isPlaying { audioplayer.pause() } else { } } @IBAction func Restart(_ sender: Any) { if audioplayer.isPlaying { audioplayer.currentTime = 0 audioplayer.play() } else { audioplayer.play() } } override func viewDidLoad() { super.viewDidLoad() do { audioplayer = try AVAudioPlayer(contentsOf:URL.init(fileURLWithPath:Bundle.main.path(forResource:"bahubali", ofType: "mp3")!)) audioplayer.prepareToPlay() var audioSession = AVAudioSession.shanetworkingInstance() do { try audioSession.setCategory(AVAudioSessionCategoryPlayback) } catch { } } catch { print (error) } } } 

por alguna razón (probablemente sea un error), Xcode no puede reproducir ciertos files de música en el formatting .m4a y .mp3. Recomiendo cambiarlos a files .wav para que se reproduzcan

 //top of your class var audioPlayer = AVAudioPlayer //where you want to play your sound let Sound = NSURL(fileURLWithPath: Bundle.main.path(forResource: "sound", ofType: "wav")!) do { audioPlayer = try AVAudioPlayer(contentsOf: Sound as URL) audioPlayer.prepareToPlay() } catch { print("Problem in getting File") } audioPlayer.play()