⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 parameterstombrolaconverter.java

📁 这是java 开发的的免费语音播放插件,很值得学习参考!!!!!!!!!!!!111
💻 JAVA
字号:
/** * Copyright 2002 DFKI GmbH. * 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 de.dfki.lt.freetts.mbrola;import com.sun.speech.freetts.UtteranceProcessor;import com.sun.speech.freetts.ProcessException;import com.sun.speech.freetts.Utterance;import com.sun.speech.freetts.Relation;import com.sun.speech.freetts.Item;import java.io.*;/** * Utterance processor converting phoneme timing and f0-time targets * into MBROLA format. */public class ParametersToMbrolaConverter implements UtteranceProcessor {    /**     * Convert phoneme timing and f0-time targets     * into MBROLA format. The results are saved in the Segment relations,     * as features <code>"mbr_dur"</code> (int-valued) and     * <code>"mbr_targets"</code> (String-valued). MBROLA-converted targets     * are saved in the Segment relation because in MBROLA input, targets     * are represented as properties of the segments during which they occur.     *     * @param  utterance  the utterance to process     *     * @throws ProcessException if an error occurs while     *         processing of the utterance     */    public void processUtterance(Utterance utterance) throws ProcessException {	Relation segmentRelation = utterance.getRelation(Relation.SEGMENT);        Relation targetRelation = utterance.getRelation(Relation.TARGET);        Item segment = segmentRelation.getHead();        Item target = null;	if (targetRelation != null) target = targetRelation.getHead();        float prevEnd = 0f;        while (segment != null) {            String name = segment.getFeatures().getString("name");            // Accumulated duration of all segments in the utterance,            // in seconds:            float end = segment.getFeatures().getFloat("end");            // Individual duration of segment, in milliseconds:            int dur = (int) ((end - prevEnd) * 1000);            StringBuffer targetStringBuffer = new StringBuffer();            while (target != null &&                   target.getFeatures().getFloat("pos") <= end) {                float pos = target.getFeatures().getFloat("pos");                // time axis as percentage of segment duration:                int percentage = ((int) ((pos - prevEnd) * 1000)) * 100 / dur;                // f0 as an integer:                int f0 = (int) target.getFeatures().getFloat("f0");                targetStringBuffer.append(" ");                targetStringBuffer.append(percentage);                targetStringBuffer.append(" ");                targetStringBuffer.append(f0);                target = target.getNext();            }            // System.err.println(name + " " + dur + targetStringBuffer);            segment.getFeatures().setInt("mbr_dur", dur);            segment.getFeatures().setString("mbr_targets",                                            targetStringBuffer.toString().trim());            prevEnd = end;            segment = segment.getNext();        }    }    public String toString() {        return "ParametersToMbrolaConverter";    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -