# JSAPI - Java Speech



## Guest (8. Feb 2009)

Hallo Ich bin gerade dabei mich mit Java - Speech zubeschäftigen, stoße da aber auf ein echt merkwürdiges Problem.
Zudem brauch man ja die JSAPI.jar, die ich mit dem freetts und einmal von dem sphinx geholt habe. Die Api habe ich dann auch brav in die Biblothek mit eingebaut. Wunderbar dachte ich und wollte den ersten versuch starten ein Text to Speech Programm zu schreiben.

Hier jetzt das Problem:

- es gibt kein Syntaxfehler in Netbeans 
- es entsteht aber eine Nullpointerexception bei synthesize.allocate();

Hier der Code

```
package javaapplication3;
import javax.speech.*;
import javax.speech.synthesis.*;
import java.util.Locale;
public class HelloWorld {

static Synthesizer synthesizer;
static AudioListener audioListener;
static EngineListener engineListener;

    public static void main(String[] args)  {
        SynthesizerModeDesc desc = new SynthesizerModeDesc();
        Voice voice = new Voice();
        voice.setGender(2);
        voice.setAge(69);
        desc.addVoice(voice);
        desc.setLocale(Locale.GERMAN);
        try{
        Synthesizer synthesize = Central.createSynthesizer(desc);
        synthesize.allocate();
        synthesize.speakPlainText("Hallo Welt\n", null);
        synthesize.waitEngineState(synthesize.QUEUE_EMPTY);
        synthesize.deallocate();
        }
        catch(Exception e){System.out.println(e);}

    }

}
```

Ich habe jetzt schon seit 18 Uhr gegooglet und ausprobiert vom feinsten und ich packs einfach nicht.

Bitte helft mir  :cry:


----------



## hdi (8. Feb 2009)

```
Central.createSynthesizer(desc);
```

wird dir wohl "null" returnen. Schau mal in der API ob da geschrieben steht, wann diese
Methode null zurückgibt.


----------



## 0x7F800000 (8. Feb 2009)

Hmm, der erste Google Treffer ergab, dass du da wirklich nicht der erste mit dem Problem zu sein scheinst:
http://forums.sun.com/thread.jspa?threadID=760229
Ich weiß jetzt nicht, ob man dir hier auf die schnelle mehr sagen wird, als es in dem gelinkten board schon steht :roll:
Jedenfalls hat's ja einer anscheinend irgendwie in den Griff bekommen:


			
				DougD720 hat gesagt.:
			
		

> I had this problem as well - Classpaths at Runtime are the solution. You need it to have the JSAPI.jar classpath set with the runtime. In NetBeans this is under the project's properties panel. Idk about Eclipse. I'm using FreeTTS and had the error and now it works just fine.
> 
> Good luck!


sagt dir das was? ???:L


----------



## gast (8. Feb 2009)

ich habe das theam schon gelesen...

Leider weiss ich nicht was mit: You need it to have the JSAPI.jar classpath set with the runtime.
anzufangen...

Ich war sogar schon so verzweifelt und habe an die Systemvariablen gedacht...
wo ich allerdings keine ahnung habe...

Leider gibs da nur eine hand voll deutsche themen wo die leute aber auch nicht wissen was zu tun ist...

@ hdi würde da nicht schon längst bei desc.addVoice(voice); nen nullpointer kommen wenns daran läge?

Wer mir hier mich zum Sieg führt der ist mein Meister ^^


----------



## Guest (8. Feb 2009)

Übrigens bei dem beispiel bei sun.com gibs den selben fehler...
Es ist also kein Programmierfehler sondern eher irgendwas was mir ehlt und ich irgendwo hinzufügen müsste...
Ich habe auch alle anderen jar dateien von freetts und dem sphinx in die biblothek hinzugefügt, daran liegts nich

 

Danke für Mithilfe


----------



## hdi (8. Feb 2009)

> @ hdi würde da nicht schon längst bei desc.addVoice(voice); nen nullpointer kommen wenns daran läge?



nein ich sage nicht dass du beim erzeugen von desc ein null-Objekt kriegst, sondern
bei der Methode createSynthesizer von der Klasse Central. Deswegen meinte ich: Kuck in der API
dieser Klasse nach, dort steht für die Methode sicherlich eine Beschreibung, und dort steht auch
wann die Methode null returned.


----------



## 0x7F800000 (8. Feb 2009)

> The mode descriptor is passed to the createRecognizer  or createSynthesizer methods of Central to create a Recognizer or Synthesizer. The created engine matches all the engine properties in the mode descriptor passed to the create method. If no suitable speech engine is available, the create methods return null.


Du hast schlicht und einfach eine zu komplizierte Aufgabe gestellt. Dieses JSAPI kann halt nicht die Stimme einer 70 jährigen Oma mit bayerischen Akzent erstellen. Versuch's mal mit Englisch und 20 und schaue erstmal, ob's überhaupt klappt... :bahnhof:


----------



## Guest (8. Feb 2009)

Ja gut habe da was:
Create a Synthesizer with specified required properties. If there is no Synthesizer with the required properties the method returns null. 

http://java.sun.com/products/java-media/speech/forDevelopers/jsapi-doc/javax/speech/Central.html#createSynthesizer(javax.speech.EngineModeDesc)


----------



## 0x7F800000 (8. Feb 2009)

ja, hast du das jetzt mit irgendeiner anderen Stimme zum laufen gebracht, geht's sonst? ist dein Problem jetzt gelöst oder was soll die Aussage bedeuten?


----------



## Guest (9. Feb 2009)

Also an der stimme liegts nicht...
Es kommt trotzdem ein Nullpointer

Hdi hat schon recht...

Allerdings komme ich immernoch nicht zur Lösung


----------



## Guest (9. Feb 2009)

Kann mir jemand sagen warum da kein Synthesizer mit den richtigen Eigenschaften entsteht?
bzw. mit welchen Eigenschaften es da funktionieren würde?

Ich habe jetzt mehrere Varianten durch und komm nicht drauf.

Ich hoffe ihr habt das Thema noch nicht abgeschrieben, ich brauche da wirklich Hilfe.


----------



## 0x7F800000 (9. Feb 2009)

funktioniert denn _irgendein_ 10-zeiler beispiel, der direkt von der offiziellen seite von JSAPI kommt? :roll:


----------



## Guest (9. Feb 2009)

Nein, das ist ja das lustige...
wie gesagt nicht mal das beispiel bei sun beim programmersguide jsapi funktioniert 
http://java.sun.com/products/java-media/speech/forDevelopers/jsapi-guide/Synthesis.html#7460 

:bahnhof:


----------



## Guest (9. Feb 2009)

man man man...
So Gut... endlich mal was was sich wirklich gelohnt hat...


FÜR ALLE DIE JEMALS DAS PROBLEM HATTEN ODER HABEN WERDEN:

Ganz wichtig das ihr nicht nur die libaries bearbeitet, sondern auch die speech.properties (eine Datei im freetts) ins homedirectory speichert... wer das nicht weiss, der kann ewig alles versuchen und es nicht schaffen ^^

Vielen Dank für Eure Bemühungen zu solch später Uhrzeit...


----------



## Steven Hachel (10. Feb 2009)

Hmmm... also ich habe genau den selben Fehler. Trotz der Properties Datei...
Komisch...


----------

