| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209 |
- Recorder = {
- recorder : null,
- recorderOriginalWidth : 0,
- recorderOriginalHeight : 0,
- uploadFormId : null,
- uploadFieldName : null,
- isReady : false,
- connect : function(name, attempts) {
- if (navigator.appName.indexOf("Microsoft") != -1) {
- Recorder.recorder = window[name];
- } else {
- Recorder.recorder = document[name];
- }
- if (attempts >= 40) {
- return;
- }
- // flash app needs time to load and initialize
- if (Recorder.recorder && Recorder.recorder.init) {
- Recorder.recorderOriginalWidth = Recorder.recorder.width;
- Recorder.recorderOriginalHeight = Recorder.recorder.height;
- if (Recorder.uploadFormId && $) {
- var frm = $(Recorder.uploadFormId);
- Recorder.recorder.init(frm.attr('action').toString(), Recorder.uploadFieldName, frm.serializeArray());
- }
- return;
- }
- setTimeout(function() {
- Recorder.connect(name, attempts + 1);
- }, 100);
- },
- playBack : function(name) {
- // TODO: Rename to `playback`
- Recorder.recorder.playBack(name);
- },
- pausePlayBack : function(name) {
- // TODO: Rename to `pausePlayback`
- Recorder.recorder.pausePlayBack(name);
- },
- playBackFrom : function(name, time) {
- // TODO: Rename to `playbackFrom`
- Recorder.recorder.playBackFrom(name, time);
- },
- record : function(name, filename) {
- Recorder.recorder.record(name, filename);
- },
- stopRecording : function() {
- Recorder.recorder.stopRecording();
- },
- stopPlayBack : function() {
- // TODO: Rename to `stopPlayback`
- Recorder.recorder.stopPlayBack();
- },
- observeLevel : function() {
- Recorder.recorder.observeLevel();
- },
- stopObservingLevel : function() {
- Recorder.recorder.stopObservingLevel();
- },
- observeSamples : function() {
- Recorder.recorder.observeSamples();
- },
- stopObservingSamples : function() {
- Recorder.recorder.stopObservingSamples();
- },
- resize : function(width, height) {
- Recorder.recorder.width = width + "px";
- Recorder.recorder.height = height + "px";
- },
- defaultSize : function() {
- Recorder.resize(Recorder.recorderOriginalWidth, Recorder.recorderOriginalHeight);
- },
- show : function() {
- Recorder.recorder.show();
- },
- hide : function() {
- Recorder.recorder.hide();
- },
- duration : function(name) {
- // TODO: rename to `getDuration`
- return Recorder.recorder.duration(name || Recorder.uploadFieldName);
- },
- getBase64 : function(name) {
- var data = Recorder.recorder.getBase64(name);
- return 'data:' + 'audio/wav' + ';base64,' + data;
- },
- getBlob : function(name) {
- var base64Data = Recorder.getBase64(name).split(',')[1];
- return base64toBlob(base64Data, 'audio/wav');
- },
- getCurrentTime : function(name) {
- return Recorder.recorder.getCurrentTime(name);
- },
- isMicrophoneAccessible : function() {
- return Recorder.recorder.isMicrophoneAccessible();
- },
- updateForm : function() {
- var frm = $(Recorder.uploadFormId);
- Recorder.recorder.update(frm.serializeArray());
- },
- showPermissionWindow : function(options) {
- Recorder.resize(240, 160);
- // need to wait until app is resized before displaying permissions
- // screen
- var permissionCommand = function() {
- if (options && options.permanent) {
- Recorder.recorder.permitPermanently();
- } else {
- Recorder.recorder.permit();
- }
- };
- setTimeout(permissionCommand, 1);
- },
- configure : function(rate, gain, silenceLevel, silenceTimeout) {
- rate = parseInt(rate || 22);
- gain = parseInt(gain || 100);
- silenceLevel = parseInt(silenceLevel || 0);
- silenceTimeout = parseInt(silenceTimeout || 4000);
- switch (rate) {
- case 44:
- case 22:
- case 11:
- case 8:
- case 5:
- break;
- default:
- throw ("invalid rate " + rate);
- }
- if (gain < 0 || gain > 100) {
- throw ("invalid gain " + gain);
- }
- if (silenceLevel < 0 || silenceLevel > 100) {
- throw ("invalid silenceLevel " + silenceLevel);
- }
- if (silenceTimeout < -1) {
- throw ("invalid silenceTimeout " + silenceTimeout);
- }
- Recorder.recorder.configure(rate, gain, silenceLevel, silenceTimeout);
- },
- setUseEchoSuppression : function(val) {
- if (typeof (val) != 'boolean') {
- throw ("invalid value for setting echo suppression, val: " + val);
- }
- Recorder.recorder.setUseEchoSuppression(val);
- },
- setLoopBack : function(val) {
- if (typeof (val) != 'boolean') {
- throw ("invalid value for setting loop back, val: " + val);
- }
- Recorder.recorder.setLoopBack(val);
- }
- };
- function base64toBlob(b64Data, contentType, sliceSize) {
- contentType = contentType || '';
- sliceSize = sliceSize || 512;
- var byteCharacters = atob(b64Data);
- var byteArrays = [];
- for (var offset = 0; offset < byteCharacters.length; offset += sliceSize) {
- var slice = byteCharacters.slice(offset, offset + sliceSize);
- var byteNumbers = new Array(slice.length);
- for (var i = 0; i < slice.length; i++) {
- byteNumbers[i] = slice.charCodeAt(i);
- }
- var byteArray = new Uint8Array(byteNumbers);
- byteArrays.push(byteArray);
- }
- return new Blob(byteArrays, {
- type : contentType
- });
- }
|