【Swift】BGMを止めずに効果音を鳴らす

アプリ作成中、効果音を鳴らしたかったのですが、バックグラウンドで鳴らしている音楽とかが止まってしまう事態が発生したので、バックミュージックなどを止めずに効果音を鳴らす方法をまとめました。
素人が書くコードですので、かっこ悪いコードかも知れませんが許してください。

本記事の内容

実行環境

Swift5.4
Xcode12.5.1

やり方

やり方は、効果音を流すコードの直前にこの文を追加するだけです。
僕もなぜこのコードか意味がわからず騙されたと思って追加してみると、うまく効果音がなったのでびっくりしました。
今でもこのコードだけで?って感じで信じられません。

//バックミュージック流しながらでも効果音を流すコード
do {
     let audioSession = AVAudioSession.sharedInstance()
     try audioSession.setCategory(AVAudioSession.Category.ambient)
     try audioSession.setActive(true)
} catch let error {
     print(error)
}

実際は下のように音を流すクラスを作ったのですが、
その下の方にこのコードを追加しました。

import Foundation
import AVFoundation

class SoundPlay{
    
    var audioPlayerInstance : AVAudioPlayer! = nil
    
    func play(fileName:String, extentionName:String){
        //パスを生成
        guard let soundFilePath = Bundle.main.path(forResource:fileName, ofType: extentionName) else {
            print("サウンドファイルが見つかりません。")
            return
        }
        let sound:URL = URL(fileURLWithPath: soundFilePath)
 
        // AVAudioPlayerのインスタンスを作成,ファイルの読み込み
        do {
            audioPlayerInstance = try AVAudioPlayer(contentsOf: sound, fileTypeHint:nil)
        } catch {
            print("AVAudioPlayerインスタンス作成でエラー")
        }
        
        //バックミュージック流しながらでも効果音を流すコード
        do {
            let audioSession = AVAudioSession.sharedInstance()
            try audioSession.setCategory(AVAudioSession.Category.ambient)
            try audioSession.setActive(true)
        } catch let error {
                    print(error)
        }
        
        audioPlayerInstance.prepareToPlay()  // 再生準備
        audioPlayerInstance.currentTime = 0  // 再生箇所を頭に移す
        audioPlayerInstance.play()
    }
}

ということで本記事は、
SwiftでBGMと共に流す効果音をメモしました。
わからないことは本記事最後のコメント欄に記載してくださいね。
最後まで読んでいただき、ありがとうございました\(^o^)/

おすすめ書籍

高評価レビュー多数の有名書籍です!
Swiftの参考に、持っていて間違いない一冊ですよ\(^o^)/

超オススメのPC用品

PCを操作する上で、トラックボールマウスが非常におすすめです!
僕も感動したこのマウスを、騙されたと思って使ってみてください!(^^)

外部モニターで2倍以上の効率化が見込めます!
安いものだと、たったの1万円前後なのでおすすめですよー!\(^o^)/



コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です