J'ai ce code dans une application Swift très simple à affichage unique dans ma 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")
}
J'ai ajouté import AVFoundation
et audioPlayer
est une variable globale. Lorsque j'exécute le code, il imprime "travail", donc il passe sans erreur mais aucun son n'est joué. L'appareil n'est pas silencieux.
Il y a tellement de problèmes avec votre code que la méthode socratique échoue; il sera probablement plus facile de le jeter et de vous montrer:
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()
}
Je n'ai pas pris la peine de vérifier les erreurs, mais vous pouvez vous planter s'il y a un problème.
Un dernier point, qui peut être pertinent ou non: tous les fichiers m4a
ne sont pas lisibles. Un fichier fortement compressé, par exemple, peut échouer en silence (jeu de mots voulu).
Voici un extrait de travail de mon projet Swift. Remplacez "audiofile" par votre nom de fichier.
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()
Vous pouvez télécharger le code source de l'application Swift Audio Player entièrement fonctionnel à partir d'ici https://github.com/bpolat/Music-Player
Il est important que AvPlayer soit membre de la classe et non dans la fonction donnée, sinon il sort de la portée ... :)
Dans Swift Coding, en utilisant Try catch, ce problème va résoudre et lire le son pour moi et mon code ci-dessous,
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)
}
}
}
J'ai utilisé le code ci-dessous dans mon application et cela fonctionne. J'espère que c'est utile.
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")
}
pour une raison quelconque (probablement un bug) Xcode ne peut pas lire certains fichiers de musique au format .m4a et .mp3, je vous recommande de les changer tous en fichiers .wav pour pouvoir les lire.
//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()
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 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.
}
Et n'oubliez pas d'importer AVFoundation Framework.