アラームの機能や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を使えたのでうまくいった。
coiai
この記事もおすすめ
株式会社coiaiは、「想像できることを美しく実現」を掲げ、XR・Web・アプリ・システム開発およびDX支援を行う会社です。 創業2022年、東京都練馬区に本社を置き、要件のヒアリングからPoC(概念実証)、本番運用まで一貫して伴走します。 まずはお気軽にご相談ください。
主なご相談内容
詳しい会社情報は会社概要ページでご覧いただけます。