diff --git a/src/ADPCMSoundDecoder.js b/src/ADPCMSoundDecoder.js index 63d4baf..6613726 100644 --- a/src/ADPCMSoundDecoder.js +++ b/src/ADPCMSoundDecoder.js @@ -1,6 +1,6 @@ -var ArrayBufferStream = require('./ArrayBufferStream'); -var Tone = require('tone'); -var log = require('./log'); +const ArrayBufferStream = require('./ArrayBufferStream'); +const Tone = require('tone'); +const log = require('./log'); /** * Decode wav audio files that have been compressed with the ADPCM format. @@ -21,27 +21,27 @@ function ADPCMSoundDecoder () { */ ADPCMSoundDecoder.prototype.decode = function (audioData) { - return new Promise(function (resolve, reject) { - var stream = new ArrayBufferStream(audioData); + return new Promise((resolve, reject) => { + const stream = new ArrayBufferStream(audioData); - var riffStr = stream.readUint8String(4); + const riffStr = stream.readUint8String(4); if (riffStr != 'RIFF') { log.warn('incorrect adpcm wav header'); reject(); } - var lengthInHeader = stream.readInt32(); + const lengthInHeader = stream.readInt32(); if ((lengthInHeader + 8) != audioData.byteLength) { - log.warn('adpcm wav length in header: ' + lengthInHeader + ' is incorrect'); + log.warn(`adpcm wav length in header: ${lengthInHeader} is incorrect`); } - var wavStr = stream.readUint8String(4); + const wavStr = stream.readUint8String(4); if (wavStr != 'WAVE') { log.warn('incorrect adpcm wav header'); reject(); } - var formatChunk = this.extractChunk('fmt ', stream); + const formatChunk = this.extractChunk('fmt ', stream); this.encoding = formatChunk.readUint16(); this.channels = formatChunk.readUint16(); this.samplesPerSecond = formatChunk.readUint32(); @@ -52,18 +52,18 @@ ADPCMSoundDecoder.prototype.decode = function (audioData) { this.samplesPerBlock = formatChunk.readUint16(); this.adpcmBlockSize = ((this.samplesPerBlock - 1) / 2) + 4; // block size in bytes - var samples = this.imaDecompress(this.extractChunk('data', stream), this.adpcmBlockSize); + const samples = this.imaDecompress(this.extractChunk('data', stream), this.adpcmBlockSize); // todo: this line is the only place Tone is used here, should be possible to remove - var buffer = Tone.context.createBuffer(1, samples.length, this.samplesPerSecond); + const buffer = Tone.context.createBuffer(1, samples.length, this.samplesPerSecond); // todo: optimize this? e.g. replace the divide by storing 1/32768 and multiply? - for (var i=0; i { this.instruments[instrumentNum].play( note, Tone.context.currentTime, { - duration : sec, - gain : gain + duration: sec, + gain: gain } ); }); @@ -57,20 +57,20 @@ InstrumentPlayer.prototype.playNoteForSecWithInstAndVol = function (note, sec, i InstrumentPlayer.prototype.loadInstrument = function (instrumentNum) { if (this.instruments[instrumentNum]) { return Promise.resolve(); - } else { - return Soundfont.instrument(Tone.context, this.instrumentNames[instrumentNum]) - .then((inst) => { + } + return Soundfont.instrument(Tone.context, this.instrumentNames[instrumentNum]) + .then(inst => { inst.connect(this.outputNode); this.instruments[instrumentNum] = inst; }); - } + }; /** * Stop all notes being played on all instruments */ InstrumentPlayer.prototype.stopAll = function () { - for (var i=0; i { storedContext.bufferSource.onended = function () { this.isPlaying = false; resolve(); diff --git a/src/effects/EchoEffect.js b/src/effects/EchoEffect.js index 2dfd9bd..6210546 100644 --- a/src/effects/EchoEffect.js +++ b/src/effects/EchoEffect.js @@ -1,4 +1,4 @@ -var Tone = require('tone'); +const Tone = require('tone'); /** * An echo effect (aka 'delay effect' in audio terms) @@ -36,8 +36,8 @@ EchoEffect.prototype.set = function (val) { this.wet.value = 0.5; } - var feedback = (this.value / 100) * 0.75; - this.delay.feedback.rampTo(feedback, 1/60); + const feedback = (this.value / 100) * 0.75; + this.delay.feedback.rampTo(feedback, 1 / 60); }; /** @@ -59,4 +59,3 @@ EchoEffect.prototype.clamp = function (input, min, max) { }; module.exports = EchoEffect; - diff --git a/src/effects/FuzzEffect.js b/src/effects/FuzzEffect.js index 9ed24e3..3c07b36 100644 --- a/src/effects/FuzzEffect.js +++ b/src/effects/FuzzEffect.js @@ -1,4 +1,4 @@ -var Tone = require('tone'); +const Tone = require('tone'); /** * A fuzz effect (aka 'distortion effect' in audio terms) @@ -49,4 +49,3 @@ FuzzEffect.prototype.clamp = function (input, min, max) { }; module.exports = FuzzEffect; - diff --git a/src/effects/PanEffect.js b/src/effects/PanEffect.js index a0950c5..f6e1e2d 100644 --- a/src/effects/PanEffect.js +++ b/src/effects/PanEffect.js @@ -1,4 +1,4 @@ -var Tone = require('tone'); +const Tone = require('tone'); /** * A pan effect, which moves the sound to the left or right between the speakers @@ -50,4 +50,3 @@ PanEffect.prototype.clamp = function (input, min, max) { }; module.exports = PanEffect; - diff --git a/src/effects/PitchEffect.js b/src/effects/PitchEffect.js index d93c35a..dccf568 100644 --- a/src/effects/PitchEffect.js +++ b/src/effects/PitchEffect.js @@ -1,4 +1,4 @@ -var Tone = require('tone'); +const Tone = require('tone'); /** * A pitch change effect, which changes the playback rate of the sound in order @@ -71,7 +71,7 @@ PitchEffect.prototype.updatePlayer = function (player) { PitchEffect.prototype.updatePlayers = function (players) { if (!players) return; - for (var md5 in players) { + for (const md5 in players) { if (players.hasOwnProperty(md5)) { this.updatePlayer(players[md5]); } @@ -79,4 +79,3 @@ PitchEffect.prototype.updatePlayers = function (players) { }; module.exports = PitchEffect; - diff --git a/src/effects/ReverbEffect.js b/src/effects/ReverbEffect.js index 2ad393a..9f8d301 100644 --- a/src/effects/ReverbEffect.js +++ b/src/effects/ReverbEffect.js @@ -1,4 +1,4 @@ -var Tone = require('tone'); +const Tone = require('tone'); /** * A reverb effect, simulating reverberation in a room @@ -50,4 +50,3 @@ ReverbEffect.prototype.clamp = function (input, min, max) { }; module.exports = ReverbEffect; - diff --git a/src/effects/RoboticEffect.js b/src/effects/RoboticEffect.js index d2f9a41..9fb8be2 100644 --- a/src/effects/RoboticEffect.js +++ b/src/effects/RoboticEffect.js @@ -1,5 +1,4 @@ - -var Tone = require('tone'); +const Tone = require('tone'); /** * A "robotic" effect that adds a low-pitched buzzing to the sound, reminiscent of the @@ -17,7 +16,7 @@ function RoboticEffect () { this.value = 0; - var time = this._delayTimeForValue(100); + const time = this._delayTimeForValue(100); this.feedbackCombFilter = new Tone.FeedbackCombFilter(time, 0.9); this.effectSend.chain(this.feedbackCombFilter, this.effectReturn); @@ -40,8 +39,8 @@ RoboticEffect.prototype.set = function (val) { } // set delay time using the value - var time = this._delayTimeForValue(this.value); - this.feedbackCombFilter.delayTime.rampTo(time, 1/60); + const time = this._delayTimeForValue(this.value); + this.feedbackCombFilter.delayTime.rampTo(time, 1 / 60); }; /** @@ -60,10 +59,9 @@ RoboticEffect.prototype.changeBy = function (val) { * @returns {number} a delay time in seconds */ RoboticEffect.prototype._delayTimeForValue = function (val) { - var midiNote = ((val - 100) / 10) + 36; - var freq = Tone.Frequency(midiNote, 'midi').eval(); + const midiNote = ((val - 100) / 10) + 36; + const freq = Tone.Frequency(midiNote, 'midi').eval(); return 1 / freq; }; module.exports = RoboticEffect; - diff --git a/src/effects/WobbleEffect.js b/src/effects/WobbleEffect.js index 13f5877..5e50b2d 100644 --- a/src/effects/WobbleEffect.js +++ b/src/effects/WobbleEffect.js @@ -1,4 +1,4 @@ -var Tone = require('tone'); +const Tone = require('tone'); /** * A wobble effect. In audio terms, it sounds like tremolo. @@ -36,7 +36,7 @@ WobbleEffect.prototype.set = function (val) { this.wet.value = this.value / 100; - this.wobbleLFO.frequency.rampTo(this.value / 10, 1/60); + this.wobbleLFO.frequency.rampTo(this.value / 10, 1 / 60); }; /** @@ -58,4 +58,3 @@ WobbleEffect.prototype.clamp = function (input, min, max) { }; module.exports = WobbleEffect; - diff --git a/src/index.js b/src/index.js index 67ea9ed..af6f814 100644 --- a/src/index.js +++ b/src/index.js @@ -1,18 +1,18 @@ -var log = require('./log'); -var Tone = require('tone'); +const log = require('./log'); +const Tone = require('tone'); -var PitchEffect = require('./effects/PitchEffect'); -var PanEffect = require('./effects/PanEffect'); +const PitchEffect = require('./effects/PitchEffect'); +const PanEffect = require('./effects/PanEffect'); -var RoboticEffect = require('./effects/RoboticEffect'); -var FuzzEffect = require('./effects/FuzzEffect'); -var EchoEffect = require('./effects/EchoEffect'); -var ReverbEffect = require('./effects/ReverbEffect'); +const RoboticEffect = require('./effects/RoboticEffect'); +const FuzzEffect = require('./effects/FuzzEffect'); +const EchoEffect = require('./effects/EchoEffect'); +const ReverbEffect = require('./effects/ReverbEffect'); -var SoundPlayer = require('./SoundPlayer'); -var ADPCMSoundDecoder = require('./ADPCMSoundDecoder'); -var InstrumentPlayer = require('./InstrumentPlayer'); -var DrumPlayer = require('./DrumPlayer'); +const SoundPlayer = require('./SoundPlayer'); +const ADPCMSoundDecoder = require('./ADPCMSoundDecoder'); +const InstrumentPlayer = require('./InstrumentPlayer'); +const DrumPlayer = require('./DrumPlayer'); /** * @fileOverview Scratch Audio is divided into a single AudioEngine, @@ -35,7 +35,7 @@ function AudioEngine () { // chain the global effects to the output this.input = new Tone.Gain(); - this.input.chain ( + this.input.chain( this.roboticEffect, this.fuzzEffect, this.echoEffect, this.reverbEffect, Tone.Master ); @@ -70,7 +70,7 @@ function AudioEngine () { */ AudioEngine.prototype.decodeSound = function (sound) { - var loaderPromise = null; + let loaderPromise = null; switch (sound.format) { case '': @@ -83,12 +83,12 @@ AudioEngine.prototype.decodeSound = function (sound) { return log.warn('unknown sound format', sound.format); } - var storedContext = this; + const storedContext = this; return loaderPromise.then( - function (decodedAudio) { + decodedAudio => { storedContext.audioBuffers[sound.md5] = new Tone.Buffer(decodedAudio); }, - function (error) { + error => { log.warn('audio data could not be decoded', error); } ); @@ -112,7 +112,7 @@ AudioEngine.prototype.loadSounds = function () { * @return {Promise} a Promise that resolves after the duration has elapsed */ AudioEngine.prototype.playNoteForBeatsWithInstAndVol = function (note, beats, inst, vol) { - var sec = this.beatsToSec(beats); + const sec = this.beatsToSec(beats); this.instrumentPlayer.playNoteForSecWithInstAndVol(note, sec, inst, vol); return this.waitForBeats(beats); }; @@ -132,9 +132,9 @@ AudioEngine.prototype.beatsToSec = function (beats) { * @return {Promise} a Promise that resolves after the duration has elapsed */ AudioEngine.prototype.waitForBeats = function (beats) { - var storedContext = this; - return new Promise(function (resolve) { - setTimeout(function () { + const storedContext = this; + return new Promise(resolve => { + setTimeout(() => { resolve(); }, storedContext.beatsToSec(beats) * 1000); }); @@ -153,7 +153,7 @@ AudioEngine.prototype.setTempo = function (value) { * @param {number} value - the number of bpm to change the tempo by */ AudioEngine.prototype.changeTempo = function (value) { - this.setTempo(this.currentTempo + value); + this.setTempo(this.currentTempo + value); }; /** @@ -170,9 +170,9 @@ AudioEngine.prototype.getLoudness = function () { } if (this.mic && this.mic.state == 'started') { return this.micMeter.value * 100; - } else { - return -1; } + return -1; + }; /** @@ -245,7 +245,7 @@ AudioPlayer.prototype.playSound = function (md5) { } // create a new soundplayer to play the sound - var player = new SoundPlayer(); + const player = new SoundPlayer(); player.setBuffer(this.audioEngine.audioBuffers[md5]); player.connect(this.effectsNode); this.pitchEffect.updatePlayer(player); @@ -255,7 +255,7 @@ AudioPlayer.prototype.playSound = function (md5) { this.activeSoundPlayers[md5] = player; // remove sounds that are not playing from the active sound players array - for (var id in this.activeSoundPlayers) { + for (const id in this.activeSoundPlayers) { if (this.activeSoundPlayers.hasOwnProperty(id)) { if (!this.activeSoundPlayers[id].isPlaying) { delete this.activeSoundPlayers[id]; @@ -283,7 +283,7 @@ AudioPlayer.prototype.playDrumForBeats = function (drum, beats) { */ AudioPlayer.prototype.stopAllSounds = function () { // stop all active sound players - for (var md5 in this.activeSoundPlayers) { + for (const md5 in this.activeSoundPlayers) { this.activeSoundPlayers[md5].stop(); } diff --git a/src/log.js b/src/log.js index 9be8fac..da6ed3c 100644 --- a/src/log.js +++ b/src/log.js @@ -1,4 +1,4 @@ -var minilog = require('minilog'); +const minilog = require('minilog'); minilog.enable(); module.exports = minilog('scratch-audioengine'); diff --git a/webpack.config.js b/webpack.config.js index 4ad8cfe..40ffb73 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -2,7 +2,7 @@ var path = require('path'); module.exports = { entry: { - 'dist': './src/index.js' + dist: './src/index.js' }, output: { path: __dirname,