Phonegap TTS 插件 Android 无法正常工作

Posted

技术标签:

【中文标题】Phonegap TTS 插件 Android 无法正常工作【英文标题】:Phonegap TTS Plugin Android not working 【发布时间】:2014-03-13 01:12:07 【问题描述】:

我正在使用来自https://github.com/domaemon/org.apache.cordova.plugin.tts 的 TTS 插件,但该插件似乎不起作用。它甚至没有初始化。

安装如下插件(PHONEGAP 3.3)

phonegap plugin add https://github.com/domaemon/org.apache.cordova.plugin.tts.git
phonegap build android

在 phonegap config.xml 中添加以下内容

<gap:plugin name="org.apache.cordova.plugins.tts" value="org.apache.cordova.plugins.tts"/>

在我的javascript中添加了以下代码

window.plugins.tts.startup(startupWin, fail);
function startupWin(result) 
    console.log("Startup win");
    // When result is equal to STARTED we are ready to play
    if (result == TTS.STARTED) 
        window.plugins.tts.getLanguage(win, fail);
        window.plugins.tts.speak("The text to speech service is ready");
        window.plugins.tts.isLanguageAvailable("en_US", function() 
            addLang("en_US", "English (American)");
        , fail);
        window.plugins.tts.isLanguageAvailable("en_GB", function() 
            addLang("en_GB", "English (UK)");
        , fail);
        window.plugins.tts.isLanguageAvailable("fr", function() 
            addLang("fr", "French");
        , fail);
        window.plugins.tts.isLanguageAvailable("de", function() 
            addLang("de", "German");
        , fail);
        window.plugins.tts.isLanguageAvailable("it", function() 
            addLang("it", "Italian");
        , fail);
        window.plugins.tts.isLanguageAvailable("es", function() 
            addLang("es", "Spanish");
        , fail);
    


function addLang(loc, lang) 
    var langs = document.getElementById('langs');
    var langOption = document.createElement("OPTION") 
    langOption.innerText = lang; 
    langOption.value = loc;
    langs.options.add(langOption); 


function changeLang() 
    var yourSelect = document.getElementById('langs');
    window.plugins.tts.setLanguage(yourSelect.options[yourSelect.selectedIndex].value, win, fail);


function win(result) 
    console.log(result);


function fail(result) 
    console.log("Error = " + result);


function speak() 
    console.log("Speaking");
    window.plugins.tts.speak("How are you");
           

但没有显示任何控制台日志消息。我正在 genymotion 模拟器上对此进行测试。

【问题讨论】:

【参考方案1】:

经过一番努力,我让 TTS 正常工作。但是还有一个问题我必须手动修复。以下是使 TTS 工作的步骤

像下面这样安装插件。

phonegap plugin add https://github.com/domaemon/org.apache.cordova.plugin.tts.git
phonegap build android

一旦安装和构建。将此插件添加到 phonegap config.xml 文件。 (如果您使用 sencha touch 构建应用程序,则 config.xml 将位于根文件夹中。)

<gap:plugin name="org.apache.cordova.plugins.tts" value="org.apache.cordova.plugins.tts"/>

这会将插件添加到最终构建中。现在要启动 TTS 服务并说出一些文本,请使用以下 sn-p。

navigator.tts.startup(startupWin, fail);
function startupWin(result) 
    console.log("Startup win");
    // When result is equal to STARTED we are ready to play
    console.log("Result "+result);
    //TTS.STARTED==2 use this once so is answered
    if (result == 2) 
        navigator.tts.getLanguage(win, fail);
        navigator.tts.speak("The text to speech service is ready");                                     
    
                               

function win(result) 
    console.log(result);


function fail(result) 
    console.log("Error = " + result);

我遇到的问题是插件中未定义 startupWin 中的 TTS.STARTED。我只是使用了常量的值,插件运行良好。

【讨论】:

这太棒了!感谢您发布您的解决方案!【参考方案2】:

result == 2 或 STARTED 只工作一次。如果您再次调用该函数,它可能不会返回 2 或 STARTED(发生在我身上)。所以最好不要在启动成功时使用该条件。

/*********tts.js*************/
var tts = 
    say: function() 
	alert("tts");
    ,
    startup: function(successCallback, errorCallback) 
	console.log("TTS-Startup");
        cordova.exec(successCallback, errorCallback, "TTS", "startup", []);
    ,
    speed: function(speed, successCallback, errorCallback) 
    cordova.exec(successCallback, errorCallback, "TTS", "speed", [speed]);
    ,
    speak: function(text, successCallback, errorCallback) 
    	cordova.exec(successCallback, errorCallback, "TTS", "speak", [text]);
    
  ;

if(!window.plugins) 
    window.plugins = ;


if (!window.plugins.tts) 
    window.plugins.tts = tts;

/**********calling from your js  after device ready***************/
 function visitToString()
  window.plugins.tts.startup(function(result)
			window.plugins.tts.speed(50,function()
				console.log('speed success');
			,function(err)
				console.log('speed err'+JSON.stringify(err));
			);  
	    	 window.plugins.tts.speak(finalstr,function()
	    		 console.log('speech success');
	    	 ,function(err)
	    		 console.log('speech err'+JSON.stringify(err));
	    	 );  
		    
	, fail);
  
<button id="speakvisit" onclick="visitToString();">Audio Details
					</button>

【讨论】:

以上是关于Phonegap TTS 插件 Android 无法正常工作的主要内容,如果未能解决你的问题,请参考以下文章

Android TTS 文字转语音,中文需第三方插件

适用于 iOS 的 Phonegap/Cordova 日历插件无响应

接受来自 phonegap 应用程序的应用程序请求(无画布)

Android 版 PhoneGap 截图插件

android phonegap 下载器插件 2.2

Phonegap 构建 facebook 连接插件 (android)