code: function XAudioJSMediaStreamPushAudio(event) {
  	var index = 0;
  	var audioLengthRequested = event.data;
  	var samplesPerCallbackAll = XAudioJSSamplesPerCallback * XAudioJSChannelsAllocated;
  	var XAudioJSMediaStreamLengthAlias = audioLengthRequested % XAudioJSSamplesPerCallback;
  	audioLengthRequested = audioLengthRequested - (XAudioJSMediaStreamLengthAliasCounter - (XAudioJSMediaStreamLengthAliasCounter % XAudioJSSamplesPerCallback)) - XAudioJSMediaStreamLengthAlias + XAudioJSSamplesPerCallback;
  	XAudioJSMediaStreamLengthAliasCounter -= XAudioJSMediaStreamLengthAliasCounter - (XAudioJSMediaStreamLengthAliasCounter % XAudioJSSamplesPerCallback);
  	XAudioJSMediaStreamLengthAliasCounter += XAudioJSSamplesPerCallback - XAudioJSMediaStreamLengthAlias;
  	if (XAudioJSMediaStreamBuffer.length != samplesPerCallbackAll) {
  		XAudioJSMediaStreamBuffer = new Float32Array(samplesPerCallbackAll);
  	}
  	XAudioJSResampleRefill();
  	while (index < audioLengthRequested) {
  		var index2 = 0;
  		while (index2 < samplesPerCallbackAll && XAudioJSResampleBufferStart != XAudioJSResampleBufferEnd) {
  			XAudioJSMediaStreamBuffer[index2++] = XAudioJSResampledBuffer[XAudioJSResampleBufferStart++];
  			if (XAudioJSResampleBufferStart == XAudioJSResampleBufferSize) {
  				XAudioJSResampleBufferStart = 0;
  			}
  		}
  		XAudioJSMediaStreamWorker.postMessage([0, XAudioJSMediaStreamBuffer]);
  		index += XAudioJSSamplesPerCallback;
  	}
  }
docs: MediaStream API buffer push