Babylon.js предоставляет мощные возможности для работы с
аудиоконтентом, позволяя создавать звукозаписи, звуковые дорожки
и их микширование в 3D-сценах. Основным инструментом для
управления аудио является класс Sound и объект
SoundTrack. Они обеспечивают гибкую работу с
позиционированным и глобальным звуком, а также позволяют управлять
громкостью, эффектами и микшированием нескольких источников.
Объект SoundTrack представляет собой коллекцию звуков,
которые могут воспроизводиться вместе и управляться централизованно. Для
создания новой дорожки используется метод сцены:
const track = scene.soundTracks[0]; // Главная дорожка по умолчанию
const customTrack = new BABYLON.SoundTrack(scene, true); // Пользовательская дорожка с возможностью микширования
track.soundCollection позволяет управлять
коллекцией звуков внутри дорожки.Звуки в Babylon.js создаются через конструктор
Sound:
const sound = new BABYLON.Sound(
"backgroundMusic",
"audio/music.mp3",
scene,
null,
{
loop: true,
autoplay: true,
volume: 0.5,
}
);
customTrack.addSound(sound);
Параметры конструктора Sound:
name — уникальное имя звука.
url — путь к аудиофайлу (mp3, wav, ogg).
scene — сцена Babylon.js, к которой привязывается звук.
readyToPlayCallback — функция обратного вызова, вызываемая после загрузки звука.
options — объект с настройками:
loop — цикличное воспроизведение.autoplay — автоматическое воспроизведение при
загрузке.volume — начальный уровень громкости.spatialSound — включение пространственного звука
(3D-позиционирование).maxDistance и rolloffFactor — параметры
затухания звука по расстоянию.Использование addSound позволяет группировать
несколько звуков на одной дорожке и управлять ими
централизованно через SoundTrack.
Объект SoundTrack предоставляет возможности для
микширования нескольких звуков, включая регулировку
громкости, панорамирование и применение эффектов. Основные методы:
setVolume(volume: number) — установка общей громкости
дорожки.switchMute() — переключение состояния звука
(вкл/выкл).attachAudioBuffer(sound: Sound) — подключение
существующего звука для синхронного воспроизведения.detachAudioBuffer(sound: Sound) — удаление звука из
микширования.Пример микширования двух дорожек:
const musicTrack = new BABYLON.SoundTrack(scene, true);
const sfxTrack = new BABYLON.SoundTrack(scene, true);
const music = new BABYLON.Sound("music", "music.mp3", scene, null, { loop: true });
const sfx = new BABYLON.Sound("sfx", "click.wav", scene);
musicTrack.addSound(music);
sfxTrack.addSound(sfx);
// Регулировка громкости дорожек
musicTrack.setVolume(0.7);
sfxTrack.setVolume(1.0);
В этом примере музыка и эффекты управляются отдельно, что позволяет создавать динамическую звуковую сцену с контролем уровня каждого типа звука.
Babylon.js поддерживает 3D-звук, который зависит от позиции камеры и объектов. Для пространственного звука:
const spatialSound = new BABYLON.Sound(
"explosion",
"sounds/explosion.wav",
scene,
null,
{
spatialSound: true,
maxDistance: 50,
rolloffFactor: 2,
refDistance: 5,
}
);
spatialSound.setPosition(new BABYLON.Vector3(10, 0, 5));
customTrack.addSound(spatialSound);
Микширование 3D-звуков на одной дорожке позволяет одновременно обрабатывать несколько пространственных источников, что обеспечивает реалистичную звуковую сцену в играх и симуляциях.
SoundTrack поддерживает применение Web Audio API
фильтров, таких как реверберация, низкочастотный фильтр и
стерео-панорамирование:
const reverb = new BABYLON.ReverbEffect(scene, { decay: 2.0 });
customTrack.soundCollection.forEach(sound => {
sound.connectToEffect(reverb);
});
Класс SoundTrack поддерживает события для управления
звуковой логикой:
onEndedObservable — вызывается после окончания
воспроизведения любого звука на дорожке.onVolumeChangedObservable — уведомляет об изменении
громкости.onSoundAddedObservable /
onSoundRemovedObservable — добавление или удаление
звука.Пример использования:
customTrack.onVolumeChangedObservable.add(() => {
console.log("Громкость дорожки изменена:", customTrack.getVolume());
});
Эти наблюдатели позволяют синхронизировать анимацию или визуальные эффекты с аудиособытиями.
Использование SoundTrack и микширования звуков в
Babylon.js применяется в:
Гибкость микширования позволяет создавать сложные звуковые сцены, где каждый элемент управляется отдельно, но интегрируется в общую аудиосреду.