UNPKG

sono

Version:

A simple yet powerful JavaScript library for working with Web Audio

154 lines (131 loc) 4.08 kB
'use strict'; exports.__esModule = true; var _typeof2 = require('babel-runtime/helpers/typeof'); var _typeof3 = _interopRequireDefault(_typeof2); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var extensions = []; var canPlay = {}; /* * Initial tests */ var tests = [{ ext: 'ogg', type: 'audio/ogg; codecs="vorbis"' }, { ext: 'mp3', type: 'audio/mpeg;' }, { ext: 'opus', type: 'audio/ogg; codecs="opus"' }, { ext: 'wav', type: 'audio/wav; codecs="1"' }, { ext: 'm4a', type: 'audio/x-m4a;' }, { ext: 'm4a', type: 'audio/aac;' }]; var el = document.createElement('audio'); if (el) { tests.forEach(function (test) { var canPlayType = !!el.canPlayType(test.type); if (canPlayType && extensions.indexOf(test.ext) === -1) { extensions.push(test.ext); } canPlay[test.ext] = canPlayType; }); el = null; } /* * find a supported file */ function getFileExtension(url) { if (typeof url !== 'string') { return ''; } // from DataURL if (url.slice(0, 5) === 'data:') { var match = url.match(/data:audio\/(ogg|mp3|opus|wav|m4a)/i); if (match && match.length > 1) { return match[1].toLowerCase(); } } // from Standard URL url = url.split('?')[0]; url = url.slice(url.lastIndexOf('/') + 1); var a = url.split('.'); if (a.length === 1 || a[0] === '' && a.length === 2) { return ''; } return a.pop().toLowerCase(); } function getSupportedFile(fileNames) { var name = void 0; if (Array.isArray(fileNames)) { // if array get the first one that works for (var i = 0; i < fileNames.length; i++) { name = fileNames[i]; var ext = getFileExtension(name); if (extensions.indexOf(ext) > -1) { break; } } } else if ((typeof fileNames === 'undefined' ? 'undefined' : (0, _typeof3.default)(fileNames)) === 'object') { // if not array and is object Object.keys(fileNames).some(function (key) { name = fileNames[key]; var ext = getFileExtension(name); return extensions.indexOf(ext) > -1; }); } // if string just return return name || fileNames; } /* * infer file types */ function isAudioBuffer(data) { return !!(data && window.AudioBuffer && data instanceof window.AudioBuffer); } function isArrayBuffer(data) { return !!(data && window.ArrayBuffer && data instanceof window.ArrayBuffer); } function isMediaElement(data) { return !!(data && window.HTMLMediaElement && data instanceof window.HTMLMediaElement); } function isMediaStream(data) { return !!(data && typeof data.getAudioTracks === 'function' && data.getAudioTracks().length && window.MediaStreamTrack && data.getAudioTracks()[0] instanceof window.MediaStreamTrack); } function isOscillatorType(data) { return !!(data && typeof data === 'string' && (data === 'sine' || data === 'square' || data === 'sawtooth' || data === 'triangle')); } function isURL(data) { return !!(data && typeof data === 'string' && (data.indexOf('.') > -1 || data.slice(0, 5) === 'data:')); } function containsURL(config) { if (!config || isMediaElement(config)) { return false; } // string, array or object with src/url/data property that is string, array or arraybuffer var src = getSrc(config); return isURL(src) || isArrayBuffer(src) || Array.isArray(src) && isURL(src[0]); } function getSrc(config) { return config.src || config.url || config.data || config; } exports.default = { canPlay: canPlay, containsURL: containsURL, extensions: extensions, getFileExtension: getFileExtension, getSrc: getSrc, getSupportedFile: getSupportedFile, isAudioBuffer: isAudioBuffer, isArrayBuffer: isArrayBuffer, isMediaElement: isMediaElement, isMediaStream: isMediaStream, isOscillatorType: isOscillatorType, isURL: isURL };