Sonorous.js es una biblioteca de audio JavaScript que agiliza el trabajo con audio web, permitiendo una fácil integración de audio en aplicaciones y juegos web. Como abstracción de las API de WebAudio, Sonorous.js ofrece un control detallado para quienes lo necesitan, mientras maneja cualquier problema entre navegadores por usted.
por el equipo de
boombox
Mezclador de pistas
Maestro de cuerdas
Consulte el directorio de examples/
del repositorio para ver el código fuente.
Para comenzar, ejecute npm install --save sonorous
.
Para utilizar Sonorous.js, solicítelo o impórtelo a su archivo.
ES6
import Sonorous from 'sonorous';
JS común
const Sonorous = require('sonorous');
Sonorous es un administrador que se encarga de agregar y eliminar sonidos. Se puede considerar un sonido como un contenedor de un archivo de audio. Cada sonda tiene su propia funcionalidad, como play()
, pause()
, volume
, etc. También puede configurar propiedades globales ( masterVolume
, muteAll
, etc.) en todas las sondas a través de la instancia de Sonorous.
Ejemplo:
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
Consulte la sección API para obtener más detalles.
Sonorous es un singleton y gestionará todos los objetos de Sonor.
Sonor[]
(solo lectura)Matriz de todos los objetos Sonor agregados a este administrador.
AudioContext
(solo lectura)Devuelve el contexto de audio actual utilizado por Sonorous.
number
Esta es una propiedad de lectura/escritura y está conectada al nodo masterGain, que establecerá el volumen para todos los objetos Sonor. Los valores válidos están entre 0 y 1.
boolean
Esta es una propiedad de lectura/escritura que silenciará/activará el silencio de todos los objetos de Sonor.
boolean
Devuelve verdadero si se admite WebAudio, falso en caso contrario.
Sonor
crea un objeto Sonor y lo devuelve, si tiene éxito.
parámetro | Tipo | Descripción |
---|---|---|
src | string , string[] , SonorSrc , SonorSrc[] | Los medios con los que está asociado este sonido. Si pasa una serie de varios formatos, se tomará el primero que funcione con el navegador actual. Si su URL de origen no tiene una extensión, puede especificarla manualmente utilizando el objeto SonorSrc definido a continuación. |
opciones | object | Objeto de configuración opcional. Vea las opciones a continuación. |
Opciones de configuración para addSonor()
:
Opción | Tipo | Por defecto | Descripción |
---|---|---|---|
identificación | string | generado aleatoriamente | Una identificación única. Se creará uno para este objeto si no lo pasa. |
precarga | boolean | true | Intentará cargar la URL automáticamente si es cierto. Si es falso, el código de llamada debe llamar explícitamente load() . |
volumen | number | 1.0 | El volumen inicial del sonido. |
bucle | boolean | false | Determina si el audio debe repetirse para siempre. |
reproducción automática | boolean | false | Determine si el audio debe reproducirse inmediatamente después de la carga. |
apagado | boolean | false | Silenciar una vez cargado. |
tamaño de la piscina | number | 1 | El número total de segmentos de audio disponibles para reproducir. Aumentar este número le permite comenzar a reproducir simultáneamente el mismo sonido varias veces, antes de que finalice la reproducción inicial. |
optimizarPara | string | 'time' | Puede ser 'time' o 'memory' . Esto determina si el búfer decodificado se almacenará en caché o no. Por defecto así será. Si le preocupa la memoria, configúrelo en 'memoria' y espere un pequeño retraso mientras decodificamos el búfer antes de que pueda comenzar la reproducción. |
Propiedad | Tipo | Descripción |
---|---|---|
URL | string | La URL de origen del audio, sin extensión. |
formato | string | El formato especificado manualmente para esta fuente de audio. |
Ejemplo:
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'});
elimina un objeto Sonor del administrador. Esto descargará y destruirá el sonido y detendrá inmediatamente todos los procesos relacionados con este sonido.
elimina cualquier objeto sonoro existente y restablece el contexto de audio.
destruye todos los objetos de Sonor
Sonor
devolver un objeto Sonor
Ejemplo:
Sonorous.addSonor('./test_audio/test_sound_1.mp3', { id: 'mySonorId'});
let mySonor = Sonorous.get('mySonorId');
boolean
devuelve verdadero si Sonorous tiene un Sonor que coincide con el ID pasado
se activará cuando el audio esté desbloqueado (a través de la interacción del usuario con la página). Algunos navegadores no permiten la reproducción de audio antes de que un usuario haya interactuado con la página de alguna manera. Este evento se activará una vez que el audio esté libre para reproducirse.
Este módulo contiene la mayor parte de la funcionalidad para controlar un sonido, incluido el ajuste del volumen, la reproducción, la pausa, etc. Si AudioContext no se ha desbloqueado (mediante un gesto del usuario, etc.), todas las acciones entrarán en una cola. Estas acciones se ejecutarán inmediatamente tan pronto como se desbloquee AudioContext y se haya cargado el búfer.
string
(solo lectura) Una propiedad de solo lectura que devuelve el ID único de este objeto de sonido. La identificación se proporciona opcionalmente durante la inicialización (consulte addSonor() de Sonorous para obtener más información). Si no se proporciona ninguna identificación durante la inicialización, se asignará como identificación una cadena alfanumérica generada aleatoriamente. Sonorous puede recuperar objetos Sonor por identificación, utilizando la función Sonorous.get(id)
.
string
(solo lectura)Devuelve la URL del audio fuente de este objeto.
boolean
(solo lectura)Devuelve verdadero si el sonido se configuró para precargarse durante la inicialización.
string
(solo lectura) Refleja el estado de carga del sonor. Puede ser 'loading'
, 'loaded'
o 'unloaded'
.
Ejemplo:
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
(solo lectura)Devuelve la duración del sonido. Tenga en cuenta que este valor sólo estará disponible cuando se cargue una sonda. Si el sonor está descargado, devolverá 0.
boolean
(solo lectura)Devuelve verdadero si el sonido se está reproduciendo actualmente, falso en caso contrario.
number
(solo lectura)Devuelve qué tan avanzado está el sonido en la reproducción. Si poolSize > 1, se utilizará el primer segmento de audio activo para devolver este valor.
number
Una propiedad pública de lectura/escritura que controla el número total de segmentos de audio del grupo. Aumente el tamaño del grupo si desea comenzar a reproducir el mismo sonido al mismo tiempo. El valor predeterminado es 1.
Una vez que el tamaño del grupo haya aumentado, los definidores/obtenedores se comportarán de la siguiente manera: Cualquier definidor se aplicará a todos los segmentos activos. Cualquier captador utilizará el primer segmento de audio activo para devolver la información solicitada. (Un "segmento activo" es aquel que ya se ha extraído del grupo y que está actualmente en uso).
Ejemplo:
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
Una propiedad pública de lectura/escritura que controla la velocidad de reproducción de este sonido. Si poolSize > 1, se utilizará el primer segmento de audio activo para devolver este valor.
boolean
Una propiedad pública de lectura/escritura que controla si el sonido se repetirá o no. Al configurar esta propiedad, se aplicará a todos los segmentos activos.
number
Una propiedad pública de lectura/escritura que controla el volumen de este sonido. Al configurar esta propiedad, se aplicará a todos los segmentos activos.
boolean
Una propiedad pública de lectura/escritura que controla si el sonido está silenciado o no. Al configurar esta propiedad, se aplicará a todos los segmentos activos.
reproducirá la fuente de audio. Si la sonda no se ha cargado, la cargará y reproducirá una vez cargada. Si el grupo de segmentos de audio es mayor que 1, extraemos segmentos del grupo según sea necesario. Un "segmento activo" es aquel que ya se ha extraído del grupo y que está actualmente en uso. La lógica del juego es la siguiente:
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
pausará todos los segmentos de audio activos, pero no los devolverá al grupo.
detendrá todos los segmentos de audio activos y los devolverá al grupo.
atenuará el audio del volumen actual al volumen objetivo, durante la duración del desvanecimiento proporcionada. Si se proporciona un startTime y es mayor que el tiempo actual de audioContext, el desvanecimiento comenzará en ese punto. De lo contrario, comenzará inmediatamente. La duración del desvanecimiento debe ser en términos de segundos.
moverá la reproducción al tiempo transcurrido (en segundos).
cargará el búfer y preparará un segmento de audio para su reproducción.
eliminará el búfer y devolverá todos los segmentos de audio activos al grupo.
El objeto Sonor es un emisor de eventos (encendido/apagado/una vez). Vea la lista de eventos disponibles a continuación.
Se activará cuando se cargue el sonido.
parámetro | Tipo | Descripción |
---|---|---|
sonorObj | sonido | La instancia de Sonor que fue operada |
Se activará cuando comience el juego.
parámetro | Tipo | Descripción |
---|---|---|
sonorObj | sonido | La instancia de Sonor que fue operada |
Se activará cuando el sonido se detenga.
parámetro | Tipo | Descripción |
---|---|---|
sonorObj | sonido | La instancia de Sonor que fue operada |
Se activará cuando el sonido deje de reproducirse.
parámetro | Tipo | Descripción |
---|---|---|
sonorObj | sonido | La instancia de Sonor que fue operada |
Se activará cuando el sonido llegue al final de su duración.
parámetro | Tipo | Descripción |
---|---|---|
sonorObj | sonido | La instancia de Sonor que fue operada |
Se activará cuando la hora actual se haya cambiado manualmente
parámetro | Tipo | Descripción |
---|---|---|
sonorObj | sonido | La instancia de Sonor que fue operada |
buscar posición | Número | Código de tiempo que el Sonor buscaba |
Se activará cuando cambie el volumen del sonido (mediante volumen o silencio)
parámetro | Tipo | Descripción |
---|---|---|
sonorObj | sonido | La instancia de Sonor que fue operada |
nuevoVolumen | Número | El nuevo volumen al que se configuró el Sonor |
Se activará cuando cambie la velocidad de reproducción.
parámetro | Tipo | Descripción |
---|---|---|
sonorObj | sonido | La instancia de Sonor que fue operada |
nuevoTasa de reproducción | Número | La nueva velocidad de reproducción en la que se configuró el Sonor |
Se activará cuando termine el desvanecimiento.
parámetro | Tipo | Descripción |
---|---|---|
sonorObj | sonido | La instancia de Sonor que fue operada |
Se activará si ocurre algún error durante una operación de Sonor
parámetro | Tipo | Descripción |
---|---|---|
sonorObj | sonido | La instancia de Sonor que fue operada |
error | Cadena | Mensaje de error |
Una vez que tenga el repositorio localmente, ejecute yarn install
para instalar las dependencias.
npm run build
creará versiones no minificadas de Sonorous.npm run build:production
creará versiones minimizadas y comprimidas con gzip de Sonorous.npm run start-dev
construirá Sonorous no minificado y abrirá una página html simple con controles de audio. Puede probar manualmente la mayor parte de la funcionalidad de Sonorous desde allí.npm run test
ejecutará todas las pruebas unitarias. (Las pruebas unitarias se escriben usando Jest)Damos la bienvenida activamente a las solicitudes de extracción y a los cambios propuestos en la base del código. Siga estos pasos cuando contribuya.
develop
y siga la guía Desarrollo local para poder construirlo.Sonorous es compatible dondequiera que esté WebAudio. Haga clic aquí para obtener una lista completa.