2017-10-06 25 views
0

私は音声読み上げライブラリを使用する必要があります。私はhttps://responsivevoice.org/を使うことに決めました。しかし、私のプロジェクトはGWTを使用しているので、統合はかなり簡単ですが、それは明らかに簡単ではありません。ここで音声が再生されない

は、概念クラスの最小証拠である私のJavaコードです:だから

import com.google.gwt.core.client.Callback; 
import com.google.gwt.core.client.GWT; 
import com.google.gwt.core.client.ScriptInjector; 
import com.google.gwt.event.dom.client.ClickEvent; 
import com.google.gwt.event.dom.client.ClickHandler; 
import com.google.gwt.user.client.ui.*; 

public class InverseVoiceTrainer extends SimplePanel implements ClickHandler { 

    Button playBtn; 

    public InverseVoiceTrainer() { 
     ScriptInjector.fromUrl("https://code.responsivevoice.org/responsivevoice.js").setCallback(
       new Callback<Void, Exception>() { 
        @Override 
        public void onSuccess(Void result) { 
         GWT.log("ResponsiveVoiceJS loaded."); 
        } 
        @Override 
        public void onFailure(Exception reason) { 
         GWT.log("ResponsiveVoiceJS loading FAILED!"); 
        } 
       }).inject(); 

     playBtn = new Button("Play"); 
     playBtn.addClickHandler(this); 
     this.add(playBtn); 
    } 

    @Override 
    public void onClick(ClickEvent event) { 
     GWT.log("Onclick pressed"); 
     playWord("This is a test message..."); 
    } 


    public static native void playWord(String s) /*-{ 
     console.log("playWord - 1"); 
     responsiveVoice.speak(s); 
     console.log("playWord - 2"); 
    }-*/; 
} 

、私は以下を参照してくださいすることができますコンソールログに探して:

(と言われます
ResponsiveVoice r1.5.3 
SuperDevModeLogger.java:71 ResponsiveVoiceJS loaded. 
SuperDevModeLogger.java:71 Onclick pressed 
InverseVoiceTrainer.java:40 playWord - 1 
InverseVoiceTrainer.java:42 playWord - 2 

a)レスポンスボイスが正しくロードされているように見え、(b)サウンドが再生されているはずです。しかし、何も聞こえず、音量も聞こえます。では、ここで何がうまくいかないのですか?

答えて

1

これは最善の答えではないかもしれませんが、それは私のために働いていました。

まず、単にHTMLページをホストにresponsivevoice.jsをリンク:

<script type="text/javascript" language="javascript" src="https://code.responsivevoice.org/responsivevoice.js"></script> 

次に、あなたのコードのScriptInjector一部を削除します。

最後の変更はplayWord()方法で$wndを追加することです:

$wnd.responsiveVoice.speak(s); 

をテストしました。働いた。

+0

これは、 'ScriptInjector'呼び出しの問題を指しています。' setWindow(ScriptInjector.TOP_WINDOW) 'が呼び出されていなければなりません。そして、JSNIメソッドは' $ wnd.'の接頭辞になります。 。 –

関連する問題