Компонент sound в A-Frame предназначен для добавления
аудиовизуальных эффектов к 3D-сценам. Он обеспечивает управление
воспроизведением звука, пространственное позиционирование и
взаимодействие с другими объектами сцены. Компонент использует Web Audio
API для обработки звука и поддерживает множество параметров, позволяющих
создавать реалистичные звуковые окружения.
Компонент подключается к элементу сцены через стандартный синтаксис A-Frame:
<a-entity sound="src: url(sonic.mp3); autoplay: true; loop: true;"></a-entity>
mp3, ogg, wav.soundvolume — уровень громкости, числовое значение от 0.0 до 1.0.
<a-entity sound="src: url(ambient.mp3); volume: 0.5;"></a-entity>
Позволяет регулировать громкость отдельных звуковых источников независимо от глобального микшера сцены.
position — пространственное расположение звука в
3D-сцене. Используется с компонентом position у
<a-entity>. Звуки становятся объемными, изменяя
громкость и панораму в зависимости от положения слушателя.
autoplay — воспроизведение сразу после загрузки
сцены. Значение true автоматически запускает звук.
loop — зацикливание аудио, что важно для фона или эффектов с постоянным повторением.
on — позволяет привязать воспроизведение к событиям сцены, например кликам или пересечению коллайдера:
<a-entity sound="src: url(click.mp3); on: click;"></a-entity>poolSize — количество одновременно воспроизводимых экземпляров звука. Позволяет избежать прерывания, если один и тот же звук запускается несколько раз подряд.
Компонент sound предоставляет доступ к объекту
Howl (через AFRAME.components.sound.pool) и
методы для управления аудио динамически:
play() — запускает звук.
const soundEntity = document.querySelector('#mySound');
soundEntity.components.sound.playSound();pause() — приостанавливает воспроизведение.
soundEntity.components.sound.pauseSound();stop() — останавливает звук и сбрасывает позицию.
soundEntity.components.sound.stopSound();setVolume(volume) — динамическая регулировка громкости.
soundEntity.components.sound.setVolume(0.8);A-Frame поддерживает 3D-звуки, которые изменяют восприятие в
зависимости от позиции камеры. Для включения пространственного аудио
используется параметр positional:
<a-entity sound="src: url(ambient.mp3); positional: true; distanceModel: linear; maxDistance: 20;"></a-entity>
linear, inverse,
exponential).Компонент sound тесно интегрируется с системой событий
A-Frame. Основные сценарии:
mouseenter /
mouseleave — воспроизведение при наведении или
уходе курсора.
<a-box sound="src: url(hover.mp3); on: mouseenter;"></a-box>click — запуск звука при клике на
объект.
collide (при использовании
dynamic-body с physics) — активация звука при столкновении
объектов.
Множественные источники звука Можно добавлять
несколько компонентов sound на один
<a-entity> через разные сущности-потомки для создания
сложного аудиомикса.
Анимация громкости и фильтров Используя A-Frame анимации, возможно плавное изменение громкости, панорамы или фильтров:
<a-entity sound="src: url(music.mp3)" animation__volume="property: components.sound.volume; to: 0; dur: 2000; startEvents: fadeOut;"></a-entity>Интеграция с raycaster Позволяет
запускать звуковые эффекты при попадании луча в объект, что удобно для
VR-интерактивности.
poolSize для часто воспроизводимых
коротких звуков, чтобы избежать прерывания.loop и отключать
positional, если звук должен быть одинаковым для всех
слушателей.sound<a-scene>
<a-entity id="ambientSound" sound="src: url(ambient.mp3); autoplay: true; loop: true; positional: false;"></a-entity>
<a-box position="0 1 -3" color="#4CC3D9"
sound="src: url(click.mp3); on: click; volume: 0.7; positional: true; maxDistance: 10;"></a-box>
<a-sphere position="2 1 -5" color="#EF2D5E"
sound="src: url(hit.wav); on: mouseenter; positional: true; refDistance: 2;"></a-sphere>
</a-scene>
В этом примере фоновые и интерактивные звуки интегрированы с
пространственным позиционированием, событиями клика и наведения,
демонстрируя возможности полного управления аудиосценой через компонент
sound.