AVFoundationで簡単な音楽再生アプリを作っています。
しかし、ビルドすると、前の画面からの遷移の最中にクラッシュして止まってしまいます。
エラーの原因としてviewdidloadの最初の、
// 再生する audio ファイルのパスを取得
let audioPath = Bundle.main.path(forResource: "366", ofType:"m4a")!
let audioUrl = URL(fileURLWithPath: audioPath)
上記の部分が指定されます。optionalがなんとかと書かれているのですが、どう対処すれば良いかわかりません。
教えていただきたいです。よろしくお願いいたします。
swift
1 2import UIKit 3import AVFoundation 4 5class Prie1ViewController: UIViewController, AVAudioPlayerDelegate { 6 var audioPlayer:AVAudioPlayer! 7 @IBOutlet weak var slider: UISlider! 8 @IBOutlet weak var play: UIButton! 9 10 11 override func viewDidLoad() { 12 super.viewDidLoad() 13 // 再生する audio ファイルのパスを取得 14 let audioPath = Bundle.main.path(forResource: "366", ofType:"m4a")! 15 let audioUrl = URL(fileURLWithPath: audioPath) 16 17 18 // auido を再生するプレイヤーを作成する 19 var audioError:NSError? 20 do { 21 audioPlayer = try AVAudioPlayer(contentsOf: audioUrl) 22 slider.maximumValue = Float(audioPlayer.duration) 23 } catch let error as NSError { 24 audioError = error 25 audioPlayer = nil 26 } 27 28 // エラーが起きたとき 29 if let error = audioError { 30 print("Error (error.localizedDescription)") 31 } 32 33 audioPlayer.delegate = self 34 audioPlayer.prepareToPlay() 35 } 36 37 38 39 @IBAction func slider(_ sender: Any) { 40 audioPlayer.currentTime = TimeInterval(slider.value) 41 } 42 43 44 @IBAction func play(_ sender: Any) { 45 if ( audioPlayer.isPlaying ){ 46 audioPlayer.stop() 47 play.setTitle("Stop", for: UIControl.State()) 48 } 49 else{ 50 audioPlayer.play() 51 play.setTitle("Play", for: UIControl.State()) 52 } 53 54 55 56 } 57 @IBAction func first(_ sender: Any) { 58 audioPlayer.pause() 59 // 再生する audio ファイルのパスを取得 60 let audioPath = Bundle.main.path(forResource: "366", ofType:"m4a")! 61 let audioUrl = URL(fileURLWithPath: audioPath) 62 63 64 // auido を再生するプレイヤーを作成する 65 var audioError:NSError? 66 do { 67 audioPlayer = try AVAudioPlayer(contentsOf: audioUrl) 68 } catch let error as NSError { 69 audioError = error 70 audioPlayer = nil 71 } 72 73 // エラーが起きたとき 74 if let error = audioError { 75 print("Error (error.localizedDescription)") 76 } 77 play.setTitle("Play", for: UIControl.State()) 78 79 } 80 81} 82 83 84 85
> optionalがなんとかと書かれているのですが、どう対処すれば良いかわかりません。
ここが一番重要ですね。具体的にはどのように書いてあるのでしょうか。
まずはしっかりと確認するといいかと思います。
さて、Bundle.main.path が nil を返すのは、指定されたファイルが存在しない時です。なので、まずは指定されたファイルがきちんと存在するかどうか確かめてみてはいかがでしょうか。
回答1件
あなたの回答
tips
プレビュー