JSPM

  • ESM via JSPM
  • ES Module Entrypoint
  • Export Map
  • Keywords
  • License
  • Repository URL
  • TypeScript Types
  • README
  • Created
  • Published
  • Downloads 1
  • Score
    100M100P100Q25107F
  • License ISC

Generate/Compose & Play Sounds from scratch.

Package Exports

  • g-sounds

This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (g-sounds) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.

Readme

gSounds.js

!!BETA!!

gSounds.js is a NodeJS-Library to simplify creation of audio files directly from scratch.

It can be very helpful for CLI-Apps with sounds, generate Sound automatically, quick conversions of audio-files, AI-Tasks, etc...

Quick Start

Play the first two bars of Mozart's "Kleine Nachtmusik"

const {Player} = require('g-sounds');

//[frequency,duration]
const NOTES = [[783.99, 0.5], [0, 0.25], [587.33, 0.25], [783.99, 0.5], [0, 0.25], [587.33, 0.25], [783.99, 0.25], [587.33, 0.25], [783.99, 0.25], [987.77, 0.25], [1174.7, 0.25]];

const p = new Player();
(async () => {
    console.log('Loading Notes from array...');
    await p.loadBufferFromNotes(NOTES);
    console.log('loaded...playing...');
    await p.play();
})();

Usage

gSounds.js expose following modules: Player,Note,Oscillator.

const {Player, Note, Oscillator} = require('g-sounds');

Player

The Player-Instance is used to handle audio-buffers and play with them.

const {Player} = require('g-sounds');
const p = new Player();

.loadBuffer( Buffer: audioBuffer ) : Promise

Load an audio-buffer. Resolve to decoded audio-buffer.

// buffer contains raw data obtained from `fs.readFile`
await p.loadBuffer(buffer);

.loadBufferFromNotes( Array|Object:Notes, Int:BPM ) : Promise

Load an audio-buffer from given Array of Tuples.

//load a A4 in 60BPM
await p.loadBufferFromNotes([[440,1]], 60);

Use an Object instead to generate an audio with multiple channels

const channel = [[440,1]]; //load a A4
const channel2 = [[261,1]]; //load a C4
await p.loadBufferFromNotes({channel,channel2});

.play() : Promise

Play loaded audio-buffer. Resolves to Player.

await p.play();

.saveFile( String: filePath ) : Promise

Save loaded audio-buffer to file path. (WAV-Files)

await p.saveFile('/path/to/save.wav')

.stop() : Promise

Stop played sound. Resolves to Player.

await p.stop();

Oscillator

The Oscillator is a class to handle easier with oscillator-waves.

constructor( Int:samples ): Oscillator

const {Oscillator} = require('g-sounds');
const o = new Oscillator();
const o1 = new Oscillator();

samples as default 44100.

create( Float:frequency, Int:samplingRate, Int:amplitude ) : Oscillator

Get Oscillator containing Wave-Data of a given frequency.

o.create(261.6); //C4
o1.create(440); //A4

add( Oscillator:otherOscillator ) : Oscillator

Add values of Oscillator to another one. Creating a new one.

const finalOsc = o.add(o1);

rawData() : Float32Array

Get raw data of created Wave to send directly to any wav-encoder.

const raw = finalOsc.rawData();

Note

The Note-Instance is helpful to get some frequency

const {Note} = require('g-sounds');
const n = new Note();

.getFrequency( String: note ) : Number|undefined

Get the frequency-value of a given note.

n.getFrequency('C4'); //261.6

.getNote( Float|Int: frequency) : String|undefined

Get the Note name of a given frequency.

n.getNote(261.61); // C4

or

n.getNote(261); // C4

.getOscillator( Float:frequency, Number:samplingRate, Int:samples, Int:amplitude ) : Oscillator

Get Oscillator containing Wave-Data of a given frequency.

n.getOscillator(261.6); // the sin-wave values for C4

Examples

Saving a wav-file created from scratch

const {Player} = require('g-sounds');

const NOTES = [[440,1]]; //simple A

const p = new Player();
(async () => {
    console.log('Loading Notes from array...');
    await p.loadBufferFromNotes(NOTES);
    await p.saveFile('test.wav');
    console.log('File was written!');
    process.exit(0);
})();

Print the notes of "Kleine Nachtmusik" from frequencies values.

const {Note}= require('g-sounds');

//first two bars of Mozart's "Kleine Nachtmusik"
const NOTES = [[783.99, 0.5], [0, 0.25], [587.33, 0.25], [783.99, 0.5], [0, 0.25], [587.33, 0.25], [783.99, 0.25], [587.33, 0.25], [783.99, 0.25], [987.77, 0.25], [1174.7, 0.25]];

const n = new Note();

for (const [frequency, duration] of NOTES) {
    const noteName = n.getNote(frequency);
    console.log(frequency, '=>', noteName);
}

// 783.99 '=>' 'G5'
// 0 '=>' 'pause'
// 587.33 '=>' 'D5'
// 783.99 '=>' 'G5'
// 0 '=>' 'pause'
// 587.33 '=>' 'D5'
// 783.99 '=>' 'G5'
// 587.33 '=>' 'D5'
// 783.99 '=>' 'G5'
// 987.77 '=>' 'B5'
// 1174.7 '=>' 'D6'

More examples here