質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

解決済

1回答

1666閲覧

AVFoundation エラー

sumire06

総合スコア15

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

0クリップ

投稿2020/05/08 05:25

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

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

TsukubaDepot

2020/05/08 06:01

> optionalがなんとかと書かれているのですが、どう対処すれば良いかわかりません。 ここが一番重要ですね。具体的にはどのように書いてあるのでしょうか。 まずはしっかりと確認するといいかと思います。 さて、Bundle.main.path が nil を返すのは、指定されたファイルが存在しない時です。なので、まずは指定されたファイルがきちんと存在するかどうか確かめてみてはいかがでしょうか。
guest

回答1

0

自己解決

音楽ファイルの入れ方がよくなかったようです。addfilto-で入れることで解決できました。

投稿2020/05/08 11:39

sumire06

総合スコア15

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問