User:Brijsri/audiorecorderworker.js

From Wiktionary, the free dictionary
Jump to navigation Jump to search

Note: You may have to bypass your browser’s cache to see the changes. In addition, after saving a sitewide CSS file such as MediaWiki:Common.css, it will take 5-10 minutes before the changes take effect, even if you clear your cache.

  • Mozilla / Firefox / Safari: hold Shift while clicking Reload, or press either Ctrl-F5 or Ctrl-R (Command-R on a Macintosh);
  • Konqueror and Chrome: click Reload or press F5;
  • Opera: clear the cache in Tools → Preferences;
  • Internet Explorer: hold Ctrl while clicking Refresh, or press Ctrl-F5.

var recBuffers = [],
    outputSampleRate = 16000,
    inSampleRate;

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

function init(config){
    inSampleRate = config.sampleRate;
    outputBufferLength = config.outputBufferLength;
    outputSampleRate = config.outputSampleRate || outputSampleRate;
}

function record(inputBuffer){
    var isSilent = true;
    for (var i = 0 ; i < inputBuffer[0].length ; i++) {
	recBuffers.push((inputBuffer[0][i] + inputBuffer[1][i]) * 16383.0);
    }
    while(recBuffers.length * outputSampleRate / inSampleRate > outputBufferLength) {
	var result = new Int16Array(outputBufferLength);
	var bin = 0,
	num = 0,
	indexIn = 0,
	indexOut = 0;
	while(indexIn < outputBufferLength) {
	    bin = 0;
	    num = 0;
	    while(indexOut < Math.min(recBuffers.length, (indexIn + 1) * inSampleRate / outputSampleRate)) {
		bin += recBuffers[indexOut];
		num += 1;
		indexOut++;
	    }
	    result[indexIn] = bin / num;
	    if(isSilent && (result[indexIn] != 0)) isSilent = false;
	    indexIn++;
	}
	var output = {};
	output.command = 'newBuffer';
	output.data = result;
	if (isSilent) output.error = "silent";
	this.postMessage(output);
	recBuffers = recBuffers.slice(indexOut);
    }
}

function clear(){
  recBuffers = [];
}