AVAudioPlayer pas la lecture audio en Swift
J'ai ce code dans un très simple, vue unique de demande rapide dans mon 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 n'a l'impression de "travailler", de sorte qu'il traverse sans erreurs, mais aucun son n'est joué. L'appareil n'est pas dans le silence.
- quel est le but de
audioPlayer.delete(self)
? - quel est le but de
audioPlayer = AVAudioPlayer()
si vous êtes juste de le remplacer plus tard? - ne jamais jamais jamais jamais jamais cochez la case "erreur" directement comme ça. Regardez pour voir si
audioPlayer
est nul. Si c'est le cas, il y a une erreur et vous pouvez vérifiererror
. - pour en faire une variable globale pour s'assurer qu'il n'est pas supprimé de la mémoire avant de jouer le fichier lors de l'exécution de la
playMyFile
méthode. J'ai enlevé et il suffit de le changer en une variable locale, mais qui n'ont pas de résoudre le problème. - ne jamais ne jamais appeler
NSURL(string:
sur un chemin de fichier. UtilisationfileURLWithPath
, c'est ce qu'il est. - La variable locale serait bien pire. Mon point est simplement que la définition de la propriété à un lecteur audio est tout simplement un gaspillage de frais généraux. C'est pourquoi vous devez néant comme un espace réservé.
Vous devez vous connecter pour publier un commentaire.
Il y a donc beaucoup de mal avec votre code de cette méthode Socratique se décompose; il sera probablement plus facile de simplement le jeter et de vous montrer:
Je n'ai pas pris la peine de faire toute vérification des erreurs, mais l'avantage est que vous allez planter si il y a un problème.
Un dernier point, qui peut ou peut ne pas être pertinente: pas tous les
m4a
fichier est lisible. Un fichier très compressé, par exemple, peut échouer en silence (pun intended).ViewController
définition de classe pour inclureAVAudioPlayerDelegate
, comme suit:class ViewController: UIViewController, AVAudioPlayerDelegate {
self
- évidemment.Ici est un extrait de mon projet swift. Remplacer "audiofile" par le nom de votre fichier.
Vous pouvez télécharger entièrement fonctionnel Swift Audio application de Lecteur de code source à partir d'ici https://github.com/bpolat/Music-Player
Important que AvPlayer est membre de la classe et non dans la fonction donnée, sinon elle est hors de portée... 🙂
pour une raison quelconque (probablement un bug) Xcode ne peut pas lire certains fichiers de musique dans le .m4a et la .format mp3 je recommande de les changer tous .les fichiers wav à obtenir pour jouer
JS:
J'ai utilisé le code ci-dessous dans mon application, et cela fonctionne. L'espoir qui est utile.
Basé sur @matt réponse, mais peu détaillée et de provoquer réponse originale à cette question n'a pas entièrement satisfait de moi.
À Swift de Codage à l'aide de Try catch, ce que les questions de la résoudre et de lire des fichiers audio pour moi et mon code ci-dessous,
swift 3.0: