src/main/java/net/sourceforge/jaad/aac/filterbank/FilterBank.java
public void processLTP(WindowSequence windowSequence, int windowShape, int windowShapePrev, float[] _in, float[] out) {
		int i;

		switch(windowSequence) {
			case ONLY_LONG_SEQUENCE:
				for(i = length-1; i>=0; i--) {
					buf[i] = _in[i]*LONG_WINDOWS[windowShapePrev][i];
					buf[i+length] = _in[i+length]*LONG_WINDOWS[windowShape][length-1-i];
				}
				break;

			case LONG_START_SEQUENCE:
				for(i = 0; i<length; i++) {
					buf[i] = _in[i]*LONG_WINDOWS[windowShapePrev][i];
				}
				for(i = 0; i<mid; i++) {
					buf[i+length] = _in[i+length];
				}
				for(i = 0; i<shortLen; i++) {
					buf[i+length+mid] = _in[i+length+mid]*SHORT_WINDOWS[windowShape][shortLen-1-i];
				}
				for(i = 0; i<mid; i++) {
					buf[i+length+mid+shortLen] = 0;
				}
				break;

			case LONG_STOP_SEQUENCE:
				for(i = 0; i<mid; i++) {
					buf[i] = 0;
				}
				for(i = 0; i<shortLen; i++) {
					buf[i+mid] = _in[i+mid]*SHORT_WINDOWS[windowShapePrev][i];
				}
				for(i = 0; i<mid; i++) {
					buf[i+mid+shortLen] = _in[i+mid+shortLen];
				}
				for(i = 0; i<length; i++) {
					buf[i+length] = _in[i+length]*LONG_WINDOWS[windowShape][length-1-i];
				}
				break;
		}
		mdctLong.processForward(buf, out);
	}
public void processLTP(WindowSequence windowSequence, int windowShape, int windowShapePrev, float[] _in, float[] out) {
		int i;

		switch(windowSequence) {
			case ONLY_LONG_SEQUENCE:
				for(i = length-1; i>=0; i--) {
					buf[i] = _in[i]*LONG_WINDOWS[windowShapePrev][i];
					buf[i+length] = _in[i+length]*LONG_WINDOWS[windowShape][length-1-i];
				}
				break;

			case LONG_START_SEQUENCE:
				for(i = 0; i<length; i++) {
					buf[i] = _in[i]*LONG_WINDOWS[windowShapePrev][i];
				}
				for(i = 0; i<mid; i++) {
					buf[i+length] = _in[i+length];
				}
				for(i = 0; i<shortLen; i++) {
					buf[i+length+mid] = _in[i+length+mid]*SHORT_WINDOWS[windowShape][shortLen-1-i];
				}
				for(i = 0; i<mid; i++) {
					buf[i+length+mid+shortLen] = 0;
				}
				break;

			case LONG_STOP_SEQUENCE:
				for(i = 0; i<mid; i++) {
					buf[i] = 0;
				}
				for(i = 0; i<shortLen; i++) {
					buf[i+mid] = _in[i+mid]*SHORT_WINDOWS[windowShapePrev][i];
				}
				for(i = 0; i<mid; i++) {
					buf[i+mid+shortLen] = _in[i+mid+shortLen];
				}
				for(i = 0; i<length; i++) {
					buf[i+length] = _in[i+length]*LONG_WINDOWS[windowShape][length-1-i];
				}
				break;
		}
		mdctLong.processForward(buf, out);
	}
public void processLTP ( WindowSequence windowSequence , int windowShape , int windowShapePrev , float [ ] _in , float [ ] out ) { int i ; switch ( windowSequence ) { case ONLY_LONG_SEQUENCE : for ( i = length - 1 ; i >= 0 ; i -- ) { buf [ i ] = _in [ i ] * LONG_WINDOWS [ windowShapePrev ] [ i ] ; buf [ i + length ] = _in [ i + length ] * LONG_WINDOWS [ windowShape ] [ length - 1 - i ] ; } break ; case LONG_START_SEQUENCE : for ( i = 0 ; i < length ; i ++ ) { buf [ i ] = _in [ i ] * LONG_WINDOWS [ windowShapePrev ] [ i ] ; } for ( i = 0 ; i < mid ; i ++ ) { buf [ i + length ] = _in [ i + length ] ; } for ( i = 0 ; i < shortLen ; i ++ ) { buf [ i + length + mid ] = _in [ i + length + mid ] * SHORT_WINDOWS [ windowShape ] [ shortLen - 1 - i ] ; } for ( i = 0 ; i < mid ; i ++ ) { buf [ i + length + mid + shortLen ] = 0 ; } break ; case LONG_STOP_SEQUENCE : for ( i = 0 ; i < mid ; i ++ ) { buf [ i ] = 0 ; } for ( i = 0 ; i < shortLen ; i ++ ) { buf [ i + mid ] = _in [ i + mid ] * SHORT_WINDOWS [ windowShapePrev ] [ i ] ; } for ( i = 0 ; i < mid ; i ++ ) { buf [ i + mid + shortLen ] = _in [ i + mid + shortLen ] ; } for ( i = 0 ; i < length ; i ++ ) { buf [ i + length ] = _in [ i + length ] * LONG_WINDOWS [ windowShape ] [ length - 1 - i ] ; } break ; } mdctLong . processForward ( buf , out ) ; }
only for LTP: no overlapping, no short blocks
only for LTP : no overlapping no short blocks