{"version":3,"sources":["jsdelivr-header.js","/npm/soundbank-pitch-shift@1.0.3/index.js"],"names":[],"mappings":"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","file":"/npm/soundbank-pitch-shift@1.0.3/index.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/soundbank-pitch-shift@1.0.3/index.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","var createAudioNode = require('custom-audio-node')\n\nmodule.exports = function PitchShift(audioContext){\n  var instance = new Jungle(audioContext)\n  var input = audioContext.createGain()\n  var wet = audioContext.createGain()\n  var dry = audioContext.createGain()\n  var output = audioContext.createGain()\n\n  dry.gain.value = 0\n\n  input.connect(wet)\n  input.connect(dry)\n\n  wet.connect(instance.input)\n  instance.output.connect(output)\n\n  dry.connect(output)\n\n  var node = createAudioNode(input, output, {\n    dry: {\n      min: 0, \n      defaultValue: 0,\n      target: dry.gain\n    },\n    wet: {\n      min: 0, \n      defaultValue: 1,\n      target: wet.gain\n    }\n  })\n\n  instance.setPitchOffset(getMultiplier(12))\n\n  var transpose = 0\n  Object.defineProperty(node, 'transpose', {\n    set: function(value){\n      transpose = getMultiplier(value)\n      instance.setPitchOffset(transpose)\n    },\n    get: function(){\n      return transpose\n    }\n  })\n  return node\n}\n\nfunction getMultiplier(x){\n\n  // don't ask...\n  if (x<0){\n    return x/12\n  } else {\n    var a5 = 1.8149080040913423e-7\n    var a4 = -0.000019413043101157434\n    var a3 = 0.0009795096626987743\n    var a2 = -0.014147877819596033\n    var a1 = 0.23005591195033048\n    var a0 = 0.02278153473118749\n\n    var x1 = x\n    var x2 = x*x\n    var x3 = x*x*x\n    var x4 = x*x*x*x\n    var x5 = x*x*x*x*x\n\n    return a0 + x1*a1 + x2*a2 + x3*a3 + x4*a4 + x5*a5\n  }\n\n}\n\n// include https://github.com/cwilso/Audio-Input-Effects/blob/master/js/jungle.js\n\n// Copyright 2012, Google Inc.\n// All rights reserved.\n// \n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n// \n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//     * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n// \n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\nfunction createFadeBuffer(context, activeTime, fadeTime) {\n    var length1 = activeTime * context.sampleRate;\n    var length2 = (activeTime - 2*fadeTime) * context.sampleRate;\n    var length = length1 + length2;\n    var buffer = context.createBuffer(1, length, context.sampleRate);\n    var p = buffer.getChannelData(0);\n        \n    var fadeLength = fadeTime * context.sampleRate;\n\n    var fadeIndex1 = fadeLength;\n    var fadeIndex2 = length1 - fadeLength;\n    \n    // 1st part of cycle\n    for (var i = 0; i < length1; ++i) {\n        var value;\n        \n        if (i < fadeIndex1) {\n            value = Math.sqrt(i / fadeLength);\n        } else if (i >= fadeIndex2) {\n            value = Math.sqrt(1 - (i - fadeIndex2) / fadeLength);\n        } else {\n            value = 1;\n        }\n        \n        p[i] = value;\n    }\n\n    // 2nd part\n    for (var i = length1; i < length; ++i) {\n        p[i] = 0;\n    }\n    \n    \n    return buffer;\n}\n\nfunction createDelayTimeBuffer(context, activeTime, fadeTime, shiftUp) {\n    var length1 = activeTime * context.sampleRate;\n    var length2 = (activeTime - 2*fadeTime) * context.sampleRate;\n    var length = length1 + length2;\n    var buffer = context.createBuffer(1, length, context.sampleRate);\n    var p = buffer.getChannelData(0);\n    \n    // 1st part of cycle\n    for (var i = 0; i < length1; ++i) {\n        if (shiftUp)\n          // This line does shift-up transpose\n          p[i] = (length1-i)/length;\n        else\n          // This line does shift-down transpose\n          p[i] = i / length1;\n    }\n\n    // 2nd part\n    for (var i = length1; i < length; ++i) {\n        p[i] = 0;\n    }\n\n    return buffer;\n}\n\nvar delayTime = 0.100;\nvar fadeTime = 0.050;\nvar bufferTime = 0.100;\n\nfunction Jungle(context) {\n    this.context = context;\n    // Create nodes for the input and output of this \"module\".\n    var input = context.createGain();\n    var output = context.createGain();\n    this.input = input;\n    this.output = output;\n    \n    // Delay modulation.\n    var mod1 = context.createBufferSource();\n    var mod2 = context.createBufferSource();\n    var mod3 = context.createBufferSource();\n    var mod4 = context.createBufferSource();\n    this.shiftDownBuffer = createDelayTimeBuffer(context, bufferTime, fadeTime, false);\n    this.shiftUpBuffer = createDelayTimeBuffer(context, bufferTime, fadeTime, true);\n    mod1.buffer = this.shiftDownBuffer;\n    mod2.buffer = this.shiftDownBuffer;\n    mod3.buffer = this.shiftUpBuffer;\n    mod4.buffer = this.shiftUpBuffer;\n    mod1.loop = true;\n    mod2.loop = true;\n    mod3.loop = true;\n    mod4.loop = true;\n\n    // for switching between oct-up and oct-down\n    var mod1Gain = context.createGain();\n    var mod2Gain = context.createGain();\n    var mod3Gain = context.createGain();\n    mod3Gain.gain.value = 0;\n    var mod4Gain = context.createGain();\n    mod4Gain.gain.value = 0;\n\n    mod1.connect(mod1Gain);\n    mod2.connect(mod2Gain);\n    mod3.connect(mod3Gain);\n    mod4.connect(mod4Gain);\n\n    // Delay amount for changing pitch.\n    var modGain1 = context.createGain();\n    var modGain2 = context.createGain();\n\n    var delay1 = context.createDelay();\n    var delay2 = context.createDelay();\n    mod1Gain.connect(modGain1);\n    mod2Gain.connect(modGain2);\n    mod3Gain.connect(modGain1);\n    mod4Gain.connect(modGain2);\n    modGain1.connect(delay1.delayTime);\n    modGain2.connect(delay2.delayTime);\n\n    // Crossfading.\n    var fade1 = context.createBufferSource();\n    var fade2 = context.createBufferSource();\n    var fadeBuffer = createFadeBuffer(context, bufferTime, fadeTime);\n    fade1.buffer = fadeBuffer\n    fade2.buffer = fadeBuffer;\n    fade1.loop = true;\n    fade2.loop = true;\n\n    var mix1 = context.createGain();\n    var mix2 = context.createGain();\n    mix1.gain.value = 0;\n    mix2.gain.value = 0;\n\n    fade1.connect(mix1.gain);    \n    fade2.connect(mix2.gain);\n        \n    // Connect processing graph.\n    input.connect(delay1);\n    input.connect(delay2);    \n    delay1.connect(mix1);\n    delay2.connect(mix2);\n    mix1.connect(output);\n    mix2.connect(output);\n    \n    // Start\n    var t = context.currentTime + 0.050;\n    var t2 = t + bufferTime - fadeTime;\n    mod1.start(t);\n    mod2.start(t2);\n    mod3.start(t);\n    mod4.start(t2);\n    fade1.start(t);\n    fade2.start(t2);\n\n    this.mod1 = mod1;\n    this.mod2 = mod2;\n    this.mod1Gain = mod1Gain;\n    this.mod2Gain = mod2Gain;\n    this.mod3Gain = mod3Gain;\n    this.mod4Gain = mod4Gain;\n    this.modGain1 = modGain1;\n    this.modGain2 = modGain2;\n    this.fade1 = fade1;\n    this.fade2 = fade2;\n    this.mix1 = mix1;\n    this.mix2 = mix2;\n    this.delay1 = delay1;\n    this.delay2 = delay2;\n    \n    this.setDelay(delayTime);\n}\n\nJungle.prototype.setDelay = function(delayTime) {\n    this.modGain1.gain.setTargetAtTime(0.5*delayTime, 0, 0.010);\n    this.modGain2.gain.setTargetAtTime(0.5*delayTime, 0, 0.010);\n}\n\nJungle.prototype.setPitchOffset = function(mult) {\n  if (mult>0) { // pitch up\n    this.mod1Gain.gain.value = 0;\n    this.mod2Gain.gain.value = 0;\n    this.mod3Gain.gain.value = 1;\n    this.mod4Gain.gain.value = 1;\n  } else { // pitch down\n    this.mod1Gain.gain.value = 1;\n    this.mod2Gain.gain.value = 1;\n    this.mod3Gain.gain.value = 0;\n    this.mod4Gain.gain.value = 0;\n  }\n  this.setDelay(delayTime*Math.abs(mult));\n}"]}