Как заставить TTS (Text To Speech) работать в Java NetBeans?
Я пытаюсь заставить TTS работать в NetBeans для Java. Я разархивировал файлы JSAPI и добавил следующие файлы в библиотеку
- 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)**
Когда я меняю основной метод примерно так:
public static void main (String[]args)
{
Demofreetts2 obj = new Demofreetts2();
obj.doSpeak("hello","kevin16");
}
Я получаю это сообщение:
**run:
java.lang.NullPointerException
BUILD SUCCESSFUL (total time: 1 second)**
Кто-нибудь знает, как я могу заставить это работать?
Я просто какая программа, которая будет конвертировать строку в речь.
1 ответ
Ошибка № 1: вам придется передать некоторые аргументы в ваш основной метод для использования args[0]
, Смотрите, что такое "String args[]"? параметр в основном методе Java для дополнительной информации.
Ошибка № 2: вы нажали NullPointerException
в вашем коде, то есть вы пытаетесь использовать метод над экземпляром, который равен null
, Либо используйте отладчик, либо расширите отладочную информацию с помощью e.printStackTrace();
вместо System.out.println (""+e);
, чтобы узнать, какой экземпляр является виновником.