UNPKG

audiobuffer-arraybuffer-serializer

Version:
110 lines (108 loc) 4.7 kB
'use strict'; if (typeof module !== 'undefined') { var helper = require('./helper'); } function shouldSuccessDecoder(conf, decoder, channels, done) { let src = helper.arrayBuffer(conf); let dv = new DataView(src); dv.setFloat32( 0, conf.sampleRate, decoder.littleEndian); dv.setFloat32( 4, conf.length / conf.sampleRate, decoder.littleEndian); // duration dv.setUint32 ( 8, conf.length, decoder.littleEndian); dv.setUint32 (12, conf.numberOfChannels, decoder.littleEndian); for (let c = 0; c < channels.length; c++) { for (let i = 0; i < channels[c].length; i++) { dv.setFloat32(16 + (c * conf.length) + (i * 4), channels[c][i], decoder.littleEndian); } } let dst = decoder.execute(src); expect(dst.length).to.equal(conf.length); expect(dst.numberOfChannels).to.equal(conf.numberOfChannels); expect(dst.sampleRate).to.equal(conf.sampleRate); // expect(dst.duration).to.equal(conf.duration); for (let c = 0; c < channels.length; c++) { let ch = dst.getChannelData(0); for (let i = 0; i < channels[c].length; i++) { dv.setFloat32(16 + (c * conf.length) + (i * 4), channels[c][i], decoder.littleEndian); expect(ch[i], channels[c][i]); } } done(); } describe('audiobuffer-decoder', () => { describe('Channel:1 should be success', () => { let conf = null, channels = null; before(() => { conf = { length: 2, numberOfChannels: 1, sampleRate: 12000, }; channels = [ helper.f32(1.0, 2.0), ]; }); it('Little endian', done => { shouldSuccessDecoder(conf, new Decoder({ littleEndian: true, }), channels, done); }); it('Big endian', done => { shouldSuccessDecoder(conf, new Decoder({ littleEndian: false, }), channels, done); }); }); describe('Channel:2 should be success', () => { let conf = null, channels = null; before(() => { conf = { length: 2, numberOfChannels: 2, sampleRate: 12000, }; channels = [ helper.f32(1.0, 2.0), helper.f32(3.0, 4.0), ]; }); it('Little endian', done => { shouldSuccessDecoder(conf, new Decoder({ littleEndian: true, }), channels, done); }); it('Big endian', done => { shouldSuccessDecoder(conf, new Decoder({ littleEndian: false, }), channels, done); }); }); describe('Channel:3 should be success', () => { let conf = null, channels = null; before(() => { conf = { length: 2, numberOfChannels: 3, sampleRate: 12000, }; channels = [ helper.f32(1.0, 2.0), helper.f32(3.0, 4.0), helper.f32(5.0, 6.0), ]; }); it('Little endian', done => { shouldSuccessDecoder(conf, new Decoder({ littleEndian: true, }), channels, done); }); it('Big endian', done => { shouldSuccessDecoder(conf, new Decoder({ littleEndian: false, }), channels, done); }); }); it('Should be parameter error', done => { let decoder = new Decoder(); assert.throws(() => decoder.execute(1), TypeError, `'src' must be instance of ArrayBuffer`); assert.throws(() => decoder.execute(new ArrayBuffer(), 1), TypeError, `'dst' must be instance of AudioBuffer`); done(); }); describe('Should be invalid error', () => { let decoder = null, src = null; before(() => { decoder = new Decoder({littleEndian: true}); src = helper.arrayBuffer({length: 5, numberOfChannels: 3, sampleRate: 12000}); let dv = new DataView(src); dv.setFloat32(0, 12000, true); dv.setUint32(8, 5, true); dv.setUint32(12, 3, true); }); it('Too short buffer length', done => { let dst = helper.audioBuffer({length: 3, numberOfChannels: 3, sampleRate: 12000}); assert.throws(() => decoder.execute(src, dst), InvalidAudioBufferLengthError, `Expected audio buffer length is '5' but real is '3'`); done(); }); it('Too long buffer length', done => { let dst = helper.audioBuffer({length: 300, numberOfChannels: 3, sampleRate: 12000}); assert.throws(() => decoder.execute(src, dst), InvalidAudioBufferLengthError, `Expected audio buffer length is '5' but real is '300'`); done(); }); it('Different sampleRate', done => { let dst = helper.audioBuffer({length: 5, numberOfChannels: 3, sampleRate: 12001}); assert.throws(() => decoder.execute(src, dst), InvalidSampleRateError, `Expected audio buffer sampleRate is '12000' but real is '12001'`); done(); }); it('Different numberOfChannels', done => { let dst = helper.audioBuffer({length: 5, numberOfChannels: 1, sampleRate: 12000}); assert.throws(() => decoder.execute(src, dst), InvalidNumberOfChannelsError, `Expected audio buffer numberOfChannels is '3' but real is '1'`); done(); }); }); });