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

📄 textsynthesizerqueueitem.java

📁 这是java 开发的的免费语音播放插件,很值得学习参考!!!!!!!!!!!!111
💻 JAVA
字号:
/** * Copyright 2001 Sun Microsystems, Inc. *  * 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.engine.synthesis.text;import javax.speech.Engine;import javax.speech.synthesis.Speakable;import javax.speech.synthesis.SpeakableEvent;import com.sun.speech.engine.synthesis.BaseSynthesizer;import com.sun.speech.engine.synthesis.BaseSynthesizerQueueItem;import java.net.URL;import java.io.IOException;import org.w3c.dom.Document;import org.w3c.dom.Node;import org.w3c.dom.Element;import org.w3c.dom.Text;/** * Represents an object on the speech output queue of a * <code>TextSynthesizer</code>. */public class TextSynthesizerQueueItem extends BaseSynthesizerQueueItem {    static public final String JSML = "jsml";    static public final String[] JSML_ATTRIBUTES = {        "lang", "mark"    };    static public final String DIV = "div";    static public final String[] DIV_ATTRIBUTES = {        "type", "mark"    };        static public final String VOICE = "voice";    static public final String[] VOICE_ATTRIBUTES = {        "voice", "gender", "age", "variant", "name", "mark"    };        static public final String SAYAS = "sayas";    static public final String[] SAYAS_ATTRIBUTES = {        "class", "mark"    };    static public final String PHONEME = "phoneme";    static public final String[] PHONEME_ATTRIBUTES = {        "original", "mark"    };    static public final String EMPHASIS = "emphasis";    static public final String[] EMPHASIS_ATTRIBUTES = {        "level", "mark"    };    static public final String BREAK = "break";    static public final String[] BREAK_ATTRIBUTES = {        "size", "time", "mark"    };    static public final String PROSODY = "prosody";    static public final String[] PROSODY_ATTRIBUTES = {        "rate", "volume", "pitch", "range", "mark"    };    static public final String MARKER = "marker";    static public final String[] MARKER_ATTRIBUTES = {        "mark"    };        static public final String ENGINE = "engine";    static public final String[] ENGINE_ATTRIBUTES = {        "name", "data", "mark"    };    static public final String[] ELEMENTS = {        JSML,        DIV,        VOICE,        SAYAS,        PHONEME,        EMPHASIS,        BREAK,        PROSODY,        MARKER,        ENGINE    };    static public final String[][] ELEMENT_ATTRIBUTES = {        JSML_ATTRIBUTES,        DIV_ATTRIBUTES,        VOICE_ATTRIBUTES,        SAYAS_ATTRIBUTES,        PHONEME_ATTRIBUTES,        EMPHASIS_ATTRIBUTES,        BREAK_ATTRIBUTES,        PROSODY_ATTRIBUTES,        MARKER_ATTRIBUTES,        ENGINE_ATTRIBUTES    };        /*     * Commands to be encoded in the text.     */    static public final String COMMAND_PREFIX = "/";    static public final String COMMAND_SUFFIX = "/";    static public final String DATA_PREFIX = "[";    static public final String DATA_SUFFIX = "]";    static public final String ELEMENT_START = "start";    static public final String ELEMENT_END = "end";        /**     * Class constructor.     */    public TextSynthesizerQueueItem() {        super();    }    /**     * Gets the type of this queue item.     *     * @return a <code>String</code> for debug purposes     */    public String getTypeString() {        if (isPlainText()) {            return "Plain-text String";        } else if (getSource() instanceof String) {            return "JSML from String";        } else if (getSource() instanceof Speakable) {            return "JSML from Speakable";        } else if (getSource() instanceof URL) {            return "JSML from URL";        } else {            return "Unknown Output";        }    }    /**     * Appends the text for this node to the given StringBuffer.     *     * @param n the node to traverse in depth-first order     * @param buf the buffer to append text to     */    protected void linearize(Node n, StringBuffer buf) {        StringBuffer endText = processNode(n, buf);        for (Node child = n.getFirstChild();             child != null;             child = child.getNextSibling()) {            linearize(child, buf);        }        if (endText != null) {            buf.append(endText);        }    }    /**     * Adds text for just this node, and returns any text that might     * be needed to undo the effects of this node after it is     * processed.     *     * @param n the node to traverse in depth-first order     * @param buf the buffer to append text to     *     * @return a <code>String</code> containing text to undo the     *   effects of the node     */    protected StringBuffer processNode(Node n, StringBuffer buf) {        StringBuffer endText = null;                int type = n.getNodeType();        switch (type) {            case Node.ATTRIBUTE_NODE:                 break;                             case Node.DOCUMENT_NODE:                break;                            case Node.ELEMENT_NODE:                endText = processElement((Element) n, buf);                break;                            case Node.TEXT_NODE:                buf.append(((Text) n).getData());                break;            // Pass processing instructions (e.g., <?blah?>            // right on to the synthesizer.  These types of things            // probably should not be used.  Instead the 'engine'            // element is probably the best thing to do.            //            case Node.PROCESSING_INSTRUCTION_NODE:                break;                            // The document type had better be JSML.            //            case Node.DOCUMENT_TYPE_NODE:                break;            // I think NOTATION nodes are only DTD's.            //            case Node.NOTATION_NODE:                break;            // Should not get COMMENTS because the JSMLParser            // ignores them.            //            case Node.COMMENT_NODE:                break;            // Should not get CDATA because the JSMLParser is            // coalescing.            //                case Node.CDATA_SECTION_NODE:                break;            // Should not get ENTITY related notes because            // entities are expanded by the JSMLParser            //            case Node.ENTITY_NODE:            case Node.ENTITY_REFERENCE_NODE:                break;            // Should not get DOCUMENT_FRAGMENT nodes because I            // [[[WDW]]] think they are only created via the API's            // and cannot be defined via content.            //            case Node.DOCUMENT_FRAGMENT_NODE:                break;            default:                break;        }                return endText;    }    /**     * Adds any commands for this element and returns any text that might     * be needed to undo the effects of this element after it is processed.     *     * @param element the element to traverse in depth-first order     * @param buf the buffer to append text to     *     * @return a <code>String</code> containing text to undo the     *   effects of the element     */    protected StringBuffer processElement(Element element, StringBuffer buf) {        StringBuffer endText;        StringBuffer attributeText = null;                String elementName = element.getTagName();        for (int i = 0; i < ELEMENTS.length; i++) {            if (ELEMENTS[i].equals(elementName)) {                attributeText = processAttributes(                    element, ELEMENT_ATTRIBUTES[i]);                break;            }        }        buf.append(COMMAND_PREFIX + elementName + " " + ELEMENT_START);        if (attributeText != null) {            buf.append(attributeText);        }        buf.append(COMMAND_SUFFIX);        endText = new StringBuffer(            COMMAND_PREFIX + elementName + " " + ELEMENT_END);        if (attributeText != null) {            endText.append(attributeText);        }        endText.append(COMMAND_SUFFIX);        return endText;    }    /**     * Gets the list of attributes of the element and returns them in     * a <code>StringBuffer</code>.     *     * @param element the element containing attributes (if any)     * @param attributes the allowed attributes for     *   <code>element</code>     *     * @return a buffer containing the attributes in text form     */    protected StringBuffer processAttributes(Element element,                                             String[] attributes) {        StringBuffer attributeText = new StringBuffer();        for (int i = 0; i < attributes.length; i++) {            if (element.hasAttribute(attributes[i])) {                String data = element.getAttribute(attributes[i]);                attributeText.append(                    DATA_PREFIX + attributes[i] + "=" + data + DATA_SUFFIX);            }        }        return attributeText;    }           /**     * Gets the text form of this queue item.     *     * @return the text form of this queue item.     */    public String getEngineText() {        if (isPlainText()) {	    return text;        } else {            StringBuffer textBuffer = new StringBuffer();            Document document = getDocument();            linearize(document, textBuffer);            return(textBuffer.toString());        }    }}

⌨️ 快捷键说明

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