soundfont-player
Version:
Lightweight soundfont (music instrument) loader and player for WebAudio API
61 lines (57 loc) • 2.16 kB
JavaScript
/* global describe it AudioContext */
require('web-audio-test-api')
var assert = require('assert')
var fs = require('fs')
var path = require('path')
var load = require('audio-loader')
var Soundfont = require('..')
var piano = fs.readFileSync(path.join(__dirname, '../examples/assets/acoustic_grand_piano-ogg.js'))
load.fetch = function (url) {
load.fetch.url = url
return Promise.resolve(piano.toString())
}
describe('Soundfont player', function () {
describe('Load instruments', function () {
it('returns a promise', function () {
var ac = new AudioContext()
assert.equal(typeof Soundfont.instrument(ac, 'piano').then, 'function')
})
it('loads mp3 by default', function () {
var ac = new AudioContext()
return Soundfont.instrument(ac, 'piano').then(function (piano) {
assert.equal(piano.url,
'https://gleitz.github.io/midi-js-soundfonts/MusyngKite/piano-mp3.js')
})
})
it('the promise resolve to an instrument', function () {
var ac = new AudioContext()
return Soundfont.instrument(ac, 'piano')
.then(function (piano) {
assert(piano)
assert.equal(piano.name, 'piano')
assert.equal(typeof piano.play, 'function')
})
})
it('options.nameToUrl', function () {
var ac = new AudioContext()
var toUrl = function (name) { return 'URL:' + name + '.js' }
return Soundfont.instrument(ac, 'piano', { nameToUrl: toUrl }).then(function (piano) {
assert.equal(piano.url, 'URL:piano.js')
})
})
})
describe('Build urls', function () {
it('get default url', function () {
assert.equal(Soundfont.nameToUrl('marimba'),
'https://gleitz.github.io/midi-js-soundfonts/MusyngKite/marimba-mp3.js')
})
it('get MusyngKite url', function () {
assert.equal(Soundfont.nameToUrl('marimba', 'FluidR3_GM'),
'https://gleitz.github.io/midi-js-soundfonts/FluidR3_GM/marimba-mp3.js')
})
it('accepts ogg', function () {
assert.equal(Soundfont.nameToUrl('marimba', null, 'ogg'),
'https://gleitz.github.io/midi-js-soundfonts/MusyngKite/marimba-ogg.js')
})
})
})