audio-loader

A flexible web audio sample loader for browser and node

Downloads in past

Stats

StarsIssuesVersionUpdatedCreatedSize
audio-loader
8191.0.37 years ago8 years agoMinified + gzip package size for audio-loader in KB

Readme

audio-loader
Build Status Code Climate js-standard-style npm Greenkeeper badge license An simple and flexible audio buffer loader for browser and node: ```js var load = require('audio-loader') // load one file load('http://example.net/audio/file.mp3').then(function (buffer) { console.log(buffer) // => }) // load a collection of files load({ snare: 'samples/snare.wav', kick: 'samples/kick.wav' }, { from: 'http://example.net/'} ).then(function (audio) { console.log(audio) // => { snare: , kick: } }) ```

Features

  • Load single audio files or collection of them (either using arrays or data objects)
  • Load base64 encoded audio strings
  • Compatible with json encoded audio like sampled

Install

Npm Via npm: npm i --save audio-loader Browser Download the minified distribution (4kb) which exports loadAudio as window global: ```html ```

Usage

Load audio files

You can load individual or collection of files: ```js load('http://path/to/file.mp3').then(function (buffer) { // buffer is an AudioBuffer play(buffer) }) // apply a prefix using options.from load('snare.mp3', 'kick.mp3', { from: 'http://server.com/audio/' }).then(function (buffers) { // buffers is an array of AudioBuffers play(buffers0) }) // the options.from can be a function function toUrl (name) { return 'http://server.com/samples' + name + '?key=secret' } load({ snare: 'snare.mp3', kick: 'kick.mp3' }, { from: toUrl }).then(function (buffers) { // buffers is a hash of names to AudioBuffers play(buffers'snare') }) ```

Recursive loading

audio-loader will detect if some of the values of an object is an audio file name and try to fetch it: ```js var inst = { name: 'piano', gain: 0.2, audio: 'samples/piano.mp3' } load(inst).then(function (piano) { console.log(piano.name) // => 'piano' (it's not an audio file) console.log(piano.gain) // => 0.2 (it's not an audio file) console.log(piano.audio) // => (it loaded the file) }) ```

Load soundfont files

If you provide a .js file, audio-loader will interpret it as a midi.js soundfont file and try to load it: ```js load('acousticgrandpiano-ogg.js').then(function (buffers) { buffers'C2' // => }) ``` This is a repository of them: https://github.com/gleitz/midi-js-soundfonts

API

load(source, [options])

| Param | Type | Description | | --- | --- | --- | | source | Object | the object to be loaded: can be an URL string, ArrayBuffer with encoded data or an array/map of sources | | options | Object | (Optional) the load options for that source | Possible options keys are:
  • from {Function|String}: a function or string to convert from file names to urls.
If is a string it will be prefixed to the name: load('snare.mp3', { from: 'http://audio.net/samples/' }) If it's a function it receives the file name and should return the url as string.
  • only {Array} - when loading objects, if provided, only the given keys
will be included in the decoded object: load('piano.json', { only: ['C2', 'D2'] })
  • context {AudioContext}: (browser only) The audio context to use. By default uses audio-context
  • decode {Function}: a function to decode audio. It receives a buffer and must return a promise to an audio buffer.
  • fetch {Function}: a function to fetch files. It receives an url and a response type (one of 'arraybuffer' or 'text') and must return a promise to the contents

Run tests and examples

To run the test, clone this repo and: ```bash npm install npm test ``` To run the browser example: ```bash npm i -g budo npm run example-browser ``` To run the node (audiojs) example: ```bash node example/node.js ```

License

MIT License