123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111 |
- /**
- * @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);
|