unserver-unify
Version:
243 lines • 7.18 kB
JavaScript
;
angular.module('bamboo').controller('SpeachController', function(ApiService, CommonService, $scope, $timeout) {
var self = this;
var langs = {
'Afrikaans': 'af-ZA',
'አማርኛ': 'am-ET',
'Azərbaycanca': 'az-AZ',
'বাংলা': {
'bn-BD': 'বাংলাদেশ',
'bn-IN': 'ভারত'
},
'Bahasa Indonesia': 'id-ID',
'Bahasa Melayu': 'ms-MY',
'Català': 'ca-ES',
'Čeština': 'cs-CZ',
'Dansk': 'da-DK',
'Deutsch': 'de-DE',
'English': {
'en-AU': 'Australia',
'en-CA': 'Canada',
'en-IN': 'India',
'en-KE': 'Kenya',
'en-TZ': 'Tanzania',
'en-GH': 'Ghana',
'en-NZ': 'New Zealand',
'en-NG': 'Nigeria',
'en-ZA': 'South Africa',
'en-PH': 'Philippines',
'en-GB': 'United Kingdom',
'en-US': 'United States'
},
'Español': {
'es-AR': 'Argentina',
'es-BO': 'Bolivia',
'es-CL': 'Chile',
'es-CO': 'Colombia',
'es-CR': 'Costa Rica',
'es-EC': 'Ecuador',
'es-SV': 'El Salvador',
'es-ES': 'España',
'es-US': 'Estados Unidos',
'es-GT': 'Guatemala',
'es-HN': 'Honduras',
'es-MX': 'México',
'es-NI': 'Nicaragua',
'es-PA': 'Panamá',
'es-PY': 'Paraguay',
'es-PE': 'Perú',
'es-PR': 'Puerto Rico',
'es-DO': 'República Dominicana',
'es-UY': 'Uruguay',
'es-VE': 'Venezuela'
},
'Euskara': 'eu-ES',
'Filipino': 'fil-PH',
'Français': 'fr-FR',
'Basa Jawa': 'jv-ID',
'Galego': 'gl-ES',
'ગુજરાતી': 'gu-IN',
'Hrvatski': 'hr-HR',
'IsiZulu': 'zu-ZA',
'Íslenska': 'is-IS',
'Italiano': {
'it-IT': 'Italia',
'it-CH': 'Svizzera'
},
'ಕನ್ನಡ': 'kn-IN',
'ភាសាខ្មែរ': 'km-KH',
'Latviešu': 'lv-LV',
'Lietuvių': 'lt-LT',
'മലയാളം': 'ml-IN',
'मराठी': 'mr-IN',
'Magyar': 'hu-HU',
'ລາວ': 'lo-LA',
'Nederlands': 'nl-NL',
'नेपाली भाषा': 'ne-NP',
'Norsk bokmål': 'nb-NO',
'Polski': 'pl-PL',
'Português': {
'pt-BR': 'Brasil',
'pt-PT': 'Portugal'
},
'Română': 'ro-RO',
'සිංහල': 'si-LK',
'Slovenščina': 'sl-SI',
'Basa Sunda': 'su-ID',
'Slovenčina': 'sk-SK',
'Suomi': 'fi-FI',
'Svenska': 'sv-SE',
'Kiswahili': {
'sw-TZ': 'Tanzania',
'sw-KE': 'Kenya'
},
'ქართული': 'ka-GE',
'Հայերեն': 'hy-AM',
'தமிழ்': {
'ta-IN': 'இந்தியா',
'ta-SG': 'சிங்கப்பூர்',
'ta-LK': 'இலங்கை',
'ta-MY': 'மலேசியா',
},
'తెలుగు': 'te-IN',
'Tiếng Việt': 'vi-VN',
'Türkçe': 'tr-TR',
'اُردُو': {
'ur-PK': 'پاکستان',
'ur-IN': 'بھارت'
},
'Ελληνικά': 'el-GR',
'български': 'bg-BG',
'Pусский': 'ru-RU',
'Српски': 'sr-RS',
'Українська': 'uk-UA',
'한국어': 'ko-KR',
'中文': {
'cmn-Hans-CN': '普通话 (中国大陆)',
'cmn-Hans-HK': '普通话 (香港)',
'cmn-Hant-TW': '中文 (台灣)',
'yue-Hant-HK': '粵語 (香港)'
},
'日本語': 'ja-JP',
'हिन्दी': 'hi-IN',
'ภาษาไทย': 'th-TH'
};
this.languageList = [];
angular.forEach(langs, function(val, key) {
var option = {
name: key,
val: val,
}
self.languageList.push(option);
})
console.log(this.languageList);
this.dialectList = [];
var selectLanguage;
this.LanguageUsed;
this.change = function(item) {
console.log(item);
self.dialectList = [];
if (typeof item.val === 'string') {
console.log('languange found', item.val);
selectLanguage = item.val;
self.LanguageUsed = item.name;
} else if (typeof item.val === 'object') {
console.log("json found");
angular.forEach(item.val, function(val, key) {
var option = {
name: val,
val: key,
}
self.dialectList.push(option);
})
console.log(self.dialectList);
}
// console.log(self.selected);
}
this.changeDialet = function(item) {
selectLanguage = item.val;
self.LanguageUsed = item.name;
console.log('languange found', item.val);
}
this.final_transcript="";
this.interim_transcript="";
var start_timestamp;
this.recognizing = false;
var recognition = new webkitSpeechRecognition();
recognition.continuous = true;
recognition.interimResults = true;
recognition.onstart = function() {
self.recognizing = true;
$scope.$apply();
// CommonService.showInfo('Started');
console.log("started");
// start_img.src = '/intl/en/chrome/assets/common/images/content/mic-animate.gif';
};
recognition.onerror = function(event) {
if (event.error == 'no-speech') {
CommonService.showError('Speech function is not supported by your browser!')
}
if (event.error == 'audio-capture') {
CommonService.showError('Can not get your mic!')
}
if (event.error == 'not-allowed') {
if (event.timeStamp - start_timestamp < 100) {
CommonService.showError('Mic is blocked');
} else {
CommonService.showError('Mic is Denied');
}
}
};
recognition.onend = function() {
self.recognizing = false;
$scope.$apply();
console.log();
if (!self.final_transcript) {
CommonService.showInfo('Nothing decoded');
return;
}
// CommonService.showInfo('Stoped');
};
recognition.onresult = function(event) {
// var interim_transcript = '';
// console.log(event.results);
if (typeof(event.results) == 'undefined') {
recognition.onend = null;
recognition.stop();
CommonService.showError('Sth wrong!');
return;
}
for (var i = event.resultIndex; i < event.results.length; ++i) {
if (event.results[i].isFinal) {
console.log(event.results[i][0]);
self.final_transcript += event.results[i][0].transcript +" "+ parseInt(event.results[i][0].confidence*100)+'% '
} else {
self.interim_transcript = event.results[i][0].transcript;
}
}
$timeout(function() {
console.log(self.final_transcript);
}, 10);
/* final_transcript = capitalize(final_transcript);
if (final_transcript || interim_transcript) {
showButtons('inline-block');
}*/
};
this.start = function(event) {
if (!selectLanguage) {
CommonService.showError('No Language selected!')
return;
}
self.final_transcript = '';
recognition.lang = selectLanguage;
recognition.start();
start_timestamp = new Date();
console.log("Started");
}
this.stop=function(){
if (self.recognizing) {
recognition.stop();
return;
}
}
});