📄 segmentrelationutils.java
字号:
/** * 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; }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -