javascript - 声音未播放

标签 javascript gwt responsivevoice

我需要使用文本转语音库。我决定使用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) ResponsiveVoice 似乎已正确加载并且 (b) 声音应该已播放。然而,我什么也没听到,而且我的音量是可以听到的。那么,这里出了什么问题呢?

最佳答案

嗯,这可能不是最好的答案,但它对我有用。

首先,只需链接托管 html 页面中的 responsivevoice.js:

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

然后删除代码中的 ScriptInjector 部分。

最后的更改是在 playWord() 方法中添加 $wnd:

$wnd.responsiveVoice.speak(s);

已测试。工作了。

关于javascript - 声音未播放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46610987/

相关文章:

Javascript 对象比较递归被破坏

javascript - 子元素上的 jQuery 切换类

javascript - Android 上为 "This page wants to use speech"。如何禁用它?

javascript - 响应语音 : Showing a Div After Detecting End of Audio to be Played

javascript - 正则表达式在两个字符之间进行匹配

javascript - 由渲染更新的 ReactJS Cortex 对象未调用?

gwt - FabricJS 点击事件

javascript - Facebook 按钮未在 GWT Element.setInnerHTML() 中显示。未显示样式的推文按钮

GWT 动态国际化

javascript - Responsivevoice.js 可以离线使用吗?