Skip to content
This repository

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP

The best sound library for Node.

branch: master
README.md

node-sound The best sound library for node.js

 

Node-sound es un módulo nativo para node.js que sirve para crear/sintetizar y reproducir sonidos en tu Mac, en JavaScript, a partir de un buffer, o a partir de cualquier fichero de música (.aiff, .mp3, .m4a, .aac, .mov, ...) usando las librerías de sonido incorporadas en el Mac OSX.

Instalar

NOTA: funciona con cualquier node >= v0.3.6. Sólo funciona con Mac OSX

Works with all nodes >= v0.3.6 . Only for Mac OSX

(Puedes encontrar cualquier versión de node, desde la primera hasta la última, en: http://nodejs.org/dist/ )

Que un módulo sea nativo significa fundamentalmente dos cosas: que está escrito en C y que para poder usarlo hay que compilarlo primero.

Es muy fácil de hacer, suponiendo que ya tengas node.js instalado (y compilado y funcionando).

Lo primero es descargar el .zip o el .tar.gz dando al botón DOWNLOADS que hay ahí arriba a la derecha en esta misma página:

Después descomprimes ese fichero y creará una carpeta xk-node-sound-xxxx. Puedes borrar el -xxxx y dejarla en xk-node-sound a secas.

Por último, para compilar el módulo teclea:

cd xk-node-sound
node-waf configure uninstall distclean configure build install

En mi Mac eso produce algo así, donde lo más importante es la última línea: 'build' finished successfully:

Si todo ha ido bien, el módulo compilado se encontrará, dependiendo de la versión de node que tengas instalada, en xk-node-sound/build/default/sound.node (versiones más antiguas de node), o en xk-node-sound/build/release/sound.node (versiones más modernas de node)

Si algo no va bien, puedes abrir un ticket haciendo click en "issues" arriba, en esta misma página. Describe el problema lo mejor posible y yo recibiré un email automáticamente, y trataré de resolverlo lo antes posible.

 

Manual de instrucciones:

Require('sound')

Lo primero es cargar el módulo y asignarle un nombre (por ejemplo Sound) en la aplicación:

var Sound= require('sound');

Si node no es capaz de encontralo, tienes dos opciones.

La mejor opción: translada el fichero sound.node a la carpeta node_modules (si no existe, simplemente créala), o bien, especifica el path completo hasta la carpeta en la que se encuentra sound.node :

require('/absolute/path/to/sound.node's/folder/sound'); // ugh !

Por ejemplo, los tests usan:

require('./build/default/sound');

El módulo (que una vez require()d se llama Sound) tiene 4 métodos:

 

Sound.create(buffer)

Crea un sonido a partir de un buffer.

var buffer= new Buffer(8192);       // Crear un buffer de 8kB

var i= buffer.length;
while (i--) buffer[i]= i%256;       // Rellenar el buffer con algo que "suene"

var sonido1= Sound.create(buffer);  // Crear el sonido.

sonido1.loop(5).volume(0.5).play(); // Y hacerlo sonar 5 veces seguidas con el volumen al 50%

 

Sound.bufferifySync(path)

Lee un fichero de sonido, preferiblemente :-) y lo transforma en un buffer. Admite casi cualquier formato de sonido: .wav, .mp3, .aif, .m4a, etc.

var buffer = Sound.bufferifySync('unPingüinoEnMiAscensor.mp3');
var sonido2= Sound.create(buffer);

//o simplemente:

var sonido2= Sound.create( Sound.bufferifySync(path) );

//Y luego le damos a play:

sonido2.play();

 

Sound.bufferify(path, callback)

Es la versión asíncrona de bufferifySync(), hace lo mismo pero (en una thread en paralelo) sin bloquear, y cuando ha acabado llama a callback y le pasa el buffer si no ha habido ningún error :

Sound.bufferify('/path/to/a/sound.file', cb)
function cb (error, buffer) {
  if (!error) {
    var sonido2= Sound.create(buffer);
  }
}

 

Sound.stream(path)

Aún no va (2011-05-19). Mejor lo dejamos para otro momento.

var sonido3= Sound.stream(path)

 

Los métodos de los sonidos:

Sound.create(buffer) devuelve un objeto sonido que tiene los siguentes métodos:

.play()             // evidente.
.play(callback)     // Igual, pero al acabar llama a callback
.loop(veces)        // repite el sonido en bucle *veces* veces
.volume( 0..1 )     // 0 es silencio, 1 es a tope, cualquier cosa intermedia vale también.
.pause()            // pues eso.

Cada vez que se llama a cualquiera de ellos, devuelve el objeto sonido otra vez, lo que permite encadenar las llamadas:

En vez de:

sonido.loop(5);
sonido.volume(1);
sonido.play();

Puedes hacerlo en una sola línea:

sonido.loop(5).volume(1).play();

Además, cada objeto sonido tiene estos otros 2 atributos:

 .id                // Un número de serie que se asigna secuencialmente.
 .data              // Una referencia al buffer con el que se ha creado.

En resumen:


© Jorge Chamorro Bieling, 2011. Ver la Licencia

Something went wrong with that request. Please try again.