2017-10-06 5 views
0

Ich brauche eine Text-zu-Sprache-Bibliothek. Ich entschied mich für https://responsivevoice.org/. Die Integration ist relativ einfach, da mein Projekt GWT verwendet, ist es offensichtlich nicht so einfach.Sound wird nicht abgespielt

Hier ist mein Java-Code, der eine minimale Proof of Concept-Klasse ist:

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"); 
    }-*/; 
} 

Also, in das Konsolenprotokoll suchen sehe ich folgendes können:

ResponsiveVoice r1.5.3 
SuperDevModeLogger.java:71 ResponsiveVoiceJS loaded. 
SuperDevModeLogger.java:71 Onclick pressed 
InverseVoiceTrainer.java:40 playWord - 1 
InverseVoiceTrainer.java:42 playWord - 2 

Was mir sagt, dass (a) ResponsiveVoice scheint korrekt geladen zu sein und (b) der Sound hätte abgespielt werden sollen. Allerdings höre ich nichts und meine Lautstärke ist hörbar. Also, was läuft hier falsch?

Antwort

1

Nun, das könnte nicht die beste Antwort sein, aber es hat für mich funktioniert.

Zuerst verbindet die responsivevoice.js HTML-Seite in Hosting:

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

dann den ScriptInjector Teil des Codes entfernen.

Die letzte Änderung ist $wnd in playWord() Methode hinzufügen:

$wnd.responsiveVoice.speak(s); 

getestet. Hat funktioniert.

+0

Dies weist auf das Problem hin, das beim 'ScriptInjector' Aufruf auftritt - es sollte' .setWindow (ScriptInjector.TOP_WINDOW) 'aufgerufen werden, und dann sollte die JSNI Methode' $ wnd. 'vorangestellt werden, wie Ihre Antwort zeigt . –

Verwandte Themen