@Override
		public void run() {
			int fillPerLoop = 256;
			for (int i=0; i<BUFFER_LENGTH; i+=fillPerLoop) {
				mInput.read(backupBuffer, i, fillPerLoop);
			}
			double[] temp = new double[BUFFER_LENGTH];
			for (int i=0; i<BUFFER_LENGTH; i++) {
				temp[i] = backupBuffer[i];
			}
			FastFourierTransformer fft = new FastFourierTransformer(DftNormalization.STANDARD);
			Complex[] transformed = fft.transform(temp, TransformType.FORWARD);
			
			for (int i=0; i<BUFFER_LENGTH; i++) {
				double energy = transformed[i].abs();
				if (energy < 20000 || i > 2000 || i < 30) {
					transformed[i] = new Complex(0);
				}
			}
			Complex[] inverted = fft.transform(transformed, TransformType.INVERSE);
			for (int i=0; i<BUFFER_LENGTH; i++) {
				backupBuffer[i] = (int) inverted[i].getReal();
			}
			
			backupReady = true;
			unblock();
		}