【Xcode/Swift】音声ファイルの再生

Storyboard

今回は同じ機能を持ったボタンしかないのでAction処理をタグで管理する。


音声ファイルの追加

Assets.xcassets内に音声ファイルを4つ入れる、音声ファイルがない場合はOtoLogicからテキトーに持ってくる

それもめんどくさい場合は下に添付した音声ファイルをそのまま入れ込めばOK


コード記述

Outlet接続やAction接続のやり方が分からない場合はこちらを参考に

【Xcode/Swift】同じパーツなら一つのコードで管理すればいいじゃないか (Outlet Collection)
import UIKit
import AVFoundation

class GitTestViewController: UIViewController {

    @IBOutlet var playSoundButton: [UIButton]!

    private var player: AVAudioPlayer?

    override func viewDidLoad() {
        super.viewDidLoad()
        //ボタンを角丸にする
        playSoundButton.forEach({ $0.layer.cornerRadius = 20.0 })
    }

    //押されたボタンのタグ番号で判断する
    @IBAction func playSoundAction(_ sender: UIButton) {
        switch sender.tag {
        case 1:
            playSoundFile(fileName: "warning")
            print("警告音")
        case 2:
            playSoundFile(fileName: "policecar")
            print("パトカー")
        case 3:
            playSoundFile(fileName: "cow")
            print("ウシ")
        case 4:
            playSoundFile(fileName: "station")
            print("改札")
        default:
            break
        }
    }

    //【fileName】が変わるだけなので関数で切り分ける
    private func playSoundFile(fileName: String) {
        if let soundData = NSDataAsset(name: fileName) {
            do {
                player = try AVAudioPlayer(data: soundData.data)
                player?.play()
            } catch {
                print("再生実行エラー")
            }
        }
    }

}