0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

TOEIC285学生のためのSwift Lv3 【音楽や効果音を好きな回数ほど再生する】

Last updated at Posted at 2019-11-08

久しぶりの投稿となります。

MVCとかMVVMとかアーキテクチャはあいも変わらず理解には至っていませんが、少しずつ再利用性のあるプログラムが組めるようになれればなぁと日々邁進しております。

今回は、音楽や効果音(mp3ファイル)を好きな回数ほど重複させて再生させる方法について尾行6...備考録がてらまとめます。

以前まで、ViewController.swiftに全ての処理を突っ込むゴミのようなフラットなコードを書いていましたが、保守性のへったくれもあったもんじゃないので今回は初めて別々のクラスに処理を分けて音楽を再生してみました。

今回、K N@ninoko1995氏の記事 を参考にさせていただきました。この場を借りて御礼申し上げます。

ViewController.swift
import UIKit
import AVFoundation

class ViewController: UIViewController,AVAudioPlayerDelegate{
    // BGMと効果音を判別しやすいようにmusiとsoundで分けています。
    var music1 =  MusicController()
    var sound1 =  MusicController()
    var sound2 =  MusicController()
 
    override func viewDidLoad() {
        super.viewDidLoad()
        /* 音楽を再生したい箇所に下記を読み込ませたら再生されます。 */
     /* music1.musicPlay(mode: 再生回数,fileName: "音楽ファイル名") */
        music1.musicPlay(mode: -1,fileName: "Tutorial")
        sound1.musicPlay(mode: 5,fileName: "button")
        sound2.musicPlay(mode: 15,fileName: "button2")
        /* 音楽を止めたいときは止めたいときに下記を読み込ませたら止まります。
        music1.musicPlay(mode: -1,fileName: "STOP")
        sound1.musicPlay(mode: 5,fileName: "STOP")
        sound2.musicPlay(mode: 15,fileName: "STOP")  
        */
    }
MusicController.swift
import AVFoundation

class MusicController{
    
    var musicPlayer: AVAudioPlayer!
    
    var mode : Int = 0
    var fileName : String = ""
    
    // 指定のMUSICを指定の回数再生させるメソッド //
    func musicPlay(mode: Int,fileName: String){
        if fileName == "STOP"{
            musicPlayer.stop()
            return
        }
        do {
            let filePath = Bundle.main.path(forResource: fileName,ofType: "mp3")
            let musicPath = URL(fileURLWithPath: filePath!)
            musicPlayer = try AVAudioPlayer(contentsOf: musicPath)
        } catch {
            print("error")
        }
        musicPlayer.numberOfLoops = mode
        musicPlayer.play()
    }
}

現職のエンジニアの方の大多数が理解しているので余計かもしれませんが、学生や趣味でやってる方向けに。ViewController.swiftの方で再生回数を指定できますが、−1にすることで永久的に再生されます。

お読みいただきましてありがとうございました。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?