2012-07-17 52 views
1

我想使用建立在講話中的Java,但是每當我嘗試使用它時,它會給我一個空指針異常,當我調用synth.allocate。我在例子在網上看了,但我仍然得到同樣的錯誤,我看不到我在做什麼錯你如何使用內置的Java tts?

JButton button = new JButton(); 
    button.addActionListener(new ActionListener(){ 

     @Override 
     public void actionPerformed(ActionEvent arg0) { 
      // TODO Auto-generated method stub 
      try { 
       Synthesizer synth = Central.createSynthesizer(
        new SynthesizerModeDesc(Locale.ENGLISH)); 

       synth.allocate(); 
       synth.resume(); 

       synth.speakPlainText("Hello, world!", null); 

       synth.waitEngineState(Synthesizer.QUEUE_EMPTY); 

       synth.deallocate(); 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
     } 
    }); 
+1

問:什麼讓你覺得*是*「內置Java TTS」(文本到語音)? – paulsm4 2012-07-17 20:30:40

回答

2

這可能是因爲你的系統沒有安裝爲一個Locale.ENGLISH合成。這反過來會導致Central.createSynthesizer()返回null,這將導致synth.allocate()處的空指針異常。

在調用Central.createSynthesizer()之前,您可能需要調用Central.availableSynthesizers()以查找系統上安裝的合成器。

另外,作爲一個快速測試,您可以嘗試使用Locale.US而不是Locale.ENGLISH,看看它是否可行...這只是一個猜測。

我看到FreeTTS(http://freetts.sourceforge.net/docs/index.php)被描述爲Java Speech接口的實現。安裝它可能有幫助。

+0

謝謝你是對的沒有安裝合成器是否有一種方法來製作或安裝一個你知道的? – user1449231 2012-07-18 11:57:03

+0

它看起來像[freeTTS](http://freetts.sourceforge.net/docs/index.php#download_and_install)提供了一個美國英語合成器,但我還沒有嘗試過。 – 2012-07-19 03:35:13