AVAudioPlayer不能在Swift中播放audio

我有这个代码在一个非常简单的单视图Swift应用程序在我的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") } 

我添加了import AVFoundationaudioPlayer是一个全局variables。 当我执行代码时,它会打印“正在工作”,所以无错误地播放声音。 设备没有保持沉默。

你的代码有太多的错误,苏格拉底方法就会崩溃; 它可能是最简单的只是抛出,并告诉你:

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

我没有打算做任何错误检查,但好处是如果出现问题,你会崩溃。

最后一点,这可能是也可能不是相关的:不是每个m4a文件都可以播放。 例如,一个高度压缩的文件可以默默地失败(双关意图)。

这是我的swift项目的一个工作片段。 用你的文件名replace“audiofile”。

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

您可以从这里https://github.com/bpolat/Music-Player下载function齐全的Swift Audio Player应用程序源代码

重要的是,AvPlayer是类成员,而不是在给定的function,否则它超出了范围… 🙂

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

我在我的应用程序中使用下面的代码,它的工作原理。 希望有帮助。

 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. } 

不要忘记导入AVFoundation框架。

在使用Try catch的Swift Coding中,这个问题将解决和播放下面我和我的代码的audio,

 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.sharedInstance() do { try audioSession.setCategory(AVAudioSessionCategoryPlayback) } catch { } } catch { print (error) } } } 

由于某种原因(可能是一个bug)Xcode无法播放.m4a和.mp3格式的某些音乐文件我build议将它们全部更改为.wav文件以便播放

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