Javascript 从angular service访问第三方JS功能
我正在尝试访问index.html中angular之外加载的javascript函数。这是因为google tts for node没有安装在pi上。我想使用js版本的google tts来传递文本,将其转换为文本到语音。然而,我似乎不知道如何从我的角度服务访问所需的功能 主控制器Javascript 从angular service访问第三方JS功能,javascript,jquery,angularjs,node.js,Javascript,Jquery,Angularjs,Node.js,我正在尝试访问index.html中angular之外加载的javascript函数。这是因为google tts for node没有安装在pi上。我想使用js版本的google tts来传递文本,将其转换为文本到语音。然而,我似乎不知道如何从我的角度服务访问所需的功能 主控制器 (function(angular) { 'use strict'; function AppCtrl(AnnyangService, GeolocationService, WeatherServ
(function(angular) {
'use strict';
function AppCtrl(AnnyangService, GeolocationService, WeatherService, MapService, HueService, CalendarService, SpeechService,SearchService,GoogleTTS, $scope, $rootScope, $timeout, $interval, $http, $window) {
$rootScope.speech_text = "";
//command for speak testing.
AnnyangService.addCommand('Speak *term', function(term) {
$rootScope.speech_text = term;
SpeechService.Speech(GoogleTTS);
});
}
angular.module('myApp')
.controller('AppCtrl', AppCtrl);
}(window.angular));
我的服务
(function() {
'use strict';
function SpeechService($window, $http, $rootScope, $q, GoogleTTS) {
var service = {};
service.events = [];
service.Speech = function(GoogleTTS) {
var speech_text = $rootScope.speech_text.toString();
console.log(speech_text);
GoogleTTS.then(function(GoogleTTS){
console.log("is ready");
tts = new GoogleTTS();
Say = function(text){
tts.play(text, 'en', function(err) {
if (err) {
alert(err.toString());
}
});
}
console.log("say");
Say(speech_text);
});
};
return service
}
angular.module('myApp')
.factory('SpeechService', SpeechService);
}());
所以,正如我建议的那样,我将google tts包装在一个服务中
(function() {
'use strict';
function GoogleTTS($q){
var deferred = $q.defer();
fetch();
function fetch(){
if(window.GoogleTTS != undefined){
console.log("It found it horray");
deferred.resolve(window.GoogleTTS);
}
else{
console.log("bad angular");
setTimeout(function(){
fetch();
}, 500);
}
}
return deferred.promise;
}
angular.module('myApp')
.factory('GoogleTTS', GoogleTTS);
}());
但它并没有在GoogleTTS服务中解析GoogleTTS,它只是没有定义,就像它无法从窗口中找到函数一样
<script type="text/javascript" src="js/google-tts.js"></script>
<script type="text/javascript" src="js/google-tts-service.js"></script>
<script type="text/javascript" src="js/soundmanager2.js"></script>
下面是google-tts.js库脚本
! function(a, b) {
"use strict";
if ("function" == typeof define) define(b);
else if ("undefined" != typeof module && module.exports) module.exports = b();
else {
var c = window || this,
d = c[a],
e = b();
e.noConflict = function() {
return c[a] = d, e
}, c[a] = e
}
}("GoogleTTS", function() {
"use strict";
var a = function(b) {
var c = this,
d = 100;
c.defaultLanguage = b || "en";
var e = {
af: "Afrikaans",
sq: "Albanian",
ar: "Arabic",
hy: "Armenian",
ca: "Catalan",
"zh-CN": "Mandarin (simplified)",
"zh-TW": "Mandarin (traditional)",
hr: "Croatian",
cs: "Czech",
da: "Danish",
nl: "Dutch",
en: "English",
eo: "Esperanto",
fi: "Finnish",
fr: "French",
de: "German",
el: "Greek",
ht: "Haitian Creole",
hi: "Hindi",
hu: "Hungarian",
is: "Icelandic",
id: "Indonesian",
it: "Italian",
ja: "Japanese",
ko: "Korean",
la: "Latin",
lv: "Latvian",
mk: "Macedonian",
no: "Norwegian",
pl: "Polish",
pt: "Portuguese",
ro: "Romanian",
ru: "Russian",
sr: "Serbian",
sk: "Slovak",
es: "Spanish",
sw: "Swahili",
sv: "Swedish",
ta: "Tamil",
th: "Thai",
tr: "Turkish",
vi: "Vietnamese",
cy: "Welsh"
};
c._players = [new a.HTML5Player, new a.SM2Player], c.addPlayer = function(b) {
if (!(b instanceof a.Player)) throw new Error("Must be a instance of base Player class");
c._players.push(b)
}, c.languages = function() {
return e
}, c.getPlayer = function(a) {
if (c.availablePlayer) return a(null, c.availablePlayer);
var b, d = -1;
(b = function() {
return c._players.length <= ++d ? a() : (c._players[d].available(function(e) {
return e ? (c.availablePlayer = c._players[d], a(null, c.availablePlayer)) : (b(), void 0)
}), void 0)
}).call()
}, c.urls = function(a, b) {
if (b = b || c.defaultLanguage, !a || 0 >= a.length) throw new Error("Need some text");
for (var e = c._sliceInput(a, d), f = [], g = 0; g < e.length; ++g) {
var h = e[g];
f.push("http://translate.google.com/translate_tts?ie=UTF-8&tl=" + b + "&q=" + h + "&textlen=" + h.length + "&idx=" + g + "&total=" + e.length)
}
return f
}, c._sliceInput = function(a, b) {
var c = [],
d = 0;
do c.push(a.slice(d, d + b)), d += b; while (a.length > d);
return c
}, c.play = function(a, b, d) {
c.getPlayer(function(e, f) {
if (e) return d(e);
if (!f) return d(new Error("No playback mechanism is available"));
var g = c.urls(a, b),
h = null;
(h = function(a) {
return a ? d(a) : 0 >= g.length ? d() : (f.play(g.shift(), h), void 0)
}).call()
})
}
},
b = function(a, b) {
a.prototype = new b, a.prototype.constructor = a, a.prototype.parent = b.prototype
};
return a.Player = function() {
var a = this;
a.available = function() {
throw new Error("Not yet implemented")
}, a.play = function() {
throw new Error("Not yet implemented")
}, a.toString = function() {
throw new Error("Not yet implemented")
}
}, a.HTML5Player = function() {
var a = this;
a._available = null, a.available = function(b) {
return null === a._available ? (function(a) {
try {
if ("undefined" == typeof window.Audio) return a(null, !1);
var b = new Audio;
if ("probably" === b.canPlayType("audio/mpeg")) return a(null, !0);
b.addEventListener("canplaythrough", function() {
a(null, !0)
}, !1), b.addEventListener("error", function() {
a(null, !1)
}, !1), b.src = "data:audio/mpeg;base64,/+MYxAAAAANIAUAAAASEEB/jwOFM/0MM/90b/+RhST//w4NFwOjf///PZu////9lns5GFDv//l9GlUIEEIAAAgIg8Ir/JGq3/+MYxDsLIj5QMYcoAP0dv9HIjUcH//yYSg+CIbkGP//8w0bLVjUP///3Z0x5QCAv/yLjwtGKTEFNRTMuOTeqqqqqqqqqqqqq/+MYxEkNmdJkUYc4AKqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq", b.load()
} catch (c) {
a(c)
}
}(function(c, d) {
c && console.log(c), a._available = d, b(a._available)
}), void 0) : (b(a._available), void 0)
}, a.play = function(a, b) {
try {
var c = new Audio;
c.src = a, c.addEventListener("ended", function() {
b()
}), c.play()
} catch (d) {
return b(d)
}
}, a.toString = function() {
return "HTML5 Audio"
}
}, b(a.HTML5Player, a.Player), a.SM2Player = function() {
var a = this;
a._available = null, a._soundId = 0, a._unique_instance_id = parseInt(1e3 * Math.random(), 10), a.available = function(b) {
null === a._available && "undefined" != typeof window.soundManager && "function" == typeof window.soundManager.ok && (a._available = window.soundManager.ok()), b(a._available)
}, a.play = function(b, c) {
try {
window.soundManager.createSound({
id: "googletts-" + a._unique_instance_id + "-" + ++a._soundId,
url: b,
onfinish: c
}).play()
} catch (d) {
c(d)
}
}, a.toString = function() {
return "SoundManager2"
}
}, b(a.SM2Player, a.Player), a
});
!功能(a、b){
“严格使用”;
如果(“函数”==定义的类型)定义(b);
else if(“undefined”!=typeof module&&module.exports)module.exports=b();
否则{
var c=窗口| |此,
d=c[a],
e=b();
e、 noConflict=函数(){
返回c[a]=d,e
},c[a]=e
}
}(“GoogleTTS”,函数(){
“严格使用”;
变量a=函数(b){
var c=这个,
d=100;
c、 defaultLanguage=b | |“en”;
变量e={
af:“南非荷兰语”,
sq:“阿尔巴尼亚语”,
ar:“阿拉伯语”,
hy:“亚美尼亚语”,
ca:“加泰罗尼亚”,
“zh CN”:“普通话(简体)”,
“zh TW”:“普通话(传统)”,
hr:“克罗地亚语”,
政务司司长:“捷克”,
da:“丹麦”,
荷兰:“荷兰语”,
英语“,
eo:“世界语”,
菲:“芬兰语”,
法国:“法语”,
德:“德语”,
埃尔:“希腊语”,
ht:“海地克里奥尔语”,
嗨:“印地语”,
胡:“匈牙利人”,
是:“冰岛语”,
id:“印度尼西亚”,
它是:“意大利语”,
ja:“日语”,
高:“韩语”,
拉丁语“,
lv:“拉脱维亚语”,
mk:“马其顿人”,
否:“挪威语”,
波兰语,
pt:“葡萄牙语”,
罗:“罗马尼亚”,
俄罗斯:“俄罗斯”,
高级:“塞尔维亚人”,
sk:“斯洛伐克”,
es:“西班牙语”,
西南:“斯瓦希里语”,
sv:“瑞典语”,
ta:“泰米尔”,
th:“泰语”,
tr:“土耳其”,
六:“越南语”,
西:“威尔士语”
};
c、 _players=[new a.HTML5Player,new a.SM2Player],c.addPlayer=函数(b){
如果(!(b instanceof a.Player))抛出新错误(“必须是基本Player类的实例”);
c、 _球员。推(b)
},c.languages=function(){
返回e
},c.getPlayer=函数(a){
if(c.availablePlayer)返回a(null,c.availablePlayer);
变量b,d=-1;
(b=函数(){
返回c._players.length=a.length)抛出新错误(“需要一些文本”);
对于(变量e=c.。_)输入(a,d),f=[],g=0;gd);
返回c
},c.播放=功能(a、b、d){
c、 getPlayer(函数(e,f){
如果(e)返回d(e);
如果(!f)返回d(新错误(“没有可用的回放机制”);
var g=c.url(a,b),
h=零;
(h=功能(a){
返回a?d(a):0>=g.length?d():(f.play(g.shift(),h),void 0)
}).call()
})
}
},
b=功能(a,b){
a、 原型=新b,a.prototype.constructor=a,a.prototype.parent=b.prototype
};
返回a.Player=function(){
var a=此;
a、 可用=函数(){
抛出新错误(“尚未实现”)
},a.play=function(){
抛出新错误(“尚未实现”)
},a.toString=函数(){
抛出新错误(“尚未实现”)
}
},a.HTML5Player=function(){
var a=此;
a、 _available=null,a.available=function(b){
返回null==a._可用?(函数(a){
试一试{
if(“undefined”==typeof window.Audio)返回一个(null,!1);
var b=新音频;
if(“可能”==b.canPlayType(“音频/mpeg”))返回a(null,!0);
b、 addEventListener(“canplaythrough”,函数(){
a(空,!0)
},!1),b.addEventListener(“错误”,函数(){
a(空,!1)
}(1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,b,QQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQ
}渔获物(c){
a(c)
}
}(功能(c、d){
c&&console.log(c),a._可用=d,b(a._可用)
}),无效0):(b(a._可用),无效0)
},a.播放=功能(a,b){
试一试{
var c=新音频;
c、 src=a,c.addEventList
! function(a, b) {
"use strict";
if ("function" == typeof define) define(b);
else if ("undefined" != typeof module && module.exports) module.exports = b();
else {
var c = window || this,
d = c[a],
e = b();
e.noConflict = function() {
return c[a] = d, e
}, c[a] = e
}
}("GoogleTTS", function() {
"use strict";
var a = function(b) {
var c = this,
d = 100;
c.defaultLanguage = b || "en";
var e = {
af: "Afrikaans",
sq: "Albanian",
ar: "Arabic",
hy: "Armenian",
ca: "Catalan",
"zh-CN": "Mandarin (simplified)",
"zh-TW": "Mandarin (traditional)",
hr: "Croatian",
cs: "Czech",
da: "Danish",
nl: "Dutch",
en: "English",
eo: "Esperanto",
fi: "Finnish",
fr: "French",
de: "German",
el: "Greek",
ht: "Haitian Creole",
hi: "Hindi",
hu: "Hungarian",
is: "Icelandic",
id: "Indonesian",
it: "Italian",
ja: "Japanese",
ko: "Korean",
la: "Latin",
lv: "Latvian",
mk: "Macedonian",
no: "Norwegian",
pl: "Polish",
pt: "Portuguese",
ro: "Romanian",
ru: "Russian",
sr: "Serbian",
sk: "Slovak",
es: "Spanish",
sw: "Swahili",
sv: "Swedish",
ta: "Tamil",
th: "Thai",
tr: "Turkish",
vi: "Vietnamese",
cy: "Welsh"
};
c._players = [new a.HTML5Player, new a.SM2Player], c.addPlayer = function(b) {
if (!(b instanceof a.Player)) throw new Error("Must be a instance of base Player class");
c._players.push(b)
}, c.languages = function() {
return e
}, c.getPlayer = function(a) {
if (c.availablePlayer) return a(null, c.availablePlayer);
var b, d = -1;
(b = function() {
return c._players.length <= ++d ? a() : (c._players[d].available(function(e) {
return e ? (c.availablePlayer = c._players[d], a(null, c.availablePlayer)) : (b(), void 0)
}), void 0)
}).call()
}, c.urls = function(a, b) {
if (b = b || c.defaultLanguage, !a || 0 >= a.length) throw new Error("Need some text");
for (var e = c._sliceInput(a, d), f = [], g = 0; g < e.length; ++g) {
var h = e[g];
f.push("http://translate.google.com/translate_tts?ie=UTF-8&tl=" + b + "&q=" + h + "&textlen=" + h.length + "&idx=" + g + "&total=" + e.length)
}
return f
}, c._sliceInput = function(a, b) {
var c = [],
d = 0;
do c.push(a.slice(d, d + b)), d += b; while (a.length > d);
return c
}, c.play = function(a, b, d) {
c.getPlayer(function(e, f) {
if (e) return d(e);
if (!f) return d(new Error("No playback mechanism is available"));
var g = c.urls(a, b),
h = null;
(h = function(a) {
return a ? d(a) : 0 >= g.length ? d() : (f.play(g.shift(), h), void 0)
}).call()
})
}
},
b = function(a, b) {
a.prototype = new b, a.prototype.constructor = a, a.prototype.parent = b.prototype
};
return a.Player = function() {
var a = this;
a.available = function() {
throw new Error("Not yet implemented")
}, a.play = function() {
throw new Error("Not yet implemented")
}, a.toString = function() {
throw new Error("Not yet implemented")
}
}, a.HTML5Player = function() {
var a = this;
a._available = null, a.available = function(b) {
return null === a._available ? (function(a) {
try {
if ("undefined" == typeof window.Audio) return a(null, !1);
var b = new Audio;
if ("probably" === b.canPlayType("audio/mpeg")) return a(null, !0);
b.addEventListener("canplaythrough", function() {
a(null, !0)
}, !1), b.addEventListener("error", function() {
a(null, !1)
}, !1), b.src = "data:audio/mpeg;base64,/+MYxAAAAANIAUAAAASEEB/jwOFM/0MM/90b/+RhST//w4NFwOjf///PZu////9lns5GFDv//l9GlUIEEIAAAgIg8Ir/JGq3/+MYxDsLIj5QMYcoAP0dv9HIjUcH//yYSg+CIbkGP//8w0bLVjUP///3Z0x5QCAv/yLjwtGKTEFNRTMuOTeqqqqqqqqqqqqq/+MYxEkNmdJkUYc4AKqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq", b.load()
} catch (c) {
a(c)
}
}(function(c, d) {
c && console.log(c), a._available = d, b(a._available)
}), void 0) : (b(a._available), void 0)
}, a.play = function(a, b) {
try {
var c = new Audio;
c.src = a, c.addEventListener("ended", function() {
b()
}), c.play()
} catch (d) {
return b(d)
}
}, a.toString = function() {
return "HTML5 Audio"
}
}, b(a.HTML5Player, a.Player), a.SM2Player = function() {
var a = this;
a._available = null, a._soundId = 0, a._unique_instance_id = parseInt(1e3 * Math.random(), 10), a.available = function(b) {
null === a._available && "undefined" != typeof window.soundManager && "function" == typeof window.soundManager.ok && (a._available = window.soundManager.ok()), b(a._available)
}, a.play = function(b, c) {
try {
window.soundManager.createSound({
id: "googletts-" + a._unique_instance_id + "-" + ++a._soundId,
url: b,
onfinish: c
}).play()
} catch (d) {
c(d)
}
}, a.toString = function() {
return "SoundManager2"
}
}, b(a.SM2Player, a.Player), a
});
angular.module('yourModule').factory('GoogleTTS', GoogleTTS)
/* @ngInject */
function GoogleTTS($q){
var deferred = $q.defer();
fetch();
function fetch(){
if(window.GoogleTTS != undefined){ //check if GoogleTTS is already loaded
deferred.resolve(window.GoogleTTS); //if loaded, resolve the promise and return the object
}
else{
setTimeout(function(){ //check every second until GoogleTTS is available
fetch();
}, 1000);
}
}
return deferred.promise;
}
(function() {
'use strict';
function SpeechService($window, $http, $rootScope, $q, GoogleTTS) {
var service = {};
service.events = [];
service.Speech = function() {
var speech_text = $rootScope.speech_text.toString();
console.log(speech_text);
console.log(this);
GoogleTTS.then(function(GoogleTTS){
tts = new GoogleTTS();
Say = function(text){
tts.play(text, 'en', function(err) {
if (err) {
alert(err.toString());
}
});
}
Say(speech_text);
});
};
return service
}
angular.module('TestApp')
.factory('SpeechService', SpeechService);
}());