- // Muaz Khan - www.MuazKhan.com
- // MIT License - www.WebRTC-Experiment.com/licence
- // Source Code - github.com/muaz-khan/Translator
- // Demo - www.webrtc-experiment.com/Translator
- function Translator() {
- this.voiceToText = function(callback, language) {
- initTranscript(callback, language);
- };
- this.translateLanguage = function(text, config) {
- config = config || { };
- var api_key = config.api_key;
- var newScript = document.createElement('script');
- newScript.type = 'text/javascript';
- var sourceText = encodeURIComponent(text); // escape
- var randomNumber = 'method' + (Math.random() * new Date().getTime()).toString(36).replace( /\./g , '');
- window[randomNumber] = function(response) {
- if (response.data && response.data.translations[0] && config.callback) {
- config.callback(response.data.translations[0].translatedText);
- return;
- }
- if(response.error && response.error.message == 'Daily Limit Exceeded') {
- config.callback('Google says, "Daily Limit Exceeded". Please try this experiment a few hours later.');
- return;
- }
- if (response.error) {
- console.error(response.error.message);
- return;
- }
- console.error(response);
- };
- var source = 'https://www.googleapis.com/language/translate/v2?key=' + api_key + '&target=' + (config.to || 'en-US') + '&callback=window.' + randomNumber + '&q=' + sourceText;
- newScript.src = source;
- document.getElementsByTagName('head')[0].appendChild(newScript);
- };
- var recognition;
- function initTranscript(callback, language) {
- if (recognition) recognition.stop();
- window.SpeechRecognition = window.SpeechRecognition || window.webkitSpeechRecognition;
- recognition = new SpeechRecognition();
- recognition.lang = language || 'en-US';
- console.log('SpeechRecognition Language', recognition.lang);
- recognition.continuous = true;
- recognition.interimResults = true;
- recognition.onresult = function(event) {
- for (var i = event.resultIndex; i < event.results.length; ++i) {
- if (event.results[i].isFinal) {
- callback(event.results[i][0].transcript);
- }
- }
- };
- recognition.onend = function() {
- if(recognition.dontReTry === true) {
- return;
- }
- initTranscript(callback, language);
- };
- recognition.onerror = function(e) {
- if(e.error === 'audio-capture') {
- recognition.dontReTry = true;
- alert('Failed capturing audio i.e. microphone. Please check console-logs for hints to fix this issue.');
- console.error('No microphone was found. Ensure that a microphone is installed and that microphone settings are configured correctly. https://support.google.com/chrome/bin/answer.py?hl=en&answer=1407892');
- console.error('Original', e.type, e.message.length || e);
- return;
- }
- console.error(e.type, e.error, e.message);
- };
- recognition.start();
- }
- }
Raw Paste