summaryrefslogtreecommitdiff
path: root/static/src/assets/trading-in-the-rain/MIDI.js/inc/shim/WebAudioAPI.js
diff options
context:
space:
mode:
authorBrian Picciano <mediocregopher@gmail.com>2021-07-31 11:35:39 -0600
committerBrian Picciano <mediocregopher@gmail.com>2021-07-31 11:35:39 -0600
commitf1998c321a4eec6d75b58d84aa8610971bf21979 (patch)
treea90783eb296cc50e1c48433f241624f26b99be27 /static/src/assets/trading-in-the-rain/MIDI.js/inc/shim/WebAudioAPI.js
parent03a35dcc38b055f15df160bd300969e3b703d4b1 (diff)
move static files into static sub-dir, refactor nix a bit
Diffstat (limited to 'static/src/assets/trading-in-the-rain/MIDI.js/inc/shim/WebAudioAPI.js')
-rw-r--r--static/src/assets/trading-in-the-rain/MIDI.js/inc/shim/WebAudioAPI.js111
1 files changed, 111 insertions, 0 deletions
diff --git a/static/src/assets/trading-in-the-rain/MIDI.js/inc/shim/WebAudioAPI.js b/static/src/assets/trading-in-the-rain/MIDI.js/inc/shim/WebAudioAPI.js
new file mode 100644
index 0000000..17e9eb9
--- /dev/null
+++ b/static/src/assets/trading-in-the-rain/MIDI.js/inc/shim/WebAudioAPI.js
@@ -0,0 +1,111 @@
+/**
+ * @license -------------------------------------------------------------------
+ * module: WebAudioShim - Fix naming issues for WebAudioAPI supports
+ * src: https://github.com/Dinahmoe/webaudioshim
+ * author: Dinahmoe AB
+ * -------------------------------------------------------------------
+ * Copyright (c) 2012 DinahMoe AB
+ *
+ * Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation
+ * files (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use,
+ * copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following
+ * conditions:
+ *
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+ * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+ * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+window.AudioContext = window.AudioContext || window.webkitAudioContext || null;
+window.OfflineAudioContext = window.OfflineAudioContext || window.webkitOfflineAudioContext || null;
+
+(function (Context) {
+ var isFunction = function (f) {
+ return Object.prototype.toString.call(f) === "[object Function]" ||
+ Object.prototype.toString.call(f) === "[object AudioContextConstructor]";
+ };
+ var contextMethods = [
+ ["createGainNode", "createGain"],
+ ["createDelayNode", "createDelay"],
+ ["createJavaScriptNode", "createScriptProcessor"]
+ ];
+ ///
+ var proto;
+ var instance;
+ var sourceProto;
+ ///
+ if (!isFunction(Context)) {
+ return;
+ }
+ instance = new Context();
+ if (!instance.destination || !instance.sampleRate) {
+ return;
+ }
+ proto = Context.prototype;
+ sourceProto = Object.getPrototypeOf(instance.createBufferSource());
+
+ if (!isFunction(sourceProto.start)) {
+ if (isFunction(sourceProto.noteOn)) {
+ sourceProto.start = function (when, offset, duration) {
+ switch (arguments.length) {
+ case 0:
+ throw new Error("Not enough arguments.");
+ case 1:
+ this.noteOn(when);
+ break;
+ case 2:
+ if (this.buffer) {
+ this.noteGrainOn(when, offset, this.buffer.duration - offset);
+ } else {
+ throw new Error("Missing AudioBuffer");
+ }
+ break;
+ case 3:
+ this.noteGrainOn(when, offset, duration);
+ }
+ };
+ }
+ }
+
+ if (!isFunction(sourceProto.noteOn)) {
+ sourceProto.noteOn = sourceProto.start;
+ }
+
+ if (!isFunction(sourceProto.noteGrainOn)) {
+ sourceProto.noteGrainOn = sourceProto.start;
+ }
+
+ if (!isFunction(sourceProto.stop)) {
+ sourceProto.stop = sourceProto.noteOff;
+ }
+
+ if (!isFunction(sourceProto.noteOff)) {
+ sourceProto.noteOff = sourceProto.stop;
+ }
+
+ contextMethods.forEach(function (names) {
+ var name1;
+ var name2;
+ while (names.length) {
+ name1 = names.pop();
+ if (isFunction(this[name1])) {
+ this[names.pop()] = this[name1];
+ } else {
+ name2 = names.pop();
+ this[name1] = this[name2];
+ }
+ }
+ }, proto);
+})(window.AudioContext); \ No newline at end of file