Вход Регистрация
Файл: sngine-v2.8/Script/includes/assets/js/plugins/recorder/recorder.js
Строк: 537
<?php
(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.Recorder f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){
"use strict";

module.exports = require("./recorder").Recorder;

},{
"./recorder":2}],2:[function(require,module,exports){
'use strict';

var 
_createClass = (function () {
    function 
defineProperties(targetprops) {
        for (var 
0props.lengthi++) {
            var 
descriptor props[i];descriptor.enumerable descriptor.enumerable || false;descriptor.configurable true;if ("value" in descriptordescriptor.writable true;Object.defineProperty(targetdescriptor.keydescriptor);
        }
    }return function (
ConstructorprotoPropsstaticProps) {
        if (
protoPropsdefineProperties(Constructor.prototypeprotoProps);if (staticPropsdefineProperties(ConstructorstaticProps);return Constructor;
    };
})();

Object.defineProperty(exports"__esModule", {
    
valuetrue
});
exports.Recorder undefined;

var 
_inlineWorker = require('inline-worker');

var 
_inlineWorker2 _interopRequireDefault(_inlineWorker);

function 
_interopRequireDefault(obj) {
    return 
obj && obj.__esModule obj : { default: obj };
}

function 
_classCallCheck(instanceConstructor) {
    if (!(
instance instanceof Constructor)) {
        throw new 
TypeError("Cannot call a class as a function");
    }
}

var 
Recorder exports.Recorder = (function () {
    function 
Recorder(sourcecfg) {
        var 
_this this;

        
_classCallCheck(thisRecorder);

        
this.config = {
            
bufferLen4096,
            
numChannels2,
            
mimeType'audio/wav'
        
};
        
this.recording false;
        
this.callbacks = {
            
getBuffer: [],
            
exportWAV: []
        };

        
Object.assign(this.configcfg);
        
this.context source.context;
        
this.node = (this.context.createScriptProcessor || this.context.createJavaScriptNode).call(this.contextthis.config.bufferLenthis.config.numChannelsthis.config.numChannels);

        
this.node.onaudioprocess = function (e) {
            if (!
_this.recording) return;

            var 
buffer = [];
            for (var 
channel 0channel _this.config.numChannelschannel++) {
                
buffer.push(e.inputBuffer.getChannelData(channel));
            }
            
_this.worker.postMessage({
                
command'record',
                
bufferbuffer
            
});
        };

        
source.connect(this.node);
        
this.node.connect(this.context.destination); //this should not be necessary

        
var self = {};
        
this.worker = new _inlineWorker2.default(function () {
            var 
recLength 0,
                
recBuffers = [],
                
sampleRate undefined,
                
numChannels undefined;

            
self.onmessage = function (e) {
                switch (
e.data.command) {
                    case 
'init':
                        
init(e.data.config);
                        break;
                    case 
'record':
                        
record(e.data.buffer);
                        break;
                    case 
'exportWAV':
                        
exportWAV(e.data.type);
                        break;
                    case 
'getBuffer':
                        
getBuffer();
                        break;
                    case 
'clear':
                        
clear();
                        break;
                }
            };

            function 
init(config) {
                
sampleRate config.sampleRate;
                
numChannels config.numChannels;
                
initBuffers();
            }

            function 
record(inputBuffer) {
                for (var 
channel 0channel numChannelschannel++) {
                    
recBuffers[channel].push(inputBuffer[channel]);
                }
                
recLength += inputBuffer[0].length;
            }

            function 
exportWAV(type) {
                var 
buffers = [];
                for (var 
channel 0channel numChannelschannel++) {
                    
buffers.push(mergeBuffers(recBuffers[channel], recLength));
                }
                var 
interleaved undefined;
                if (
numChannels === 2) {
                    
interleaved interleave(buffers[0], buffers[1]);
                } else {
                    
interleaved buffers[0];
                }
                var 
dataview encodeWAV(interleaved);
                var 
audioBlob = new Blob([dataview], { typetype });

                
self.postMessage({ command'exportWAV'dataaudioBlob });
            }

            function 
getBuffer() {
                var 
buffers = [];
                for (var 
channel 0channel numChannelschannel++) {
                    
buffers.push(mergeBuffers(recBuffers[channel], recLength));
                }
                
self.postMessage({ command'getBuffer'databuffers });
            }

            function 
clear() {
                
recLength 0;
                
recBuffers = [];
                
initBuffers();
            }

            function 
initBuffers() {
                for (var 
channel 0channel numChannelschannel++) {
                    
recBuffers[channel] = [];
                }
            }

            function 
mergeBuffers(recBuffersrecLength) {
                var 
result = new Float32Array(recLength);
                var 
offset 0;
                for (var 
0recBuffers.lengthi++) {
                    
result.set(recBuffers[i], offset);
                    
offset += recBuffers[i].length;
                }
                return 
result;
            }

            function 
interleave(inputLinputR) {
                var 
length inputL.length inputR.length;
                var 
result = new Float32Array(length);

                var 
index 0,
                    
inputIndex 0;

                while (
index length) {
                    
result[index++] = inputL[inputIndex];
                    
result[index++] = inputR[inputIndex];
                    
inputIndex++;
                }
                return 
result;
            }

            function 
floatTo16BitPCM(outputoffsetinput) {
                for (var 
0input.lengthi++, offset += 2) {
                    var 
Math.max(-1Math.min(1input[i]));
                    
output.setInt16(offset0x8000 0x7FFFtrue);
                }
            }

            function 
writeString(viewoffsetstring) {
                for (var 
0string.lengthi++) {
                    
view.setUint8(offset istring.charCodeAt(i));
                }
            }

            function 
encodeWAV(samples) {
                var 
buffer = new ArrayBuffer(44 samples.length 2);
                var 
view = new DataView(buffer);

                
/* RIFF identifier */
                
writeString(view0'RIFF');
                
/* RIFF chunk length */
                
view.setUint32(436 samples.length 2true);
                
/* RIFF type */
                
writeString(view8'WAVE');
                
/* format chunk identifier */
                
writeString(view12'fmt ');
                
/* format chunk length */
                
view.setUint32(1616true);
                
/* sample format (raw) */
                
view.setUint16(201true);
                
/* channel count */
                
view.setUint16(22numChannelstrue);
                
/* sample rate */
                
view.setUint32(24sampleRatetrue);
                
/* byte rate (sample rate * block align) */
                
view.setUint32(28sampleRate 4true);
                
/* block align (channel count * bytes per sample) */
                
view.setUint16(32numChannels 2true);
                
/* bits per sample */
                
view.setUint16(3416true);
                
/* data chunk identifier */
                
writeString(view36'data');
                
/* data chunk length */
                
view.setUint32(40samples.length 2true);

                
floatTo16BitPCM(view44samples);

                return 
view;
            }
        }, 
self);

        
this.worker.postMessage({
            
command'init',
            
config: {
                
sampleRatethis.context.sampleRate,
                
numChannelsthis.config.numChannels
            
}
        });

        
this.worker.onmessage = function (e) {
            var 
cb _this.callbacks[e.data.command].pop();
            if (
typeof cb == 'function') {
                
cb(e.data.data);
            }
        };
    }

    
_createClass(Recorder, [{
        
key'record',
        
value: function record() {
            
this.recording true;
        }
    }, {
        
key'stop',
        
value: function stop() {
            
this.recording false;
        }
    }, {
        
key'clear',
        
value: function clear() {
            
this.worker.postMessage({ command'clear' });
        }
    }, {
        
key'getBuffer',
        
value: function getBuffer(cb) {
            
cb cb || this.config.callback;
            if (!
cb) throw new Error('Callback not set');

            
this.callbacks.getBuffer.push(cb);

            
this.worker.postMessage({ command'getBuffer' });
        }
    }, {
        
key'exportWAV',
        
value: function exportWAV(cbmimeType) {
            
mimeType mimeType || this.config.mimeType;
            
cb cb || this.config.callback;
            if (!
cb) throw new Error('Callback not set');

            
this.callbacks.exportWAV.push(cb);

            
this.worker.postMessage({
                
command'exportWAV',
                
typemimeType
            
});
        }
    }], [{
        
key'forceDownload',
        
value: function forceDownload(blobfilename) {
            var 
url = (window.URL || window.webkitURL).createObjectURL(blob);
            var 
link window.document.createElement('a');
            
link.href url;
            
link.download filename || 'output.wav';
            var 
click document.createEvent("Event");
            
click.initEvent("click"truetrue);
            
link.dispatchEvent(click);
        }
    }]);

    return 
Recorder;
})();

exports.default = Recorder;

},{
"inline-worker":3}],3:[function(require,module,exports){
"use strict";

module.exports = require("./inline-worker");
},{
"./inline-worker":4}],4:[function(require,module,exports){
(function (global){
"use strict";

var 
_createClass = (function () { function defineProperties(targetprops) { for (var key in props) { var prop props[key]; prop.configurable true; if (prop.valueprop.writable true; } Object.defineProperties(targetprops); } return function (ConstructorprotoPropsstaticProps) { if (protoPropsdefineProperties(Constructor.prototypeprotoProps); if (staticPropsdefineProperties(ConstructorstaticProps); return Constructor; }; })();

var 
_classCallCheck = function (instanceConstructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } };

var 
WORKER_ENABLED = !!(global === global.window && global.URL && global.Blob && global.Worker);

var 
InlineWorker = (function () {
  function 
InlineWorker(funcself) {
    var 
_this this;

    
_classCallCheck(thisInlineWorker);

    if (
WORKER_ENABLED) {
      var 
functionBody func.toString().trim().match(/^functions*w*s*([ws,]*)s*{([wW]*?)}$/)[1];
      var 
url = global.URL.createObjectURL(new global.Blob([functionBody], { type"text/javascript" }));

      return new global.
Worker(url);
    }

    
this.self self;
    
this.self.postMessage = function (data) {
      
setTimeout(function () {
        
_this.onmessage({ datadata });
      }, 
0);
    };

    
setTimeout(function () {
      
func.call(self);
    }, 
0);
  }

  
_createClass(InlineWorker, {
    
postMessage: {
      
value: function postMessage(data) {
        var 
_this this;

        
setTimeout(function () {
          
_this.self.onmessage({ datadata });
        }, 
0);
      }
    }
  });

  return 
InlineWorker;
})();

module.exports InlineWorker;
}).
call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" self typeof window !== "undefined" window : {})
},{}]},{},[
1])(1)
});
?>
Онлайн: 1
Реклама