Skip to content
master
Switch branches/tags
Go to file
Code

Latest commit

 

Git stats

Files

Permalink
Failed to load latest commit information.
Type
Name
Latest commit message
Commit time
 
 
src
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Crunker

Experimental, use in production with caution

Simple way to merge, concatenate, play, export and download audio files with the Web Audio API.

  • No dependencies
  • Tiny 2kB gzipped

Installation

yarn add crunker
npm install crunker

Example

let crunker = new Crunker();

crunker
  .fetchAudio("/song.mp3", "/another-song.mp3")
  .then(buffers => {
    // => [AudioBuffer, AudioBuffer]
    return crunker.mergeAudio(buffers);
  })
  .then(merged => {
    // => AudioBuffer
    return crunker.export(merged, "audio/mp3");
  })
  .then(output => {
    // => {blob, element, url}
    crunker.download(output.blob);
    document.body.append(output.element);
    console.log(output.url);
  })
  .catch(error => {
    // => Error Message
  });

crunker.notSupported(() => {
  // Handle no browser support
});

Condensed Example

let crunker = new Crunker();

crunker
  .fetchAudio("/voice.mp3", "/background.mp3")
  .then(buffers => crunker.mergeAudio(buffers))
  .then(merged => crunker.export(merged, "audio/mp3"))
  .then(output => crunker.download(output.blob))
  .catch(error => {
    throw new Error(error);
  });

Input file Example

let crunker = new Crunker();

const onFileInputChange = async (target) => {
  const buffers = await crunker.fetchAudio(...target.files, "/voice.mp3", "/background.mp3");
};

<input
  onChange={onFileInputChange(this)}
  type="file"
  accept="audio/*"
/>

Graphic Representation of Methods

Merge

merge

Concat

concat

Methods

new Crunker({ sampleRate: 44100 })

Create a new Crunker. You may optionally provide an object with a sampleRate key, defaults to 44100.

crunker.fetchAudio(songURL, anotherSongURL)

Fetch one or more audio files. Returns: an array of audio buffers in the order they were fetched.

crunker.mergeAudio(arrayOfBuffers);

Merge two or more audio buffers. Returns: a single AudioBuffer object.

crunker.concatAudio(arrayOfBuffers);

Concatenate two or more audio buffers in the order specified. Returns: a single AudioBuffer object.

crunker.padAudio(buffer, padStart, seconds);

Pad the audio with silence, at the beginning, the end, or any specified points through the audio. Returns: a single AudioBuffer object.

crunker.export(buffer, type);

Export an audio buffers with MIME type option. Type: 'audio/mp3', 'audio/wav', 'audio/ogg'. Returns: an object containing the blob object, url, and an audio element object.

crunker.download(blob, filename);

Automatically download an exported audio blob with optional filename. Filename: String not containing the .mp3, .wav, or .ogg file extension. Returns: the <a></a> element used to simulate the automatic download.

crunker.play(blob);

Starts playing the exported audio blob in the background. Returns: the audio source object.

crunker.notSupported(callback);

Execute custom code if Web Audio API is not supported by the users browser. Returns: The callback function.

License

MIT