Sonorous.js — это аудиобиблиотека JavaScript, которая упрощает работу с веб-аудио, обеспечивая простую интеграцию звука в веб-приложения и игры. В качестве абстракции API WebAudio Sonorous.js предлагает детальный контроль для тех, кто в этом нуждается, а также решает любые проблемы с кроссбраузерностью за вас.
командой из
Бумбокс
Трековый микшер
Мастер струн
Исходный код см. в каталоге examples/
репозитория.
Для начала запустите npm install --save sonorous
.
Чтобы использовать Sonorous.js, запросите его или импортируйте в свой файл.
ES6
import Sonorous from 'sonorous';
CommonJS
const Sonorous = require('sonorous');
Sonorous — это менеджер, который занимается добавлением и удалением соноров. Сонор можно рассматривать как оболочку одного аудиофайла. Каждый сонор имеет свои собственные функции, такие как play()
, pause()
, volume
и т. д. Вы также можете установить глобальные свойства ( masterVolume
, muteAll
и т. д.) для всех соноров через экземпляр Sonorous.
Пример:
let mySonor = Sonorous.addSonor('./test_audio/test_sound_1.mp3');
mySonor.play(); // begins to play test_sound_1.mp3
mySonor.volume = 0.5; // sets the volume of the sonor to 0.5
Sonorous.muteAll = true; // mutes all sonors
mySonor.stop(); // stops the playback of test_sound_1.mp3
Более подробную информацию можно найти в разделе API.
Sonorous является одноэлементным и управляет всеми объектами Sonor.
Sonor[]
(только чтение)Массив всех объектов Sonor, добавленных в этот менеджер.
AudioContext
(только чтение)Возвращает текущий аудиоконтекст, используемый Sonorous.
number
Это свойство доступно для чтения/записи и подключено к узлу masterGain, который будет устанавливать громкость для всех объектов Sonor. Допустимые значения: от 0 до 1.
boolean
Это свойство чтения/записи, которое отключит/включит звук всех объектов Sonor.
boolean
возвращает true, если WebAudio поддерживается, и false, если нет.
Sonor
создает объект Sonor и возвращает его в случае успеха.
Парам | Тип | Описание |
---|---|---|
источник | string , string[] , SonorSrc , SonorSrc[] | Средства массовой информации, с которыми связан этот звук. Если вы передадите массив различных форматов, будет использован первый, который работает с текущим браузером. Если ваш исходный URL-адрес не имеет расширения, вы можете указать его вручную, используя объект SonorSrc, определенный ниже. |
параметры | object | Необязательный объект конфигурации. См. варианты ниже. |
Параметры конфигурации для addSonor()
:
Вариант | Тип | По умолчанию | Описание |
---|---|---|---|
идентификатор | string | случайно сгенерированный | Уникальный идентификатор. Он будет создан для этого объекта, если вы его не передадите. |
предварительная загрузка | boolean | true | Если это правда, попытается загрузить URL-адрес автоматически. Если false, вызывающий код должен явно вызвать load() . |
объем | number | 1.0 | Начальная громкость звука. |
петля | boolean | false | Определите, должен ли звук зацикливаться вечно. |
автовоспроизведение | boolean | false | Определите, должен ли звук воспроизводиться сразу при загрузке. |
приглушенный | boolean | false | Отключить звук после загрузки. |
размер бассейна | number | 1 | Общее количество аудиосегментов, доступных для воспроизведения. Увеличение этого числа позволяет начать одновременное воспроизведение одного и того же звука несколько раз до завершения первоначального воспроизведения. |
оптимизироватьДля | string | 'time' | Это может быть либо 'time' , либо 'memory' . Это определяет, будет ли декодированный буфер кэшироваться или нет. По умолчанию так и будет. Если вас беспокоит память, установите для этого параметра значение «память» и ожидайте небольшую задержку, пока мы декодируем буфер, прежде чем воспроизведение сможет начаться. |
Свойство | Тип | Описание |
---|---|---|
URL | string | URL-адрес источника аудио без расширения. |
формат | string | Указанный вручную формат для этого источника звука. |
Пример:
let mySonor = Sonorous.addSonor('./test_audio/test_sound_1.mp3', {
id: 'myFirstSonor',
preload: false,
volume: 0.5,
poolSize: 3 });
let testSoundSonor = Sonorous.addSonor(
{
url: './test_audio/test_sound_2',
format: 'mp3'
},
{ id: 'test_sound_2'});
удаляет объект Sonor из менеджера. Это разгрузит и уничтожит звук, а также немедленно остановит все процессы, связанные с этим звуком.
удаляет все существующие объекты сонора и сбрасывает аудиоконтекст.
уничтожает все объекты Сонора
Sonor
вернуть объект Sonor
Пример:
Sonorous.addSonor('./test_audio/test_sound_1.mp3', { id: 'mySonorId'});
let mySonor = Sonorous.get('mySonorId');
boolean
вернуть true, если у Sonorous есть Sonor, соответствующий переданному идентификатору
сработает, когда звук разблокируется (посредством взаимодействия пользователя со страницей). Некоторые браузеры не позволяют воспроизводить аудио до того, как пользователь каким-либо образом взаимодействовал со страницей. Это событие сработает, как только аудио станет бесплатным для воспроизведения.
Этот модуль содержит большую часть функционала по управлению звуком, включая регулировку громкости, воспроизведение, паузу и т. д. Если AudioContext не был разблокирован (с помощью жеста пользователя и т. д.), все действия будут поставлены в очередь. Эти действия будут выполнены немедленно, как только AudioContext будет разблокирован и буфер будет загружен.
string
(только чтение) Свойство, доступное только для чтения, которое возвращает уникальный идентификатор этого звукового объекта. Идентификатор необязательно предоставляется во время инициализации (дополнительную информацию см. в функции addSonor() компании Sonorous). Если во время инициализации идентификатор не указан, в качестве идентификатора будет назначена случайно сгенерированная буквенно-цифровая строка. Sonorous может получать объекты Sonor по идентификатору, используя функцию Sonorous.get(id)
.
string
(только чтение)Возвращает URL-адрес исходного аудио этого объекта.
boolean
(только чтение)Возвращает true, если сонор был настроен на предварительную загрузку во время инициализации.
string
(только чтение) Отражает загруженное состояние сонора. Может быть 'loading'
, 'loaded'
или 'unloaded'
.
Пример:
let mySonor = Sonorous.addSonor('./test_audio/test_sound_1.mp3', { preload: false });
console.log(mySonor.state); // prints out 'unloaded'
mySonor.load();
console.log(mySonor.state); // prints out 'loading'
number
(только чтение)Возвращает продолжительность сонора. Обратите внимание, что это значение будет доступно только при загрузке сонора. Если сонор выгружен, это вернет 0.
boolean
(только чтение)Возвращает true, если звук воспроизводится в данный момент, и false, если нет.
number
(только чтение)Возвращает степень воспроизведения звука. Если PoolSize > 1, для возврата этого значения будет использоваться первый активный аудиосегмент.
number
Открытое свойство для чтения и записи, которое управляет общим количеством аудиосегментов в пуле. Увеличьте размер пула, если вы хотите одновременно воспроизводить один и тот же звук. По умолчанию 1.
Как только размер пула увеличится, сеттеры/геттеры будут вести себя следующим образом: Любой сеттер будет применен ко всем активным сегментам. Любой геттер будет использовать первый активный аудиосегмент для возврата запрошенной информации. («Активный сегмент» — это тот, который уже извлечен из пула и используется в настоящее время.)
Пример:
let mySonor = Sonorous.addSonor('./test_audio/test_sound_1.mp3');
mySonor.poolSize = 2;
mySonor.play();
setTimeout(() => { mySonor.play(); }, 1000); // will result in the same audio being played twice, with the second playback 1s behind the first one.
number
Открытое свойство для чтения и записи, которое управляет скоростью воспроизведения этого звука. Если PoolSize > 1, для возврата этого значения будет использоваться первый активный аудиосегмент.
boolean
Открытое свойство для чтения/записи, которое определяет, будет ли звук зацикливаться или нет. При настройке этого свойства оно будет применяться ко всем активным сегментам.
number
Открытое свойство для чтения/записи, которое управляет громкостью этого звука. При настройке этого свойства оно будет применяться ко всем активным сегментам.
boolean
Открытое свойство для чтения и записи, которое определяет, отключен ли звук или нет. При настройке этого свойства оно будет применяться ко всем активным сегментам.
будет воспроизводить источник звука. Если сонор не загружен, он загрузится и начнет воспроизведение после загрузки. Если пул аудиосегментов больше 1, то мы извлекаем сегменты из пула по мере необходимости. «Активный сегмент» — это сегмент, который уже извлечен из пула и используется в настоящее время. Логика игры следующая:
if there are no active segments:
retrieve one from the pool and play it.
if there are active segments:
if none are currently playing:
play all active segments
else:
retrieve/play a segment from the pool
if there are no available segments in the pool:
do nothing and report an error
приостановит все активные аудиосегменты, но не вернет их в пул.
остановит все активные аудиосегменты и вернет их в пул.
будет постепенно затухать звук от текущей громкости до целевого Volume в течение предоставленной продолжительности затухания. Если указано значение startTime, которое больше текущего времени audioContext, затухание начнется в этой точке. В противном случае он начнется немедленно. Продолжительность затухания должна измеряться в секундах.
переместит воспроизведение к прошедшему времени (в секундах).
загрузит буфер и подготовит аудиосегмент к воспроизведению.
удалит буфер и вернет все активные аудиосегменты в пул.
Объект Sonor является источником событий (вкл/выкл/однократно). См. список доступных событий ниже.
Срабатывает при загрузке звука
Парам | Тип | Описание |
---|---|---|
sonorObj | Сонор | Экземпляр Сонора, на котором была проведена операция |
Сработает, когда начнется игра
Парам | Тип | Описание |
---|---|---|
sonorObj | Сонор | Экземпляр Сонора, на котором была проведена операция |
Сработает, когда звук приостановится
Парам | Тип | Описание |
---|---|---|
sonorObj | Сонор | Экземпляр Сонора, на котором была проведена операция |
Сработает, когда звук перестанет воспроизводиться
Парам | Тип | Описание |
---|---|---|
sonorObj | Сонор | Экземпляр Сонора, на котором была проведена операция |
Сработает, когда звук достигнет конца своей продолжительности
Парам | Тип | Описание |
---|---|---|
sonorObj | Сонор | Экземпляр Сонора, на котором была проведена операция |
Сработает, когда currentTime будет изменен вручную
Парам | Тип | Описание |
---|---|---|
sonorObj | Сонор | Экземпляр Сонора, на котором была проведена операция |
искать позицию | Число | Таймкод, к которому стремился Sonor |
Срабатывает при изменении громкости звука (через громкость или отключение звука)
Парам | Тип | Описание |
---|---|---|
sonorObj | Сонор | Экземпляр Сонора, на котором была проведена операция |
новыйОбъем | Число | Новый том, на который был настроен Sonor |
Срабатывает при изменении скорости воспроизведения
Парам | Тип | Описание |
---|---|---|
sonorObj | Сонор | Экземпляр Сонора, на котором была проведена операция |
новыйPlaybackRate | Число | Новая скорость воспроизведения, на которую был установлен Sonor. |
Сработает, когда затухание закончится
Парам | Тип | Описание |
---|---|---|
sonorObj | Сонор | Экземпляр Сонора, на котором была проведена операция |
Сработает, если во время операции Sonor произойдет какая-либо ошибка
Парам | Тип | Описание |
---|---|---|
sonorObj | Сонор | Экземпляр Сонора, на котором была проведена операция |
ошибка | Нить | Сообщение об ошибке |
Как только у вас появится локальный репозиторий, запустите yarn install
чтобы установить зависимости.
npm run build
соберет неминифицированные версии Sonorous.npm run build:production
будет собирать минифицированные и сжатые в gzip версии Sonorous.npm run start-dev
соберет неминифицированный Sonorous и откроет простую html-страницу с элементами управления звуком. Здесь вы можете вручную протестировать большую часть функций Sonorous.npm run test
запустит все модульные тесты. (Юнит-тесты написаны с использованием Jest)Мы активно приветствуем запросы на включение и предлагаемые изменения в базе кода. Пожалуйста, следуйте этим шагам при внесении вклада.
develop
и следуйте руководству по локальной разработке, чтобы получить возможность сборки.Sonorous поддерживается везде, где есть WebAudio. Нажмите здесь, чтобы просмотреть полный список.