Package com.sun.speech.freetts.util

Source Code of com.sun.speech.freetts.util.SegmentRelationUtils

/**
* Portions Copyright 2001 Sun Microsystems, Inc.
* Portions Copyright 1999-2001 Language Technologies Institute,
* Carnegie Mellon University.
* All Rights Reserved.  Use is subject to license terms.
*
* See the file "license.terms" for information on usage and
* redistribution of this file, and for a DISCLAIMER OF ALL
* WARRANTIES.
*/
package com.sun.speech.freetts.util;

import com.sun.speech.freetts.FeatureSet;
import com.sun.speech.freetts.Item;
import com.sun.speech.freetts.Relation;


/**
* Provides a set of utilities for the SegmentRelation. A
* SegmentRelation is a Relation, but has
* features specific to Segments.
*/
public class SegmentRelationUtils {

    /**
     * Returns the Item in the Segment Relation that corresponds to the given
     * time.
     *
     * @param segmentRelation the segmentRelation of interest
     * @param time the time
     */
    public static Item getItem(Relation segmentRelation, float time) {

  Item lastSegment = segmentRelation.getTail();
 
  // if given time is closer to the front than the end, search from
  // the front; otherwise, start search from end
  // this might not be the best strategy though

  float lastSegmentEndTime = SegmentRelationUtils.getSegmentEnd
      (lastSegment);
 
  if (time < 0 || lastSegmentEndTime < time) {
      return null;
  } else if (lastSegmentEndTime - time > time) {
      return SegmentRelationUtils.findFromFront(segmentRelation, time);
  } else {
      return SegmentRelationUtils.findFromEnd(segmentRelation, time);
  }
    }

    /**
     * Returns the value of the feature <code>end</code> of
     * the given Segment Item.
     *
     * @param segment the Segment Item
     *
     * @return the <code>end</code> feature of the Segment
     */
    public static float getSegmentEnd(Item segment) {
  FeatureSet segmentFeatureSet = segment.getFeatures();
  return segmentFeatureSet.getFloat("end");
    }
   
    /**
     * Starting from the front of the given Segment Relation, finds the Item
     * that corresponds to the given time.
     *
     * @param segmentRelation the Segment Relation to search
     * @param time the time of the Segment Item
     *
     * @return the Segment Item
     */
    public static Item findFromFront(Relation segmentRelation, float time) {
  Item item = segmentRelation.getHead();

  while (item != null &&
         time > SegmentRelationUtils.getSegmentEnd(item)) {
      item = item.getNext();
  }

  return item;
    }
   
    /**
     * Starting from the end of the given Segment Relation, go backwards
     * to find the Item that corresponds to the given time.
     *
     * @param segmentRelation the Segment Relation to search
     * @param time the time of the Segment Item
     *
     * @return the Segment Item
     */
    public static Item findFromEnd(Relation segmentRelation, float time) {
  Item item = segmentRelation.getTail();
   
  while (item != null &&
         SegmentRelationUtils.getSegmentEnd(item) > time) {
      item = item.getPrevious();
  }

  if (item != segmentRelation.getTail()) {
      item = item.getNext();
  }

  return item;
    }
}
TOP

Related Classes of com.sun.speech.freetts.util.SegmentRelationUtils

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.