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

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

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

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

Swift

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

Q&A

解決済

2回答

1286閲覧

音源ファイルがなりません

kaito_develop

総合スコア8

Xcode

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

Swift

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

0グッド

0クリップ

投稿2017/10/16 12:59

###前提・実現したいこと
「これからつくるiPhoneアプリ開発入門」という参考書を元に楽器アプリを作成しています。

###発生している問題・エラーメッセージ

(エラーメッセージは出ないのですが)楽器ボタンを押した時に音が鳴らずどうしてもデバッグエリアにcatchに入力した"エラーが発生しました"が出てしまいます。音は一切なりません。
なんども確認したので参考書どおりに入力していると思います。

###該当のソースコード

Swift

1// 2// ViewController.swift 3// MyMusic 4// 5// Created by ●● on 2017/10/14. 6// Copyright © 2017年 ●●. All rights reserved. 7// 8 9import UIKit 10import AVFoundation 11 12class ViewController: UIViewController { 13 14 override func viewDidLoad() { 15 super.viewDidLoad() 16 // Do any additional setup after loading the view, typically from a nib. 17 } 18 19 override func didReceiveMemoryWarning() { 20 super.didReceiveMemoryWarning() 21 // Dispose of any resources that can be recreated. 22 } 23 24 25 //シンバルの音源ファイルを指定 26 let cymbalPath = Bundle.main.bundleURL.appendingPathComponent( 27 "cymbal.mp3") 28 29 //シンバル用のプレイヤーインスタンスを作成 30 var cymbalPlayer = AVAudioPlayer() 31 32 @IBAction func cymbal(_ sender: Any) { 33 do{ 34 //シンバル用のプレイヤーに、音源ファイルを指定 35 cymbalPlayer = try AVAudioPlayer(contentsOf: cymbalPath, fileTypeHint:nil) 36 cymbalPlayer.play() 37 }catch{ 38 print("シンバルでエラーが発生しました!") 39 } 40 41 } 42} 43 44

###試したこと
・参考書に書いてあるコード通りに入力しているか確かめた
・一度音源ファイルを削除して再度コピペした
・クリーンを実行してみた

###補足情報(言語/FW/ツール等のバージョンなど)

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

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

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

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

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

fuzzball

2017/10/16 22:41

cymbal.mp3はプロジェクトに追加されているでしょうか?
kaito_develop

2017/10/16 23:05

はい。ナビゲーターエリアにドラッグ&ドロップしました
fuzzball

2017/10/16 23:15

ファイル名は間違ってないでしょうか?また、Target Membershipにチェックは入っているでしょうか?
kaito_develop

2017/10/17 13:25

ファイル名は数字を全角にしても試しましたが実行結果は変わりませんでした。ナビゲーターエリアからcymbalのファイルをクリックしユーティリティエリアにあったTarget Membershipにチェックを入れたのですがlet cymbalPath = Bundle.main.bundleURL.appendingPathComponent( "cymbal.mp3")の行の右にThread 1: breakpoint 1.5と表示され、実行したところ(11db)と表示され画面も表示されなくなってしまいました。
fuzzball

2017/10/18 00:23

ajaさんも書かれていますが、ブレークポイントが設定されているだけだと思いますので、左端の青い矢印みたいなのを削除して下さい。右クリックでDeleteか、左ドラッグで削除できます。
kaito_develop

2017/10/18 01:11

ブレークポイント(?)は削除できましたありがとうございます。そしてもう一度参考書通りに最初からやってみたのですがやはりcatchの中のエラーが発生しましたというメッセージが表示されました。しかしその後fuzzballさんがおっしゃったようにTarget Membershipにチェックをつけたところ音がなりました!ありがとうございます!
guest

回答2

0

自己解決

もう一度参考書の内容を正確に打ち、TargetMembershipにチェックをつけたところ音がなり解決しました。
Swiftの基本的な構文は一通り勉強したつもりだったのですがエラーメッセージや回答で指摘・修正していただいたコードがあまり理解できなかったのでこれからコツコツと勉強していこうと思います。
fuzzballさん、ajaさん、ありがとうございました。

投稿2017/10/18 01:40

kaito_develop

総合スコア8

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

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

0

参考書に書いてあるコード通りに入力しているか確かめた

本当に参考書通りなのでしょうか?

とりあえず以下の変更で音は出ます。

do tryはvideDidLoad内で先に行う

override func viewDidLoad() { super.viewDidLoad() do{ //シンバル用のプレイヤーに、音源ファイルを指定 cymbalPlayer = try AVAudioPlayer(contentsOf: cymbalPath, fileTypeHint:nil) }catch{ print("シンバルでエラーが発生しました!") } }

URLのパス指定はこうなります。

let cymbalPath = URL(fileURLWithPath: Bundle.main.path(forResource: "cymbal", ofType: "mp3")!)

ボタンタップでplay()

@IBAction func cymbal(_ sender: Any) { cymbalPlayer.play() }

以下自分自身への疑問
AVAudioPlayerDelegateはいらなくなったのか?
prepareToPlay()は必要なくなった?

https://developer.apple.com/documentation/avfoundation/avaudioplayer
の Using Audio in Multimedia Programming Guide がリンクエラーだけど
仕様変更中??

投稿2017/10/17 04:57

aja

総合スコア3733

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

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

kaito_develop

2017/10/17 13:46

回答ありがとうございます。 訂正していただいたコード通りに入力したのですがlet cymbalPath = URL(fileURLWithPath: Bundle.main.path(forResource: "cymbal", ofType: "mp3")!)の行の右にThread 1: breakpoint 1.5と表示されました。調べたところどうやらその行の左の青いところをcontrol+クリックしてdeleteしたら良いと書いてあったのでとりあえずやってみましたが消えてくれません。 そもそもThread 1: breakpoint 1.5や(11db)が何を意味しているのかも理解できていません。 お手数ですが教えていただけないでしょうか、、
aja

2017/10/17 13:55

それはあなたが間違ってブレークポイントを意図せずに設定したためにLLDB stoppingが発生しているだけです。右クリックでdeleteできるはずです。あるいはその行を削除して違うところに書き直すとか
kaito_develop

2017/10/18 01:02

deleteはできたのですがlet cymbalPath = URL(fileURLWithPath: Bundle.main.path(forResource: "cymbal", ofType: "mp3")!)の行にThread 1: EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0)というメッセージが表示されやはり実行できませんでした
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問