Swift Ui で音楽再生をするには?

やろうとしたこと

アラームの機能やBGMを設定で変更できる動作を実装したい!

解決方法

Bundle .main.urlを使う。

以下のような感じでOK

@State private var alarmSoundName: String = "bell"    
var endAlarm: URL {
    return Bundle.main.url(forResource: alarmSoundName, withExtension: "mp3")!
}
func playAlarm() {
    do {
        alarmPlayer = try AVAudioPlayer(contentsOf: endAlarm)
        alarmPlayer?.play()
    } catch {
        print("Sound playback failed.")
    }
}

この方法だとAssets.xcassetsの中にあるものは呼び出せないのが注意

ワイはSounds みたいな名前のフォルダを作ってそこにまとめて格納したよ。

試したこと

最初は画像の取り出しと同じようにAssets.xcassetsにmp3を保存して NSDataAsset で呼び出そうとしていた。

以下コードのように実装しようとしたところアウト⚠️

@State private var alarmSound: String = "bell"
let endAlarm = NSDataAsset(name: alarmSound)!.data

Swiftのコードでは、NSDataAssetを動的に生成する際に変数(Variable)を使うことはできないらしい。

NSDataAssetの初期化はコンパイル時に行われる必要があるため、変数を使用して動的に生成することはできない。

そこでBundle.main.urlを使った呼び出しではStateを使えたのでうまくいった。

コイアイちゃん Avatar

この記事を書いたのは


Comments

Leave a Reply

Your email address will not be published. Required fields are marked *

CAPTCHA