2010-10-26 51 views
7

我想使用freetts为简单的java应用程序,但我面临一个问题,任何人都可以告诉我如何保存输出语音从文本转换为在我的程序中将语音转换为波形文件。我想通过代码来完成。我如何将输出语音存储到音频文件的freetts

这是与样品

/** 
* Copyright 2003 Sun Microsystems, Inc. 
* 
* See the file "license.terms" for information on usage and 
* redistribution of this file, and for a DISCLAIMER OF ALL 
* WARRANTIES. 
*/ 
import com.sun.speech.freetts.FreeTTS; 
import com.sun.speech.freetts.Voice; 
import com.sun.speech.freetts.VoiceManager; 
import com.sun.speech.freetts.audio.JavaClipAudioPlayer; 

/** 
* Simple program to demonstrate the use of the FreeTTS speech 
* synthesizer. This simple program shows how to use FreeTTS 
* without requiring the Java Speech API (JSAPI). 
*/ 
public class FreeTTSHelloWorld { 

    /** 
    * Example of how to list all the known voices. 
    */ 


    public static void main(String[] args) { 

     // listAllVoices(); 

     FreeTTS freetts; 

     String voiceName = "kevin16"; 

     System.out.println(); 
     System.out.println("Using voice: " + voiceName); 

     /* The VoiceManager manages all the voices for FreeTTS. 
     */ 
     VoiceManager voiceManager = VoiceManager.getInstance(); 
     Voice helloVoice = voiceManager.getVoice(voiceName); 

     if (helloVoice == null) { 
      System.err.println(
       "Cannot find a voice named " 
       + voiceName + ". Please specify a different voice."); 
      System.exit(1); 
     } 

     /* Allocates the resources for the voice. 
     */ 
     helloVoice.allocate(); 

     /* Synthesize speech. 
     */ 


     helloVoice.speak("Thank you for giving me a voice. " 
         + "I'm so glad to say hello to this world."); 


     /* Clean up and leave. 
     */ 
     helloVoice.deallocate(); 
     System.exit(0); 
    } 
} 

此代码工作正常我想输出保存为我的硬盘上的音频文件中给出的示例HelloWorld应用程序。

感谢 Pranay

回答

10

我想通了,如何做到这一点,你必须简单地使用SingleFileAudioPlayer传递要样品宣言将是文件名和文件类型,如:

audioPlayer = new SingleFileAudioPlayer("output",Type.WAVE); 

现在,您需要将SinglefileAudioplayer对象附加到您的VoiceManager对象:例如

helloVoice.setAudioPlayer(audioPlayer); 

现在用途:

hellovoice.speak("zyxss"); 

这将保存在讲什么那里的文件。请记住关闭音频播放器,否则文件将不会被保存。在退出之前放audioPlayer.close();

下面是完整的工作代码将在您的C目录中转储文件

/** 
    * Copyright 2003 Sun Microsystems, Inc. 
    * 
    * See the file "license.terms" for information on usage and 
    * redistribution of this file, and for a DISCLAIMER OF ALL 
    * WARRANTIES. 
    */ 
    import com.sun.speech.freetts.FreeTTS; 
    import com.sun.speech.freetts.Voice; 
    import com.sun.speech.freetts.VoiceManager; 
    import com.sun.speech.freetts.audio.AudioPlayer; 
    import com.sun.speech.freetts.audio.SingleFileAudioPlayer; 
    import javax.sound.sampled.AudioFileFormat.Type; 

    /** 
    * Simple program to demonstrate the use of the FreeTTS speech 
    * synthesizer. This simple program shows how to use FreeTTS 
    * without requiring the Java Speech API (JSAPI). 
    */ 
    public class FreeTTSHelloWorld { 

     /** 
     * Example of how to list all the known voices. 
     */ 


     public static void main(String[] args) { 

      // listAllVoices(); 

      FreeTTS freetts; 
     AudioPlayer audioPlayer = null; 
      String voiceName = "kevin16"; 

      System.out.println(); 
      System.out.println("Using voice: " + voiceName); 

      /* The VoiceManager manages all the voices for FreeTTS. 
      */ 
      VoiceManager voiceManager = VoiceManager.getInstance(); 
      Voice helloVoice = voiceManager.getVoice(voiceName); 

      if (helloVoice == null) { 
       System.err.println(
        "Cannot find a voice named " 
        + voiceName + ". Please specify a different voice."); 
       System.exit(1); 
      } 

      /* Allocates the resources for the voice. 
      */ 
      helloVoice.allocate(); 

      /* Synthesize speech. 
      */ 
//create a audioplayer to dump the output file 
      audioPlayer = new SingleFileAudioPlayer("C://output",Type.WAVE); 
    //attach the audioplayer 
      helloVoice.setAudioPlayer(audioPlayer); 



      helloVoice.speak("Thank you for giving me a voice. " 
          + "I'm so glad to say hello to this world."); 



      /* Clean up and leave. 
      */ 
      helloVoice.deallocate(); 
//don't forget to close the audioplayer otherwise file will not be saved 
      audioPlayer.close(); 
      System.exit(0); 
     } 
    } 
+0

不错solution..thanks – hemant 2012-08-28 10:42:40

0

我从来没有使用过的FreeTTS,但JavaDoc中的快速扫描显示Voice.setWaveDumpFile(String)。这是做什么需要?

+0

嗨感谢您的回答,但这并不很多工作 – 2010-10-28 06:21:04

相关问题