【问题标题】:How to get TTS (Text To Speech) working in java netbeans?如何让 TTS(文本到语音)在 java netbeans 中工作?
【发布时间】:2012-12-02 17:17:32
【问题描述】:

我正在尝试让 TTS 在 netbeans for java 中工作。我已经解压了 JSAPI 文件并将以下 jars 添加到库中

  • cmu_us_kal.jar
  • cmulex.jar
  • en_us.jar
  • freetts.jar
  • cmulex.jar
  • jsapi.jar

当我运行以下代码时:

package demofreetts2;

import javax.speech.*;
import java.util.*;
import javax.speech.synthesis.*; 

public class Demofreetts2 {

String speaktext ="";
public void doSpeak(String speak, String voicename)
 {
   speaktext = speak;
   String voiceName = voicename;
   try
    {
    SynthesizerModeDesc desc = new SynthesizerModeDesc(null, "general", Locale.US, null, null);
     Synthesizer synthesizer = Central.createSynthesizer(desc);
     synthesizer.allocate();
     synthesizer.resume();
     desc = (SynthesizerModeDesc)synthesizer.getEngineModeDesc();
     Voice[] voices = desc.getVoices();
     Voice voice = null;
     for(int i = 0; i< voices. length; i++)
      {
       if(voices[i].getName().equals(voiceName))
        {
         voice = voices[i];
         break;
        }
      }
     synthesizer.getSynthesizerProperties().setVoice(voice);
     synthesizer.speakPlainText(speaktext, null);
     synthesizer.waitEngineState(Synthesizer.QUEUE_EMPTY);
     synthesizer.deallocate();
    }
   catch (Exception e)
    {
    String message = "missing speech properties in " + System.getProperty("user.home") + "\n";
        System.out.println (""+e);
    }
 }
public static void main (String[]args)
{
 Demofreetts2 obj = new Demofreetts2();
  obj.doSpeak(args[0],"kevin16");
 }
}

我收到以下消息:

**run:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0
at demofreetts2.Demofreetts2.main(Demofreetts2.java:46)
Java Result: 1
BUILD SUCCESSFUL (total time: 1 second)**

当我像这样更改 main 方法时:

public static void main (String[]args)
{
 Demofreetts2 obj = new Demofreetts2();
 obj.doSpeak("hello","kevin16");
}

我收到这条消息:

**run:
java.lang.NullPointerException
BUILD SUCCESSFUL (total time: 1 second)**

有人知道我怎样才能让它工作吗?

我只是一个将字符串转换为语音的程序。

【问题讨论】:

    标签: java text-to-speech jsapi freetts


    【解决方案1】:

    错误 #1:您必须将一些参数传递给您的 main 方法才能使用args[0]。更多信息请参见What is "String args[]"? parameter in main method Java

    错误 #2:您在代码中遇到了NullPointerException,这意味着您尝试对等于null 的实例使用方法。要么使用调试器,要么使用 e.printStackTrace(); 而不是 System.out.println (""+e); 扩展调试信息,以便知道哪个实例是罪魁祸首。

    【讨论】:

    • 当我像你说的那样调整 error2 时,我收到以下消息----------------------------- ---------------------------------------- 在 demofreetts2 处运行:java.lang.NullPointerException。 Demofreetts2.doSpeak(Demofreetts2.java:19) 在 demofreetts2.Demofreetts2.main(Demofreetts2.java:46) 构建成功(总时间:1 秒)------------------ ---------------------------------------------- 是不是因为voice 是空值吗?
    • Demofreetts2 的第 19 行是什么?这一行的变量之一是null
    • 所以你必须检查为什么Central.createSynthesizer(desc)返回null,因为那是NullPointerException之后的原因...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-17
    • 1970-01-01
    • 2011-07-02
    • 1970-01-01
    • 2012-01-31
    • 2011-03-19
    相关资源
    最近更新 更多