📄 cmudiphonevoice.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.en.us;import com.sun.speech.freetts.diphone.DiphonePitchmarkGenerator;import com.sun.speech.freetts.diphone.DiphoneUnitSelector;import com.sun.speech.freetts.Item;import com.sun.speech.freetts.ProcessException;import com.sun.speech.freetts.Relation;import com.sun.speech.freetts.relp.UnitConcatenator;import com.sun.speech.freetts.Utterance;import com.sun.speech.freetts.UtteranceProcessor;import com.sun.speech.freetts.Voice;import com.sun.speech.freetts.Gender;import com.sun.speech.freetts.Age;import de.dfki.lt.freetts.ConcatenativeVoice;import java.util.Locale;import java.io.IOException;import java.net.URL;/** * Defines an unlimited-domain diphone synthesis based voice */public class CMUDiphoneVoice extends CMUVoice implements ConcatenativeVoice { protected URL database; /** * Creates a simple voice. This is merely for backwards * compatibility with versions of FreeTTS earlier than v1.2 * (i.e., before the voice manager was introduced). */ public CMUDiphoneVoice() { this(null, null, null, null, null, null, null, null, null); } /** * Creates a simple voice * * @param name the name of the voice * @param gender the gender of the voice * @param age the age of the voice * @param description a human-readable string providing a * description that can be displayed for the users. * @param locale the locale of the voice * @param domain the domain of this voice. For example, * @param organization the organization which created the voice * "general", "time", or * "weather". * @param lexicon the lexicon to load * @param database a url to the unit database file for this voice */ public CMUDiphoneVoice(String name, Gender gender, Age age, String description, Locale locale, String domain, String organization, CMULexicon lexicon, URL database) { super(name, gender, age, description, locale, domain, organization, lexicon); setRate(150f); setPitch(100F); setPitchRange(11F); this.database = database; } /** * Gets the url to the database that defines the unit data for this * voice. * * @return a url to the database */ public URL getDatabase() { if (database == null) { /* This is merely for backwards compatibility with * versions of FreeTTS earlier than v1.2 (i.e., * before the voice manager was introduced). */ String name = getFeatures().getString(Voice.DATABASE_NAME); database = this.getClass().getResource(name); } return database; } /** * Sets the FeatureSet for this Voice. * * @throws IOException if an I/O error occurs */ protected void setupFeatureSet() throws IOException { super.setupFeatureSet(); } /** * Returns the post lexical processor to be used by this voice. * Derived voices typically override this to customize behaviors. * * @return the Unit selector * * @throws IOException if an IO error occurs while getting * processor */ protected UtteranceProcessor getPostLexicalAnalyzer() throws IOException { return new CMUDiphoneVoicePostLexicalAnalyzer(); } /** * Returns the pitch mark generator to be used by this voice. * Derived voices typically override this to customize behaviors. * This voice uses a DiphonePitchMark generator to generate * pitchmarks. * * @return the pitchmark processor * * @throws IOException if an IO error occurs while getting * processor */ public UtteranceProcessor getPitchmarkGenerator() throws IOException { return new DiphonePitchmarkGenerator(); } /** * Returns the unit concatenator to be used by this voice. * Derived voices typically override this to customize behaviors. * This voice uses a relp.UnitConcatenator to concatenate units. * * @return the unit concatenator processor * * @throws IOException if an IO error occurs while getting * processor */ public UtteranceProcessor getUnitConcatenator() throws IOException { return new UnitConcatenator(); } /** * Returns the unit selector to be used by this voice. * Derived voices typically override this to customize behaviors. * This voice uses the DiphoneUnitSelector to select units. The * unit selector requires the name of a diphone database. If no * diphone database has been specified then an Error is thrown. * * @return the unit selector processor * * @throws IOException if an IO error occurs while getting * processor */ public UtteranceProcessor getUnitSelector() throws IOException { return new DiphoneUnitSelector(getDatabase()); } /** * Converts this object to a string * * @return a string representation of this object */ public String toString() { return "CMUDiphoneVoice"; }}/** * Annotates the utterance with post lexical information. Converts AH * phonemes to AA phoneme in addition to the standard english postlex * processing. */class CMUDiphoneVoicePostLexicalAnalyzer implements UtteranceProcessor { UtteranceProcessor englishPostLex = new com.sun.speech.freetts.en.PostLexicalAnalyzer(); /** * performs the processing * @param utterance the utterance to process/tokenize * @throws ProcessException if an IOException is thrown during the * processing of the utterance */ public void processUtterance(Utterance utterance) throws ProcessException { fixPhoneme_AH(utterance); englishPostLex.processUtterance(utterance); } /** * Turns all AH phonemes into AA phonemes. * This should really be done in the index itself * @param utterance the utterance to fix */ private void fixPhoneme_AH(Utterance utterance) { for (Item item = utterance.getRelation(Relation.SEGMENT).getHead(); item != null; item = item.getNext()) { if (item.getFeatures().getString("name").equals("ah")) { item.getFeatures().setString("name", "aa"); } } } // inherited from Object public String toString() { return "PostLexicalAnalyzer"; }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -