feat: add opt-in procedural drive audio

This commit is contained in:
2026-09-02 05:22:13 +03:00
parent 190ac1ce62
commit 130ff2d8bb
9 changed files with 1155 additions and 3 deletions

View File

@@ -12,6 +12,7 @@ import SceneCanvas from './SceneCanvas.vue';
import SiteNavigation from './SiteNavigation.vue';
import ToolkitGrid from './ToolkitGrid.vue';
import { useAdaptiveQuality } from '@/composables/useAdaptiveQuality';
import { useAudioEngine } from '@/composables/useAudioEngine';
import { useJourneySections } from '@/composables/useJourneySections';
import { useKeyboardNavigation } from '@/composables/useKeyboardNavigation';
import { useMotionPreferences } from '@/composables/useMotionPreferences';
@@ -43,6 +44,11 @@ const journey = useJourneySections(
navigation.state,
computed(() => motion.policy.value.allowSceneRequest),
);
const audio = useAudioEngine({
intensity: computed(() => journey.value.acceleration),
volume: motion.volume,
setVolume: motion.setVolume,
});
const sceneState = shallowRef<SceneHostState>('idle');
const pageLifecycle = shallowRef<'active' | 'frozen' | 'disposed'>('active');
const controlsReady = shallowRef(false);
@@ -175,9 +181,16 @@ onUnmounted(() => removePageListeners());
:policy="displayedPolicy"
:maximum-quality="controlsReady ? motion.maximumQuality.value : 'high'"
:scene-status="displayedSceneState"
:audio-state="audio.state.value"
:audio-muted="audio.muted.value"
:audio-volume="controlsReady ? motion.volume.value : 0.4"
@pause="motion.setPaused(true)"
@resume="motion.setPaused(false)"
@enable="enableMotion"
@quality-change="setQuality"
@audio-start="audio.startFromGesture"
@audio-resume="audio.resumeFromGesture"
@audio-mute-toggle="audio.toggleMuted"
@audio-volume-change="audio.setVolume"
/>
</template>