Примитив <a-sound> предназначен
для воспроизведения звуков в 3D-сценах A-Frame и обеспечивает
пространственное звучание, синхронизацию с объектами сцены и гибкое
управление звуковыми эффектами. Он полностью интегрирован с системой
компонентов A-Frame и позволяет легко создавать как фоновую музыку, так
и звуки с привязкой к объектам.
<a-sound>src — источник звука, может быть
URL или ссылка на <audio> элемент через
#id. Обязательный атрибут для воспроизведения.
<a-sound src="url(sound.mp3)"></a-sound>autoplay — запускает
воспроизведение сразу после загрузки сцены. Значение: true
или false.
loop — повторное воспроизведение
звука по завершении. Полезно для фоновой музыки.
volume — громкость звука. Диапазон:
от 0.0 (тишина) до 1.0 (максимальная
громкость). Можно изменять динамически через JavaScript.
positional — включает
пространственное звучание. Если установлено true, звук
изменяет громкость и панораму в зависимости от позиции слушателя и
источника.
distanceModel,
maxDistance,
refDistance,
rolloffFactor — параметры 3D-звучания,
определяющие, как звук затухает с расстоянием. Используются совместно с
positional.
Активируя positional,
<a-sound> автоматически подключается к Web Audio API
и учитывает расположение камеры (<a-camera>) в сцене.
Для имитации реального аудиоэффекта важно правильно настраивать
параметры:
refDistance — расстояние, на котором
звук слышен максимально чисто.maxDistance — предел расстояния, после
которого звук становится полностью тихим.rolloffFactor — коэффициент затухания.
Увеличение значения ускоряет снижение громкости с расстоянием.Пример пространственного звука с индивидуальными настройками:
<a-entity position="0 1.6 -5">
<a-sound src="url(bird.mp3)" autoplay="true" loop="true"
positional="true" refDistance="2" maxDistance="20" rolloffFactor="1.5">
</a-sound>
</a-entity>
В этом примере звук птицы будет «слышен» сильнее при приближении к источнику и слабеть на большом расстоянии, создавая ощущение присутствия в сцене.
Компонент <a-sound> имеет методы, доступные через
el.components.sound:
playSound() — запускает
воспроизведение.pauseSound() — приостанавливает
воспроизведение.stopSound() — останавливает и
сбрасывает воспроизведение.updateVolume(volume) — динамическое
изменение громкости.Пример управления звуком:
const soundEl = document.querySelector('#backgroundMusic');
soundEl.components.sound.playSound();
setTimeout(() => {
soundEl.components.sound.updateVolume(0.2);
}, 5000);
document.querySelector('#muteButton').addEventListener('click', () => {
soundEl.components.sound.pauseSound();
});
<a-sound> может генерировать события, на которые
можно подписываться через Jav * aScript:
sound-loaded — звук полностью загружен
и готов к воспроизведению.sound-ended — воспроизведение
завершено.Использование событий позволяет синхронизировать визуальные эффекты с аудио или запускать новые звуки после окончания предыдущих.
soundEl.addEventListener('sound-ended', () => {
console.log('Звук завершился');
});
<a-entity>Часто <a-sound> добавляют внутрь
<a-entity>, чтобы звук «следовал» за объектом при
движении:
<a-entity position="2 1 -3" rotation="0 45 0">
<a-box color="#4CC3D9" depth="1" height="1" width="1"></a-box>
<a-sound src="url(chime.mp3)" autoplay="true" positional="true"></a-sound>
</a-entity>
Движение сущности автоматически переносит источник звука, сохраняя пространственный эффект.
positional="false" —
это экономит ресурсы, так как Web Audio не рассчитывает пространственные
параметры.<audio>
элементы с preload="auto", особенно при большом количестве
аудиофайлов.A-Frame и Web Audio API поддерживают распространённые аудиоформаты: MP3, WAV, OGG. Для кроссбраузерной совместимости рекомендуется предоставлять несколько вариантов одного звука.
<a-sound>Несколько звуков можно запускать одновременно, привязывая их к разным объектам. Для управления одновременно используется Jav * aScript:
const sounds = document.querySelectorAll('a-sound');
sounds.forEach(s => s.components.sound.playSound());
Это позволяет создавать комплексные аудиопейзажи: фоновые звуки, шаги персонажей, звуковые эффекты при взаимодействии с объектами.
<a-sound> легко интегрируется с событиями A-Frame,
например mouseenter, click или кастомными
событиями:
<a-box position="0 1 -3" color="#EF2D5E"
sound__hover="src: url(hover.mp3); on: mouseenter"></a-box>
Такой подход позволяет создавать интерактивные аудиосцены без дополнительного JavaScript-кода.
Использование примитива <a-sound> в A-Frame
обеспечивает реалистичное аудио, синхронизированное с визуальными
объектами сцены, и позволяет гибко управлять воспроизведением,
пространственным звучанием и интеграцией с событиями.