UNPKG

mp3player

Version:

A mp3 player,get data by ajax and play by audiocontext or mediasource.it can download and reprocessing while playing

111 lines (105 loc) 3.8 kB
var Util = {}; //ArrayBuffer转16进制字符串 Util.arrayBufferToHexChar = function(arrayBuffer) { var bufferStr = ''; var uint8Array = new Uint8Array(arrayBuffer); for (var i = 0; i < uint8Array.length; i++) { if (uint8Array[i] <= 15) { bufferStr += '0' + uint8Array[i].toString(16); } else { bufferStr += uint8Array[i].toString(16); } bufferStr += ','; } return bufferStr.slice(0, bufferStr.length - 1); } /** * 根据同步标识返回相应数据长度 * @param {ArrayBuffer} arrayBuffer 音频源数据 * @param {String} frameSync 16进制同步字符串标识 * @param {Number} offset 正向查找时头部需要跳过的字节数 * @param {Boolean} reverse 查找方向 * @param {Number} frameSize 逆向查找时需要返回多少帧数据长度 * @return {Number} 数据长度 */ Util.getLengthByFrameSync = function(arrayBuffer, frameSync, offset, reverse, frameSize) { var i = 0; var count = 200; var bufferStr = ''; var uint8Array = new Uint8Array(arrayBuffer); offset = offset || 0; frameSize = frameSize || 1; if (!reverse) { while (true) { for (; i < count && i < uint8Array.length; i++) { if (uint8Array[i] <= 15) { bufferStr += '0' + uint8Array[i].toString(16); } else { bufferStr += uint8Array[i].toString(16); } bufferStr += ','; } bufferStr = bufferStr.toUpperCase(); if (bufferStr.indexOf(frameSync, offset * 3) != -1) { return bufferStr.indexOf(frameSync, offset * 3) / 3; } if (i >= uint8Array.length) { return 0; } count += 200; } } else { var flagReg = new RegExp(frameSync, 'g'); var match = null; i = uint8Array.length - 1; count = uint8Array.length - 200; while (true) { for (; i > count && i > 0; i--) { if (uint8Array[i] <= 15) { bufferStr = '0' + uint8Array[i].toString(16) + ',' + bufferStr; } else { bufferStr = uint8Array[i].toString(16) + ',' + bufferStr; } } bufferStr = bufferStr.toUpperCase(); match = bufferStr.match(flagReg); if (match && match.length >= frameSize) { //找出多少帧 return bufferStr.length / 3 - bufferStr.indexOf(frameSync) / 3; } if (i == 0) { return 0; } count -= 200; } } } Util.formatCountDown = function(seconds, noZero) { var date = new Date(); date.setDate(0); date.setHours(0); date.setMinutes(0); date.setSeconds(0); date.setSeconds(seconds); var data = { date: Math.floor(seconds / (60 * 60 * 24)), hours: date.getHours(), minutes: date.getMinutes(), seconds: date.getSeconds() } if (!noZero) { data.date = data.date >= 10 ? data.date : '0' + data.date; data.hours = data.hours >= 10 ? data.hours : '0' + data.hours; data.minutes = data.minutes >= 10 ? data.minutes : '0' + data.minutes; data.seconds = data.seconds >= 10 ? data.seconds : '0' + data.seconds; } return data; } Util.ifDebug = function(){ return location.href.indexOf('debug') > -1; } Util.log = function() { if (location.search.indexOf('audio-debug') > -1) { console.log.apply(window, arguments); } } export default Util;