# HG changeset patch # User Nicholas Jillings # Date 1460560976 -3600 # Node ID 7f44ba6533b47065cab9feaaaccdf05b595dfdf6 # Parent d87b8419df2813ad916003ebc1a612188221ecb9 preSilence and postSilence terms now working diff -r d87b8419df28 -r 7f44ba6533b4 core.js --- a/core.js Wed Apr 13 15:14:42 2016 +0100 +++ b/core.js Wed Apr 13 16:22:56 2016 +0100 @@ -492,6 +492,14 @@ return Math.pow(10,gain/20.0); } +function secondsToSamples(time,fs) { + return Math.round(time*fs); +} + +function samplesToSeconds(samples,fs) { + return samples / fs; +} + function randomString(length) { return Math.round((Math.pow(36, length + 1) - Math.random() * Math.pow(36, length))).toString(36).slice(1); } @@ -1238,6 +1246,35 @@ // The buffer is already ready, trigger bufferLoaded audioObject.bufferLoaded(this); } + }; + + this.copyBuffer = function(preSilenceTime,postSilenceTime) { + // Copies the entire bufferObj. + if (preSilenceTime == undefined) {preSilenceTime = 0;} + if (postSilenceTime == undefined) {postSilenceTime = 0;} + var copy = new this.constructor(); + copy.url = this.url; + var preSilenceSamples = secondsToSamples(preSilenceTime,this.buffer.sampleRate); + var postSilenceSamples = secondsToSamples(postSilenceTime,this.buffer.sampleRate); + var newLength = this.buffer.length+preSilenceSamples+postSilenceSamples; + copy.buffer = audioContext.createBuffer(this.buffer.numberOfChannels, newLength, this.buffer.sampleRate); + // Now we can use some efficient background copy schemes if we are just padding the end + if (preSilenceSamples == 0 && typeof copy.buffer.copyToChannel == "function") { + for (var c=0; c - + - +