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

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

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

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

Q&A

解決済

1回答

672閲覧

Swift アラーム機能について

ives

総合スコア19

Swift

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

1グッド

0クリップ

投稿2018/08/08 07:50

UISwitchをオンにすると15分後に自動でアラームが鳴るようなアプリを作っています
ですが15分後にアラームがならずエラーになってしまうので質問させて頂きますイメージ説明
皆さんの知恵をお借りできたら幸いです

takeru777👍を押しています

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

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

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

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

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

fuzzball

2018/08/08 09:59 編集

コードやエラーメッセージは画像ではなくテキストで書いて下さい。
guest

回答1

0

ベストアンサー

まず音を鳴らす部分を独立して作ってみましょう。swift、音を鳴らすなどで検索すると出てくると思います。
以下、参考にサイトをひとつ。
AVAudioplayer 音楽の再生
(タイマーで15分待ちながら作っていないことを祈ります)

おそらくは「1.mp3」と言うファイルの音を鳴らしたいのかなと思いますが、audioPlayerには何もセットされていない状態なのでエラーが出ているのだと思われます。
参考サイトを見て音の鳴らし方でわからない部分があればコメントください。

コメントへの回答追記:
音を鳴らすために使っているメソッド、play(atTime:)はAPIリファレンスを確認すると、指定時間に音を鳴らすメソッドとなっています。その指定時間はデバイス時間を基準に設定する必要があると言うメソッドです。
play(atTime:)
今回はタイマーを使って時間の指定をしているので、音を鳴らすメソッドの方では再生させる時間を指定する必要はなく、すぐに鳴らしてやれば良いと思うので素直にplay()を使うと音が出ると思います。
ちなみにplay(atTime:)を使いたい場合には例えば
self.audioPlayer.play(atTime:audioPlayer.deviceCurrentTime + 10)
こんな風に設定してやると呼ばれた10秒後に音がなり始めます。

投稿2018/08/08 09:53

編集2018/08/09 15:53
razuma

総合スコア1313

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

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

ives

2018/08/09 14:55

'''import UIKit import AVFoundation class SecondViewController: UIViewController,AVAudioPlayerDelegate { var timer = Timer() var startTime:Double = 0.0 var audioPlayer: AVAudioPlayer! @IBOutlet weak var label: UILabel! @IBAction func `switch`(_ sender: UISwitch) { if (sender.isOn) { //switchがonならtimer起動 timer = Timer.scheduledTimer(withTimeInterval: 1 * 10, repeats: false, block: { timer in //15分後にtimerの停止を行う timer.invalidate() print("stopped") //15分後にアラーム鳴る self.audioPlayer.play(atTime:1 * 10) }) } else { //offならtimer停止 timer.invalidate() } } override func viewDidLoad() { super.viewDidLoad() if let url=Bundle.main.url(forResource:"1",withExtension:".mp3" ){ //上記の***の箇所でファイル名と拡張子を指定し変数urlに代入します。 do { audioPlayer=try AVAudioPlayer(contentsOf:url) audioPlayer?.play(atTime:1 * 10) //処理が成功したらaudioPlayerに指定したurlを代入し、playメソッドを呼び出します。 }catch{ audioPlayer=nil } }else{ fatalError("Url is nil") //URLが空の場合など処理が走らなかった場合はエラー文を表示します。 } audioPlayer.delegate = (self as AVAudioPlayerDelegate) audioPlayer.prepareToPlay() } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } }''' まずご回答ありがとうございます。ご指摘にあった通り色々やってみたのですが UISwitchをオンにした後15分後(上記のコードでは10秒後)にAll outputにstopと表示されてしまいます。 指定時間後に動くプログラムは動作してると思いますが、なんせ鳴りません。 知恵をお借りできたら幸いです。
ives

2018/08/10 01:11

本当に指定時間後に鳴りました!感動です!ありがとうございます!
razuma

2018/08/10 01:19

解決したのであればよかったです。アプリ作りがんばってください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問