; ++j) {
			var cell = pos >> 3, shift = pos & 7 ^ 7;
			var value = getLowPassFilteredValue(lowPassAlpha, buffer[cell] >> shift & 1);
			pos = ( pos + step/quality ) % bufflen;
		}
		audioBuffer[i] = value;
	}

	audioData.push(new AudioBuffer(audioBuffer, samples));
	
	return { pos };
}

const silentPattern = new Array(64).fill(0);

function AudioControl(){
	this.state = { pos: 0 };
	this.reset = true;
	this.buffer = [];

	this.timer = 0;
	this.pitch = PITCH_BIAS;

	this.refresh = _ => {
		if (this.reset) 