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

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

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

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

Q&A

解決済

1回答

1710閲覧

タイマーのカウント終了時(ダイアログ表示時)にサウンドを出したい

KCROW

総合スコア7

Swift

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

0グッド

0クリップ

投稿2020/08/06 23:05

編集2020/08/07 13:01
コード ```現在タイマーアプリを作成中です。(TabBarの中の一つ) カウント終了の際、下記のようなダイアログを表示してサウンドを出したいです。 ![イメージ説明](9c925a72dd146c7e2e03aac3c97b03e0.png) 現状、ダイアログしかでない状態です。 ```swift import UIKit import AVFoundation class SecondViewController: UIViewController, AVAudioPlayerDelegate { var audioPlayer:AVAudioPlayer? //タイマーの変数を作成 var timer :Timer? //カウントの変数を作成 var count = 0 //設定を扱うキーを作成 let settingKey = "timer _value" override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view. let settings = UserDefaults .standard settings.register(defaults: [settingKey:10]) } @IBOutlet weak var countDownLabel: UILabel! @IBAction func settingButtomAction(_ sender: Any) { if let nowTimer = timer { if nowTimer.isValid == true { nowTimer.invalidate() } } //画面推移 performSegue(withIdentifier: "goSetting", sender: nil) } @IBAction func startButtomAction(_ sender: Any) { if let nowTimer = timer { if nowTimer.isValid == true { return } } //タイマースタート timer = Timer.scheduledTimer(timeInterval: 1.0, target: self,selector: #selector(self.timerInterrupt(_:)), userInfo: nil, repeats: true) } @IBAction func stopButtomAction(_ sender: Any) { if let nowTimer = timer { if nowTimer.isValid == true{ nowTimer.invalidate() } } } func displayUpdate() -> Int { let settings = UserDefaults.standard let timerValue = settings.integer(forKey:settingKey) let remainCount = timerValue - count countDownLabel.text = " (remainCount)秒" return remainCount } //経過時間の処理 @objc func timerInterrupt(_ timer:Timer){ count += 1 //残り時間がゼロ以下の時、タイマーを止める if displayUpdate() <= 0 { //初期化処理 count = 0 //タイマー停止 timer.invalidate() //ダイアログ作成 let alertController = UIAlertController(title: "終了", message: "タイマー終了!さあ、頑張ろう!", preferredStyle: .alert) let defaultAction = UIAlertAction(title: "OK", style: .default, handler: nil) alertController.addAction(defaultAction) present(alertController,animated: true,completion: nil) func playsound(){ //この関数を音を鳴らしたい場所で呼び出して使う _ = Bundle.main.bundleURL.appendingPathComponent("sample.mp3") if Bundle.main.path(forResource: "sample", ofType: "mp3") != nil { if let sound = audioPlayer { sound.prepareToPlay() sound.play() } } } } } override func viewDidAppear(_ animated: Bool) { count = 0 _ = displayUpdate() } }

<試したこと>
AVAudioPlayerで、MP3を読み込む。
こちらの記事を参照しました。http://gokexn.blog.fc2.com/blog-entry-114.html

記事をググっても、ボタンを押すと音がなる関連のものしか出てこない状況で
詰まってしまいました。

初歩的な質問になってしまうかと思いますが
お詳しい方の回答をお待ちしております。

よろしくお願いします。

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

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

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

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

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

TsukubaDepot

2020/08/06 23:21

コードはタグで囲っていただけますでしょうか(一番最初のご質問ではタグが使われているのでご存知かと思います)。 また、過去のご質問で解決済みのものは解決済みにしていただけますでしょうか。
KCROW

2020/08/07 13:04

申し訳ございません。タグで囲い、解決済みに致しました。
guest

回答1

0

ベストアンサー

関数の定義と呼び出しを混同されているように感じました。

関数定義はトップレベルで行い、呼び出しを音を鳴らしたい段階で行えば大丈夫かと思います。

Swift

1 //経過時間の処理 2 @objc func timerInterrupt(_ timer:Timer){ 3 count += 1 4 //残り時間がゼロ以下の時、タイマーを止める 5 if displayUpdate() <= 0 { 6 //初期化処理 7 count = 0 8 //タイマー停止 9 timer.invalidate() 10 11 //ダイアログ作成 12 let alertController = UIAlertController(title: "終了", message: "タイマー終了!さあ、頑張ろう!", preferredStyle: .alert) 13 let defaultAction = UIAlertAction(title: "OK", style: .default, handler: nil) 14 15 alertController.addAction(defaultAction) 16 17 // ここで音を鳴らす 18 playsound() 19 20 present(alertController,animated: true,completion: nil) 21 22 // 関数定義は別の場所で行う 23 } 24 } 25 26 func playsound(){ 27 //この関数を音を鳴らしたい場所で呼び出して使う 28 _ = Bundle.main.bundleURL.appendingPathComponent("sample.mp3") 29 if Bundle.main.path(forResource: "sample", ofType: "mp3") != nil { 30 31 if let sound = audioPlayer { 32 sound.prepareToPlay() 33 sound.play() 34 } 35 } 36 }

投稿2020/08/06 23:19

TsukubaDepot

総合スコア5086

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

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

KCROW

2020/08/07 13:12

なるほど、まさしく関数の定義と呼び出しを混同していました。。。 関数の基礎から見直します。 ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問