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

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

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

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

Swift

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

Q&A

解決済

1回答

794閲覧

AVFoundationで〇〇秒に1回音を鳴らす処理を行いたい

hodoru3sei

総合スコア284

Xcode

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

Swift

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

0グッド

1クリップ

投稿2019/02/11 09:05

困っていること

Swiftでメトロノームアプリを作成しているのですが、音をどのようなタイミングで鳴らしたら良いのかわからず困っています。
現状スタートボタンを押すと1度だけ音が再生されてそれ以降再生されない状況です。ImageViewのアニメーションが変わったタイミングで一緒に音を鳴らしたいのですが、どのようにすれば良いのかわかりません。

現状

現状としては、スタートボタンが押された際に、画像を切り替えるようにしてアニメーションをさせています。この、振り子の針と同じタイミングで音を鳴らしたいと考えているのですが、どうハンドリングすれば良いのかわからず、音を正しくならせていない状況です。

Swift

1//振り子の画像 2let pendulumImg:[UIImage] = [ 3 UIImage(named: "img1")!, 4 UIImage(named: "img2")!] 5//メトロノームの振り子の画像を変更している処理 6pendulumImage.animationImages = pendulumImg 7 pendulumImage.animationDuration = TimeInterval(speed) 8 pendulumImage.animationRepeatCount = 0 9pendulumImage.stopAnimating()

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

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

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

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

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

guest

回答1

0

ベストアンサー

お疲れ様です。

数年前に作ったアプリなんですが:
https://itunes.apple.com/tz/app/russian-new-year/id1067621325?mt=8

hodoru3seiさんが実現したい機能と似ているのではないかと考えています。
そのアプリではTimer.scheduledTimerを利用しました。

タイマーによりupdate_screenの関数を1秒ごとに一回実行し、アニメーションと音もupdate_screenの中で実行されました。1秒単位だと、一番簡単で適切だと思われます。0.1秒か0.1秒以下の単位だと、別の方法を考えた方がいいです。

よろしくお願いします。

サンプルコード:

swift

1// 2// SomeController.swift 3// Some App 4// 5// Created by Lvov Yury on 12/7/15. 6// 7 8import UIKit 9 10class SecondScreenController: UIViewController { 11 12 var mytimer: Timer? 13 var tictac = "clock"; 14 15 override func viewDidLoad() { 16 super.viewDidLoad() 17 18 // Do any additional setup after loading the view, typically from a nib. 19 self.mytimer = Timer.scheduledTimer(timeInterval: 1, target:self, selector: #selector(SecondScreenController.update_screen), userInfo: nil, repeats: true); 20 self.update_screen(); 21 } 22 23 override func viewWillAppear(_ animated: Bool) { 24 super.viewWillAppear(animated) 25 } 26 27 func update_screen() { 28 29 self.play_animation(); 30 self.playSound( self.tictac ) 31 } 32 33 func playSound( _ melody: String ) { 34 // NSLog(melody) 35 let audioFilePath = Bundle.main.path(forResource: melody, ofType: "mp3") 36 37 if audioFilePath != nil { 38 39 let audioFileUrl = URL(fileURLWithPath: audioFilePath!) 40 do { 41 self.audioPlayer = try AVAudioPlayer(contentsOf: audioFileUrl, fileTypeHint: nil) 42 } catch _ { 43 return // if it doesn't exist, don't play it 44 } 45 46 self.audioPlayer.numberOfLoops = 0; 47 self.audioPlayer.play() 48 } else { 49 // println("audio file is not found") 50 } 51 } 52 53 func play_animation() { 54 // Some animation 55 } 56}

投稿2019/02/12 06:25

vanderlvov

総合スコア685

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問