final float lf0 = 120;
float lf0 = utterance.getVoice().getPitch();
    public void processUtterance(Utterance utterance) throws ProcessException {	// precondition that must be satisfied	Relation targetRelation = utterance.getRelation(Relation.TARGET);	if (targetRelation == null) {	    throw new IllegalStateException		("DiphonePitchmarkGenerator: Target relation does not exist");	}	SampleInfo sampleInfo;	sampleInfo = (SampleInfo) utterance.getObject(SampleInfo.UTT_NAME);	if (sampleInfo == null) {	    throw new IllegalStateException		("DiphonePitchmarkGenerator: SampleInfo does not exist");	}		float pos, lpos = 0, f0, m = 0;	final float lf0 = 120;		double time = 0;	int pitchMarks = 0;  // how many pitch marks	LPCResult lpcResult;	IntLinkedList timesList = new IntLinkedList();		// first pass to count how many pitch marks will be required	for (Item targetItem = targetRelation.getHead();	     targetItem != null; targetItem = targetItem.getNext()) {	    FeatureSet featureSet = targetItem.getFeatures();	    pos = featureSet.getFloat("pos");	    f0 = featureSet.getFloat("f0");	    if (time == pos) {		continue;	    }	    m = (f0-lf0)/pos;	    for (; time < pos; pitchMarks++) {		time += 1/(lf0 + (time * m));		// save the time value in a list		timesList.add((int) (time * sampleInfo.getSampleRate()));	    }	}	lpcResult = new LPCResult();	// resize the number of frames to the number of pitchmarks	lpcResult.resizeFrames(pitchMarks);	pitchMarks = 0;	int[] targetTimes = lpcResult.getTimes();		// second pass puts the values in	timesList.resetIterator();	for (; pitchMarks < targetTimes.length; pitchMarks++) {	    targetTimes[pitchMarks] = timesList.nextInt();	}	utterance.setObject("target_lpcres", lpcResult);    }