❓ これは何
VisionOS での音(AudioPlaybackController)を Slider を使って音量をコントロールする方法についてです。
🪴 環境
- sonoma 14.5(23F79)
- Apple M1
- 16GB
🛠️ やり方
今回は自然の音を再生するアプリを例に作っていきます。
NatureEntity.swift
import SwiftUI
import RealityKit
class NatureEntity: Entity {
private var fireAudioController: AudioPlaybackController?
@MainActor required init() {
super.init()
}
init(fireAudio: AudioPlaybackController?, rainAudio: AudioPlaybackController?, insectAudio: AudioPlaybackController?) {
super.init()
self.fireAudioController = fireAudio
}
func updateGlobalVolume(_ volume: Double) {
fireAudioController?.gain = volume
}
}
続いて、Sliderでの操作部分の作成です。
NatureControls.swift
import SwiftUI
struct NatureControls: View {
@Binding var globalVolume: Float
var body: some View {
VStack {
Text("Global Volume")
Slider(value: $globalVolume, in: 0...1)
.padding()
}
}
}
最後に、これらをまとめて表示する部分です。
SoundView.swift
import SwiftUI
import RealityKit
struct SoundView: View {
@State private var globalVolume: Double = -10
@State private var natureEntity: NatureEntity?
var body: some View {
ZStack {
RealityView { content in
let natureEntity = NatureEntity(fireAudio: nil) // 実際のオーディオコントローラーを渡す
content.add(natureEntity)
self.natureEntity = natureEntity
}
NatureControls(globalVolume: $globalVolume)
.onChange(of: globalVolume) { volume in
natureEntity?.updateGlobalVolume(volume)
}
.padding()
.background(Color.black.opacity(0.7))
.cornerRadius(10)
.padding()
}
}
}
これで、音量調整のできる機能が備わったと思います。
ポイントは fireAudioController?.gain = volume という部分で、
音量調整は gain で行うということです。Doubleで渡してあげたところうまくいきました。
コメントを残す