Package com.sun.speech.freetts.relp

Source Code of com.sun.speech.freetts.relp.AudioOutput

/**
* 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.relp;

import java.util.logging.Level;
import java.util.logging.Logger;

import javax.sound.sampled.AudioFormat;

import com.sun.speech.freetts.ProcessException;
import com.sun.speech.freetts.Utterance;
import com.sun.speech.freetts.UtteranceProcessor;
import com.sun.speech.freetts.audio.AudioPlayer;

/**
* Supports generating audio output from an utterance. This is an
* utterance processor. The primary method, <code> procesUtterance </code>
* takes an utterance and hands it off to the LPCResult to be sent to the
* proper audio player.
*
* @see LPCResult
*/
public class AudioOutput implements UtteranceProcessor {
    /** Logger instance. */
    private static final Logger LOGGER =
        Logger.getLogger(AudioOutput.class.getName());

    private final static AudioFormat AUDIO_8KHZ =
  new AudioFormat(8000.0f, 16, 1, true, true);
    private final static AudioFormat AUDIO_16KHZ =
  new AudioFormat(16000.0f, 16, 1, true, true);
   
    /**
     * Generates audio waves for the given Utterance. The audio data
     * is decoded using the Linear Predictive Decoder
     *
     * @param  utterance  the utterance to generate waves
     *
     * @see LPCResult
     *
     * @throws ProcessException if an IOException is thrown during the
     *         processing of the utterance
     */
    public void processUtterance(Utterance utterance) throws ProcessException {
  LPCResult lpcResult = (LPCResult) utterance.getObject("target_lpcres");
  SampleInfo sampleInfo =
      (SampleInfo) utterance.getObject(SampleInfo.UTT_NAME);
  AudioPlayer audioPlayer = utterance.getVoice().getAudioPlayer();

  audioPlayer.setAudioFormat(getAudioFormat(sampleInfo));
  audioPlayer.setVolume(utterance.getVoice().getVolume());

  if (LOGGER.isLoggable(Level.FINE)) {
      LOGGER.fine("=== " +
    utterance.getString("input_text"));
  }
  if (!lpcResult.playWave(audioPlayer, utterance)) {
      throw new ProcessException("Output Cancelled");
  }
    }


    /**
     * Gets the current audio format. 
     * Given a sample info return an appropriate audio format. A cache
     * of common audio formats is used to reduce unnecessary object
     * creation. Note that this method always returns an AudioFormat
     * that uses 16-bit samples.
     *
     * @param sampleInfo the sample info
     *
     * @return an audio format
     */
    private AudioFormat getAudioFormat(SampleInfo sampleInfo) {
  if (sampleInfo.getSampleRate() == 8000) {
      return AUDIO_8KHZ;
  } else if (sampleInfo.getSampleRate() == 16000) {
      return AUDIO_16KHZ;
  } else {
      return new AudioFormat(sampleInfo.getSampleRate(),
        16, 1, true, true);
  }
    }
   
    /**
     *
     * Returns the string form of this object
     *
     * @return the string form of this object
     */
    public String toString() {
  return "AudioOutput";
    }
}



TOP

Related Classes of com.sun.speech.freetts.relp.AudioOutput

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.