|
|
|
|
@@ -1,19 +1,29 @@
|
|
|
|
|
'use strict';
|
|
|
|
|
|
|
|
|
|
let isWebkitSpeechRecognitionSupported = false;
|
|
|
|
|
let recognition;
|
|
|
|
|
let isVoiceCommandsEnabled = true;
|
|
|
|
|
let browserLanguage = navigator.language || navigator.userLanguage;
|
|
|
|
|
let isVoiceCommandSupported = browserLanguage.includes('en-') || browserLanguage.includes('bn-');
|
|
|
|
|
let currentLanguage = 'en';
|
|
|
|
|
let currentLangCode = 'en-US';
|
|
|
|
|
|
|
|
|
|
const browserLanguage = navigator.language || navigator.userLanguage;
|
|
|
|
|
|
|
|
|
|
const isVoiceCommandSupported =
|
|
|
|
|
browserLanguage.includes('en-') ||
|
|
|
|
|
browserLanguage.includes('bn-') ||
|
|
|
|
|
browserLanguage.includes('es-') ||
|
|
|
|
|
browserLanguage.includes('fr-') ||
|
|
|
|
|
browserLanguage.includes('it-') ||
|
|
|
|
|
browserLanguage.includes('de-') ||
|
|
|
|
|
browserLanguage.includes('ja-') ||
|
|
|
|
|
browserLanguage.includes('pt-') ||
|
|
|
|
|
browserLanguage.includes('zh-') ||
|
|
|
|
|
browserLanguage.includes('ar-');
|
|
|
|
|
|
|
|
|
|
const speechRecognition = window.SpeechRecognition || window.webkitSpeechRecognition;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Enable real-time voice recognition in the chat, allowing you to execute commands using your voice.
|
|
|
|
|
* Note: Currently, it supports only the English and Bangla language.
|
|
|
|
|
* TODO add more languages...
|
|
|
|
|
* const supportedLanguages = ['en', 'bn', 'es', 'fr', 'it', 'de', 'ja', 'pt', 'zh', 'ar'];
|
|
|
|
|
*/
|
|
|
|
|
const languageHandlers = {
|
|
|
|
|
en: {
|
|
|
|
|
@@ -72,7 +82,15 @@ const languageHandlers = {
|
|
|
|
|
tiktok: 'open tiktok',
|
|
|
|
|
github: 'open github',
|
|
|
|
|
survey: 'open survey',
|
|
|
|
|
recognizeBangla: 'recognise bangla',
|
|
|
|
|
recognizeBangla: 'recognize bangla',
|
|
|
|
|
recognizeItalian: 'recognize italian',
|
|
|
|
|
recognizeSpanish: 'recognize spanish',
|
|
|
|
|
recognizeFrench: 'recognize french',
|
|
|
|
|
recognizeGerman: 'recognize german',
|
|
|
|
|
recognizeJapanese: 'recognize japanese',
|
|
|
|
|
recognizePortuguese: 'recognize portuguese',
|
|
|
|
|
recognizeChinese: 'recognize chinese',
|
|
|
|
|
recognizeArabic: 'recognize arabic',
|
|
|
|
|
stopRecognition: 'stop the voice recognition',
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
@@ -133,9 +151,569 @@ const languageHandlers = {
|
|
|
|
|
github: 'গিটহাব খুলো',
|
|
|
|
|
survey: 'সার্ভে খুলো',
|
|
|
|
|
recognizeEnglish: 'ইংরেজিতে করো',
|
|
|
|
|
recognizeItalian: 'ইতালীয় চেনা',
|
|
|
|
|
recognizeSpanish: 'স্পেনীয় চেনা',
|
|
|
|
|
recognizeFrench: 'ফরাসি চেনা',
|
|
|
|
|
recognizeGerman: 'জার্মান চেনা',
|
|
|
|
|
recognizeJapanese: 'জাপানি চেনা',
|
|
|
|
|
recognizePortuguese: 'পর্তুগিজ চেনা',
|
|
|
|
|
recognizeChinese: 'চীনা চেনা',
|
|
|
|
|
recognizeArabic: 'আরবি চেনা',
|
|
|
|
|
stopRecognition: 'ভয়েস রিকগনিশন বন্ধ করো',
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
es: {
|
|
|
|
|
langCode: 'es-ES',
|
|
|
|
|
commands: {
|
|
|
|
|
shareRoom: 'compartir sala',
|
|
|
|
|
hideMe: 'esconderme',
|
|
|
|
|
showMe: 'muéstrame',
|
|
|
|
|
newRoom: 'nueva sala',
|
|
|
|
|
leaveRoom: 'salir de la sala',
|
|
|
|
|
audioOn: 'activar audio',
|
|
|
|
|
audioOff: 'desactivar audio',
|
|
|
|
|
videoOn: 'activar video',
|
|
|
|
|
videoOff: 'desactivar video',
|
|
|
|
|
screenOn: 'activar pantalla',
|
|
|
|
|
screenOff: 'desactivar pantalla',
|
|
|
|
|
chatOn: 'abrir chat',
|
|
|
|
|
chatSend: 'enviar',
|
|
|
|
|
chatOff: 'cerrar chat',
|
|
|
|
|
pollOn: 'abrir encuesta',
|
|
|
|
|
pollOff: 'cerrar encuesta',
|
|
|
|
|
editorOn: 'abrir editor',
|
|
|
|
|
editorOff: 'cerrar editor',
|
|
|
|
|
toggleTr: 'alternar transcripción',
|
|
|
|
|
whiteboardOn: 'abrir pizarra',
|
|
|
|
|
whiteboardOff: 'cerrar pizarra',
|
|
|
|
|
snapshotRoom: 'capturar sala',
|
|
|
|
|
recordingOn: 'comenzar grabación',
|
|
|
|
|
recordingPause: 'pausar grabación',
|
|
|
|
|
recordingResume: 'reanudar grabación',
|
|
|
|
|
recordingOff: 'detener grabación',
|
|
|
|
|
settingsOn: 'abrir configuraciones',
|
|
|
|
|
settingsOff: 'cerrar configuraciones',
|
|
|
|
|
participantsOn: 'mostrar participantes',
|
|
|
|
|
participantsOff: 'ocultar participantes',
|
|
|
|
|
participantsVideoOff: 'desactivar video de participantes',
|
|
|
|
|
participantsAudioOff: 'desactivar audio de participantes',
|
|
|
|
|
participantsKickOut: 'expulsar participantes',
|
|
|
|
|
fileShareOn: 'abrir archivo',
|
|
|
|
|
fileShareOff: 'cerrar archivo',
|
|
|
|
|
videoShareOn: 'compartir video',
|
|
|
|
|
videoShareOff: 'dejar de compartir video',
|
|
|
|
|
swapCamera: 'cambiar cámara',
|
|
|
|
|
raiseHand: 'levantar la mano',
|
|
|
|
|
lowerHand: 'bajar la mano',
|
|
|
|
|
roomLock: 'bloquear la sala',
|
|
|
|
|
roomUnlock: 'desbloquear la sala',
|
|
|
|
|
about: 'mostrar información',
|
|
|
|
|
email: 'abrir correo',
|
|
|
|
|
google: 'abrir google',
|
|
|
|
|
googleTr: 'abrir google translate',
|
|
|
|
|
youtube: 'abrir youtube',
|
|
|
|
|
facebook: 'abrir facebook',
|
|
|
|
|
linkedin: 'abrir linkedin',
|
|
|
|
|
twitter: 'abrir twitter',
|
|
|
|
|
tiktok: 'abrir tiktok',
|
|
|
|
|
github: 'abrir github',
|
|
|
|
|
survey: 'abrir encuesta',
|
|
|
|
|
recognizeEnglish: 'reconocer inglés',
|
|
|
|
|
recognizeBangla: 'reconocer bengalí',
|
|
|
|
|
recognizeItalian: 'reconocer italiano',
|
|
|
|
|
recognizeSpanish: 'reconocer español',
|
|
|
|
|
recognizeFrench: 'reconocer francés',
|
|
|
|
|
recognizeGerman: 'reconocer alemán',
|
|
|
|
|
recognizeJapanese: 'reconocer japonés',
|
|
|
|
|
recognizePortuguese: 'reconocer portugués',
|
|
|
|
|
recognizeChinese: 'reconocer chino',
|
|
|
|
|
recognizeArabic: 'reconocer árabe',
|
|
|
|
|
stopRecognition: 'detener el reconocimiento de voz',
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
fr: {
|
|
|
|
|
langCode: 'fr-FR',
|
|
|
|
|
commands: {
|
|
|
|
|
shareRoom: 'partager la salle',
|
|
|
|
|
hideMe: 'cachez-moi',
|
|
|
|
|
showMe: 'montrez-moi',
|
|
|
|
|
newRoom: 'nouvelle salle',
|
|
|
|
|
leaveRoom: 'quitter la salle',
|
|
|
|
|
audioOn: "activer l'audio",
|
|
|
|
|
audioOff: "désactiver l'audio",
|
|
|
|
|
videoOn: 'activer la vidéo',
|
|
|
|
|
videoOff: 'désactiver la vidéo',
|
|
|
|
|
screenOn: "activer l'écran",
|
|
|
|
|
screenOff: "désactiver l'écran",
|
|
|
|
|
chatOn: 'ouvrir le chat',
|
|
|
|
|
chatSend: 'envoyer',
|
|
|
|
|
chatOff: 'fermer le chat',
|
|
|
|
|
pollOn: 'ouvrir le sondage',
|
|
|
|
|
pollOff: 'fermer le sondage',
|
|
|
|
|
editorOn: "ouvrir l'éditeur",
|
|
|
|
|
editorOff: "fermer l'éditeur",
|
|
|
|
|
toggleTr: 'basculer la transcription',
|
|
|
|
|
whiteboardOn: 'ouvrir le tableau blanc',
|
|
|
|
|
whiteboardOff: 'fermer le tableau blanc',
|
|
|
|
|
snapshotRoom: 'prendre une capture de la salle',
|
|
|
|
|
recordingOn: "commencer l'enregistrement",
|
|
|
|
|
recordingPause: "mettre en pause l'enregistrement",
|
|
|
|
|
recordingResume: "reprendre l'enregistrement",
|
|
|
|
|
recordingOff: "arrêter l'enregistrement",
|
|
|
|
|
settingsOn: 'ouvrir les paramètres',
|
|
|
|
|
settingsOff: 'fermer les paramètres',
|
|
|
|
|
participantsOn: 'afficher les participants',
|
|
|
|
|
participantsOff: 'masquer les participants',
|
|
|
|
|
participantsVideoOff: 'désactiver la vidéo des participants',
|
|
|
|
|
participantsAudioOff: "désactiver l'audio des participants",
|
|
|
|
|
participantsKickOut: 'expulser les participants',
|
|
|
|
|
fileShareOn: 'ouvrir le fichier',
|
|
|
|
|
fileShareOff: 'fermer le fichier',
|
|
|
|
|
videoShareOn: 'partager la vidéo',
|
|
|
|
|
videoShareOff: 'arrêter le partage de la vidéo',
|
|
|
|
|
swapCamera: 'changer de caméra',
|
|
|
|
|
raiseHand: 'lever la main',
|
|
|
|
|
lowerHand: 'baisser la main',
|
|
|
|
|
roomLock: 'verrouiller la salle',
|
|
|
|
|
roomUnlock: 'déverrouiller la salle',
|
|
|
|
|
about: 'montrer à propos',
|
|
|
|
|
email: 'ouvrir email',
|
|
|
|
|
google: 'ouvrir google',
|
|
|
|
|
googleTr: 'ouvrir google translate',
|
|
|
|
|
youtube: 'ouvrir youtube',
|
|
|
|
|
facebook: 'ouvrir facebook',
|
|
|
|
|
linkedin: 'ouvrir linkedin',
|
|
|
|
|
twitter: 'ouvrir twitter',
|
|
|
|
|
tiktok: 'ouvrir tiktok',
|
|
|
|
|
github: 'ouvrir github',
|
|
|
|
|
survey: 'ouvrir enquête',
|
|
|
|
|
recognizeEnglish: 'reconnaître anglais',
|
|
|
|
|
recognizeBangla: 'reconnaître bengali',
|
|
|
|
|
recognizeItalian: 'reconnaître italien',
|
|
|
|
|
recognizeSpanish: 'reconnaître espagnol',
|
|
|
|
|
recognizeFrench: 'reconnaître français',
|
|
|
|
|
recognizeGerman: 'reconnaître allemand',
|
|
|
|
|
recognizeJapanese: 'reconnaître japonais',
|
|
|
|
|
recognizePortuguese: 'reconnaître portugais',
|
|
|
|
|
recognizeChinese: 'reconnaître chinois',
|
|
|
|
|
recognizeArabic: 'reconnaître arabe',
|
|
|
|
|
stopRecognition: 'arrêter la reconnaissance vocale',
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
it: {
|
|
|
|
|
langCode: 'it-IT',
|
|
|
|
|
commands: {
|
|
|
|
|
shareRoom: 'condividi sala',
|
|
|
|
|
hideMe: 'nascondimi',
|
|
|
|
|
showMe: 'fammi vedere',
|
|
|
|
|
newRoom: 'nuova sala',
|
|
|
|
|
leaveRoom: 'esci dalla sala',
|
|
|
|
|
audioOn: 'attiva audio',
|
|
|
|
|
audioOff: 'disattiva audio',
|
|
|
|
|
videoOn: 'attiva video',
|
|
|
|
|
videoOff: 'disattiva video',
|
|
|
|
|
screenOn: 'attiva schermo',
|
|
|
|
|
screenOff: 'disattiva schermo',
|
|
|
|
|
chatOn: 'apri chat',
|
|
|
|
|
chatSend: 'invia',
|
|
|
|
|
chatOff: 'chiudi chat',
|
|
|
|
|
pollOn: 'apri sondaggio',
|
|
|
|
|
pollOff: 'chiudi sondaggio',
|
|
|
|
|
editorOn: 'apri editor',
|
|
|
|
|
editorOff: 'chiudi editor',
|
|
|
|
|
toggleTr: 'attiva/disattiva trascrizione',
|
|
|
|
|
whiteboardOn: 'apri lavagna',
|
|
|
|
|
whiteboardOff: 'chiudi lavagna',
|
|
|
|
|
snapshotRoom: 'scatta foto della sala',
|
|
|
|
|
recordingOn: 'avvia registrazione',
|
|
|
|
|
recordingPause: 'metti in pausa registrazione',
|
|
|
|
|
recordingResume: 'riprendi registrazione',
|
|
|
|
|
recordingOff: 'ferma registrazione',
|
|
|
|
|
settingsOn: 'apri impostazioni',
|
|
|
|
|
settingsOff: 'chiudi impostazioni',
|
|
|
|
|
participantsOn: 'mostra partecipanti',
|
|
|
|
|
participantsOff: 'nascondi partecipanti',
|
|
|
|
|
participantsVideoOff: 'disattiva video partecipanti',
|
|
|
|
|
participantsAudioOff: 'disattiva audio partecipanti',
|
|
|
|
|
participantsKickOut: 'espelli partecipanti',
|
|
|
|
|
fileShareOn: 'apri file',
|
|
|
|
|
fileShareOff: 'chiudi file',
|
|
|
|
|
videoShareOn: 'condividi video',
|
|
|
|
|
videoShareOff: 'interrompi condivisione video',
|
|
|
|
|
swapCamera: 'cambia fotocamera',
|
|
|
|
|
raiseHand: 'alza mano',
|
|
|
|
|
lowerHand: 'abbassa mano',
|
|
|
|
|
roomLock: 'blocca sala',
|
|
|
|
|
roomUnlock: 'sblocca sala',
|
|
|
|
|
about: 'mostra informazioni',
|
|
|
|
|
email: 'apri email',
|
|
|
|
|
google: 'apri google',
|
|
|
|
|
googleTr: 'apri google translate',
|
|
|
|
|
youtube: 'apri youtube',
|
|
|
|
|
facebook: 'apri facebook',
|
|
|
|
|
linkedin: 'apri linkedin',
|
|
|
|
|
twitter: 'apri twitter',
|
|
|
|
|
tiktok: 'apri tiktok',
|
|
|
|
|
github: 'apri github',
|
|
|
|
|
survey: 'apri sondaggio',
|
|
|
|
|
recognizeEnglish: 'riconoscere inglese',
|
|
|
|
|
recognizeBangla: 'riconoscere bengalese',
|
|
|
|
|
recognizeItalian: 'riconoscere italiano',
|
|
|
|
|
recognizeSpanish: 'riconoscere spagnolo',
|
|
|
|
|
recognizeFrench: 'riconoscere francese',
|
|
|
|
|
recognizeGerman: 'riconoscere tedesco',
|
|
|
|
|
recognizeJapanese: 'riconoscere giapponese',
|
|
|
|
|
recognizePortuguese: 'riconoscere portoghese',
|
|
|
|
|
recognizeChinese: 'riconoscere cinese',
|
|
|
|
|
recognizeArabic: 'riconoscere arabo',
|
|
|
|
|
stopRecognition: 'ferma riconoscimento vocale',
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
de: {
|
|
|
|
|
langCode: 'de-DE',
|
|
|
|
|
commands: {
|
|
|
|
|
shareRoom: 'Raum teilen',
|
|
|
|
|
hideMe: 'verstecke mich',
|
|
|
|
|
showMe: 'zeige mich',
|
|
|
|
|
newRoom: 'neuer Raum',
|
|
|
|
|
leaveRoom: 'Raum verlassen',
|
|
|
|
|
audioOn: 'Audio aktivieren',
|
|
|
|
|
audioOff: 'Audio deaktivieren',
|
|
|
|
|
videoOn: 'Video aktivieren',
|
|
|
|
|
videoOff: 'Video deaktivieren',
|
|
|
|
|
screenOn: 'Bildschirm aktivieren',
|
|
|
|
|
screenOff: 'Bildschirm deaktivieren',
|
|
|
|
|
chatOn: 'Chat öffnen',
|
|
|
|
|
chatSend: 'senden',
|
|
|
|
|
chatOff: 'Chat schließen',
|
|
|
|
|
pollOn: 'Umfrage öffnen',
|
|
|
|
|
pollOff: 'Umfrage schließen',
|
|
|
|
|
editorOn: 'Editor öffnen',
|
|
|
|
|
editorOff: 'Editor schließen',
|
|
|
|
|
toggleTr: 'Transkription umschalten',
|
|
|
|
|
whiteboardOn: 'Whiteboard öffnen',
|
|
|
|
|
whiteboardOff: 'Whiteboard schließen',
|
|
|
|
|
snapshotRoom: 'Raum schnappen',
|
|
|
|
|
recordingOn: 'Aufnahme starten',
|
|
|
|
|
recordingPause: 'Aufnahme pausieren',
|
|
|
|
|
recordingResume: 'Aufnahme fortsetzen',
|
|
|
|
|
recordingOff: 'Aufnahme stoppen',
|
|
|
|
|
settingsOn: 'Einstellungen öffnen',
|
|
|
|
|
settingsOff: 'Einstellungen schließen',
|
|
|
|
|
participantsOn: 'Teilnehmer anzeigen',
|
|
|
|
|
participantsOff: 'Teilnehmer verstecken',
|
|
|
|
|
participantsVideoOff: 'Teilnehmer Video deaktivieren',
|
|
|
|
|
participantsAudioOff: 'Teilnehmer Audio deaktivieren',
|
|
|
|
|
participantsKickOut: 'Teilnehmer rauswerfen',
|
|
|
|
|
fileShareOn: 'Datei öffnen',
|
|
|
|
|
fileShareOff: 'Datei schließen',
|
|
|
|
|
videoShareOn: 'Video teilen',
|
|
|
|
|
videoShareOff: 'Video teilen stoppen',
|
|
|
|
|
swapCamera: 'Kamera wechseln',
|
|
|
|
|
raiseHand: 'Hand heben',
|
|
|
|
|
lowerHand: 'Hand senken',
|
|
|
|
|
roomLock: 'Raum sperren',
|
|
|
|
|
roomUnlock: 'Raum entsperren',
|
|
|
|
|
about: 'Info anzeigen',
|
|
|
|
|
email: 'E-Mail öffnen',
|
|
|
|
|
google: 'Google öffnen',
|
|
|
|
|
googleTr: 'Google Übersetzer öffnen',
|
|
|
|
|
youtube: 'YouTube öffnen',
|
|
|
|
|
facebook: 'Facebook öffnen',
|
|
|
|
|
linkedin: 'LinkedIn öffnen',
|
|
|
|
|
twitter: 'Twitter öffnen',
|
|
|
|
|
tiktok: 'TikTok öffnen',
|
|
|
|
|
github: 'GitHub öffnen',
|
|
|
|
|
survey: 'Umfrage öffnen',
|
|
|
|
|
recognizeEnglish: 'Englisch erkennen',
|
|
|
|
|
recognizeBangla: 'Bangla erkennen',
|
|
|
|
|
recognizeItalian: 'Italienisch erkennen',
|
|
|
|
|
recognizeSpanish: 'Spanisch erkennen',
|
|
|
|
|
recognizeFrench: 'Französisch erkennen',
|
|
|
|
|
recognizeGerman: 'Deutsch erkennen',
|
|
|
|
|
recognizeJapanese: 'Japanisch erkennen',
|
|
|
|
|
recognizePortuguese: 'Portugiesisch erkennen',
|
|
|
|
|
recognizeChinese: 'Chinesisch erkennen',
|
|
|
|
|
recognizeArabic: 'Arabisch erkennen',
|
|
|
|
|
stopRecognition: 'Spracherkennung stoppen',
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
pt: {
|
|
|
|
|
langCode: 'pt-BR',
|
|
|
|
|
commands: {
|
|
|
|
|
shareRoom: 'compartilhar sala',
|
|
|
|
|
hideMe: 'me esconda',
|
|
|
|
|
showMe: 'me mostre',
|
|
|
|
|
newRoom: 'nova sala',
|
|
|
|
|
leaveRoom: 'sair da sala',
|
|
|
|
|
audioOn: 'ativar áudio',
|
|
|
|
|
audioOff: 'desativar áudio',
|
|
|
|
|
videoOn: 'ativar vídeo',
|
|
|
|
|
videoOff: 'desativar vídeo',
|
|
|
|
|
screenOn: 'ativar tela',
|
|
|
|
|
screenOff: 'desativar tela',
|
|
|
|
|
chatOn: 'abrir chat',
|
|
|
|
|
chatSend: 'enviar',
|
|
|
|
|
chatOff: 'fechar chat',
|
|
|
|
|
pollOn: 'abrir enquete',
|
|
|
|
|
pollOff: 'fechar enquete',
|
|
|
|
|
editorOn: 'abrir editor',
|
|
|
|
|
editorOff: 'fechar editor',
|
|
|
|
|
toggleTr: 'alternar transcrição',
|
|
|
|
|
whiteboardOn: 'abrir quadro branco',
|
|
|
|
|
whiteboardOff: 'fechar quadro branco',
|
|
|
|
|
snapshotRoom: 'tirar foto da sala',
|
|
|
|
|
recordingOn: 'iniciar gravação',
|
|
|
|
|
recordingPause: 'pausar gravação',
|
|
|
|
|
recordingResume: 'retomar gravação',
|
|
|
|
|
recordingOff: 'parar gravação',
|
|
|
|
|
settingsOn: 'abrir configurações',
|
|
|
|
|
settingsOff: 'fechar configurações',
|
|
|
|
|
participantsOn: 'mostrar participantes',
|
|
|
|
|
participantsOff: 'ocultar participantes',
|
|
|
|
|
participantsVideoOff: 'desativar vídeo dos participantes',
|
|
|
|
|
participantsAudioOff: 'desativar áudio dos participantes',
|
|
|
|
|
participantsKickOut: 'expulsar participantes',
|
|
|
|
|
fileShareOn: 'abrir arquivo',
|
|
|
|
|
fileShareOff: 'fechar arquivo',
|
|
|
|
|
videoShareOn: 'compartilhar vídeo',
|
|
|
|
|
videoShareOff: 'parar de compartilhar vídeo',
|
|
|
|
|
swapCamera: 'trocar câmera',
|
|
|
|
|
raiseHand: 'levantar mão',
|
|
|
|
|
lowerHand: 'abaixar mão',
|
|
|
|
|
roomLock: 'trancar sala',
|
|
|
|
|
roomUnlock: 'destrancar sala',
|
|
|
|
|
about: 'mostrar sobre',
|
|
|
|
|
email: 'abrir e-mail',
|
|
|
|
|
google: 'abrir google',
|
|
|
|
|
googleTr: 'abrir google translate',
|
|
|
|
|
youtube: 'abrir youtube',
|
|
|
|
|
facebook: 'abrir facebook',
|
|
|
|
|
linkedin: 'abrir linkedin',
|
|
|
|
|
twitter: 'abrir twitter',
|
|
|
|
|
tiktok: 'abrir tiktok',
|
|
|
|
|
github: 'abrir github',
|
|
|
|
|
survey: 'abrir pesquisa',
|
|
|
|
|
recognizeEnglish: 'reconhecer inglês',
|
|
|
|
|
recognizeBangla: 'reconhecer bengali',
|
|
|
|
|
recognizeItalian: 'reconhecer italiano',
|
|
|
|
|
recognizeSpanish: 'reconhecer espanhol',
|
|
|
|
|
recognizeFrench: 'reconhecer francês',
|
|
|
|
|
recognizeGerman: 'reconhecer alemão',
|
|
|
|
|
recognizeJapanese: 'reconhecer japonês',
|
|
|
|
|
recognizePortuguese: 'reconhecer português',
|
|
|
|
|
recognizeChinese: 'reconhecer chinês',
|
|
|
|
|
recognizeArabic: 'reconhecer árabe',
|
|
|
|
|
stopRecognition: 'parar reconhecimento de voz',
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
ja: {
|
|
|
|
|
langCode: 'ja-JP',
|
|
|
|
|
commands: {
|
|
|
|
|
shareRoom: 'ルームを共有',
|
|
|
|
|
hideMe: '私を隠す',
|
|
|
|
|
showMe: '私を見せる',
|
|
|
|
|
newRoom: '新しいルーム',
|
|
|
|
|
leaveRoom: 'ルームを退出',
|
|
|
|
|
audioOn: 'オーディオを開始',
|
|
|
|
|
audioOff: 'オーディオを停止',
|
|
|
|
|
videoOn: 'ビデオを開始',
|
|
|
|
|
videoOff: 'ビデオを停止',
|
|
|
|
|
screenOn: '画面共有を開始',
|
|
|
|
|
screenOff: '画面共有を停止',
|
|
|
|
|
chatOn: 'チャットを開く',
|
|
|
|
|
chatSend: '送信',
|
|
|
|
|
chatOff: 'チャットを閉じる',
|
|
|
|
|
pollOn: '投票を開く',
|
|
|
|
|
pollOff: '投票を閉じる',
|
|
|
|
|
editorOn: 'エディターを開く',
|
|
|
|
|
editorOff: 'エディターを閉じる',
|
|
|
|
|
toggleTr: '文字起こしを切り替え',
|
|
|
|
|
whiteboardOn: 'ホワイトボードを開く',
|
|
|
|
|
whiteboardOff: 'ホワイトボードを閉じる',
|
|
|
|
|
snapshotRoom: 'ルームのスナップショット',
|
|
|
|
|
recordingOn: '録画を開始',
|
|
|
|
|
recordingPause: '録画を一時停止',
|
|
|
|
|
recordingResume: '録画を再開',
|
|
|
|
|
recordingOff: '録画を停止',
|
|
|
|
|
settingsOn: '設定を開く',
|
|
|
|
|
settingsOff: '設定を閉じる',
|
|
|
|
|
participantsOn: '参加者を表示',
|
|
|
|
|
participantsOff: '参加者を非表示',
|
|
|
|
|
participantsVideoOff: '参加者のビデオを停止',
|
|
|
|
|
participantsAudioOff: '参加者のオーディオを停止',
|
|
|
|
|
participantsKickOut: '参加者を退出させる',
|
|
|
|
|
fileShareOn: 'ファイルを開く',
|
|
|
|
|
fileShareOff: 'ファイルを閉じる',
|
|
|
|
|
videoShareOn: 'ビデオを共有',
|
|
|
|
|
videoShareOff: 'ビデオ共有を停止',
|
|
|
|
|
swapCamera: 'カメラを切り替え',
|
|
|
|
|
raiseHand: '手を上げる',
|
|
|
|
|
lowerHand: '手を下げる',
|
|
|
|
|
roomLock: 'ルームをロック',
|
|
|
|
|
roomUnlock: 'ルームをアンロック',
|
|
|
|
|
about: '情報を表示',
|
|
|
|
|
email: 'メールを開く',
|
|
|
|
|
google: 'Googleを開く',
|
|
|
|
|
googleTr: 'Google翻訳を開く',
|
|
|
|
|
youtube: 'YouTubeを開く',
|
|
|
|
|
facebook: 'Facebookを開く',
|
|
|
|
|
linkedin: 'LinkedInを開く',
|
|
|
|
|
twitter: 'Twitterを開く',
|
|
|
|
|
tiktok: 'TikTokを開く',
|
|
|
|
|
github: 'GitHubを開く',
|
|
|
|
|
survey: 'アンケートを開く',
|
|
|
|
|
recognizeEnglish: '英語に切り替え',
|
|
|
|
|
recognizeBangla: 'ベンガル語に切り替え',
|
|
|
|
|
recognizeItalian: 'イタリア語に切り替え',
|
|
|
|
|
recognizeSpanish: 'スペイン語に切り替え',
|
|
|
|
|
recognizeFrench: 'フランス語に切り替え',
|
|
|
|
|
recognizeGerman: 'ドイツ語に切り替え',
|
|
|
|
|
recognizeJapanese: '日本語に切り替え',
|
|
|
|
|
recognizePortuguese: 'ポルトガル語に切り替え',
|
|
|
|
|
recognizeChinese: '中国語に切り替え',
|
|
|
|
|
recognizeArabic: 'アラビア語に切り替え',
|
|
|
|
|
stopRecognition: '音声認識を停止',
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
zh: {
|
|
|
|
|
langCode: 'zh-CN',
|
|
|
|
|
commands: {
|
|
|
|
|
shareRoom: '分享房间',
|
|
|
|
|
hideMe: '隐藏我',
|
|
|
|
|
showMe: '展示我',
|
|
|
|
|
newRoom: '新房间',
|
|
|
|
|
leaveRoom: '离开房间',
|
|
|
|
|
audioOn: '开启音频',
|
|
|
|
|
audioOff: '关闭音频',
|
|
|
|
|
videoOn: '开启视频',
|
|
|
|
|
videoOff: '关闭视频',
|
|
|
|
|
screenOn: '开启屏幕共享',
|
|
|
|
|
screenOff: '关闭屏幕共享',
|
|
|
|
|
chatOn: '打开聊天',
|
|
|
|
|
chatSend: '发送',
|
|
|
|
|
chatOff: '关闭聊天',
|
|
|
|
|
pollOn: '开启投票',
|
|
|
|
|
pollOff: '关闭投票',
|
|
|
|
|
editorOn: '开启编辑器',
|
|
|
|
|
editorOff: '关闭编辑器',
|
|
|
|
|
toggleTr: '切换字幕',
|
|
|
|
|
whiteboardOn: '开启白板',
|
|
|
|
|
whiteboardOff: '关闭白板',
|
|
|
|
|
snapshotRoom: '截取房间截图',
|
|
|
|
|
recordingOn: '开始录制',
|
|
|
|
|
recordingPause: '暂停录制',
|
|
|
|
|
recordingResume: '恢复录制',
|
|
|
|
|
recordingOff: '停止录制',
|
|
|
|
|
settingsOn: '开启设置',
|
|
|
|
|
settingsOff: '关闭设置',
|
|
|
|
|
participantsOn: '显示参与者',
|
|
|
|
|
participantsOff: '隐藏参与者',
|
|
|
|
|
participantsVideoOff: '关闭参与者视频',
|
|
|
|
|
participantsAudioOff: '关闭参与者音频',
|
|
|
|
|
participantsKickOut: '踢出参与者',
|
|
|
|
|
fileShareOn: '开启文件共享',
|
|
|
|
|
fileShareOff: '关闭文件共享',
|
|
|
|
|
videoShareOn: '分享视频',
|
|
|
|
|
videoShareOff: '停止分享视频',
|
|
|
|
|
swapCamera: '切换摄像头',
|
|
|
|
|
raiseHand: '举手',
|
|
|
|
|
lowerHand: '放下手',
|
|
|
|
|
roomLock: '锁定房间',
|
|
|
|
|
roomUnlock: '解锁房间',
|
|
|
|
|
about: '显示关于信息',
|
|
|
|
|
email: '打开电子邮件',
|
|
|
|
|
google: '打开谷歌',
|
|
|
|
|
googleTr: '打开谷歌翻译',
|
|
|
|
|
youtube: '打开YouTube',
|
|
|
|
|
facebook: '打开Facebook',
|
|
|
|
|
linkedin: '打开LinkedIn',
|
|
|
|
|
twitter: '打开Twitter',
|
|
|
|
|
tiktok: '打开TikTok',
|
|
|
|
|
github: '打开GitHub',
|
|
|
|
|
survey: '打开调查',
|
|
|
|
|
recognizeEnglish: '识别英语',
|
|
|
|
|
recognizeBangla: '识别孟加拉语',
|
|
|
|
|
recognizeItalian: '识别意大利语',
|
|
|
|
|
recognizeSpanish: '识别西班牙语',
|
|
|
|
|
recognizeFrench: '识别法语',
|
|
|
|
|
recognizeGerman: '识别德语',
|
|
|
|
|
recognizeJapanese: '识别日语',
|
|
|
|
|
recognizePortuguese: '识别葡萄牙语',
|
|
|
|
|
recognizeChinese: '识别中文',
|
|
|
|
|
recognizeArabic: '识别阿拉伯语',
|
|
|
|
|
stopRecognition: '停止语音识别',
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
ar: {
|
|
|
|
|
langCode: 'ar-SA',
|
|
|
|
|
commands: {
|
|
|
|
|
shareRoom: 'مشاركة الغرفة',
|
|
|
|
|
hideMe: 'اخفني',
|
|
|
|
|
showMe: 'أرني',
|
|
|
|
|
newRoom: 'غرفة جديدة',
|
|
|
|
|
leaveRoom: 'مغادرة الغرفة',
|
|
|
|
|
audioOn: 'تشغيل الصوت',
|
|
|
|
|
audioOff: 'إيقاف الصوت',
|
|
|
|
|
videoOn: 'تشغيل الفيديو',
|
|
|
|
|
videoOff: 'إيقاف الفيديو',
|
|
|
|
|
screenOn: 'تشغيل الشاشة',
|
|
|
|
|
screenOff: 'إيقاف الشاشة',
|
|
|
|
|
chatOn: 'فتح الدردشة',
|
|
|
|
|
chatSend: 'إرسال',
|
|
|
|
|
chatOff: 'إغلاق الدردشة',
|
|
|
|
|
pollOn: 'فتح الاستطلاع',
|
|
|
|
|
pollOff: 'إغلاق الاستطلاع',
|
|
|
|
|
editorOn: 'فتح المحرر',
|
|
|
|
|
editorOff: 'إغلاق المحرر',
|
|
|
|
|
toggleTr: 'التبديل بين الترجمة',
|
|
|
|
|
whiteboardOn: 'فتح السبورة',
|
|
|
|
|
whiteboardOff: 'إغلاق السبورة',
|
|
|
|
|
snapshotRoom: 'التقاط صورة للغرفة',
|
|
|
|
|
recordingOn: 'بدء التسجيل',
|
|
|
|
|
recordingPause: 'إيقاف التسجيل مؤقتاً',
|
|
|
|
|
recordingResume: 'استئناف التسجيل',
|
|
|
|
|
recordingOff: 'إيقاف التسجيل',
|
|
|
|
|
settingsOn: 'فتح الإعدادات',
|
|
|
|
|
settingsOff: 'إغلاق الإعدادات',
|
|
|
|
|
participantsOn: 'عرض المشاركين',
|
|
|
|
|
participantsOff: 'إخفاء المشاركين',
|
|
|
|
|
participantsVideoOff: 'إيقاف فيديو المشاركين',
|
|
|
|
|
participantsAudioOff: 'إيقاف صوت المشاركين',
|
|
|
|
|
participantsKickOut: 'طرد المشاركين',
|
|
|
|
|
fileShareOn: 'فتح الملف',
|
|
|
|
|
fileShareOff: 'إغلاق الملف',
|
|
|
|
|
videoShareOn: 'مشاركة الفيديو',
|
|
|
|
|
videoShareOff: 'إيقاف مشاركة الفيديو',
|
|
|
|
|
swapCamera: 'تبديل الكاميرا',
|
|
|
|
|
raiseHand: 'رفع اليد',
|
|
|
|
|
lowerHand: 'إنزال اليد',
|
|
|
|
|
roomLock: 'قفل الغرفة',
|
|
|
|
|
roomUnlock: 'فتح قفل الغرفة',
|
|
|
|
|
about: 'عرض المعلومات',
|
|
|
|
|
email: 'فتح البريد الإلكتروني',
|
|
|
|
|
google: 'فتح جوجل',
|
|
|
|
|
googleTr: 'فتح ترجمة جوجل',
|
|
|
|
|
youtube: 'فتح يوتيوب',
|
|
|
|
|
facebook: 'فتح فيسبوك',
|
|
|
|
|
linkedin: 'فتح لينكد إن',
|
|
|
|
|
twitter: 'فتح تويتر',
|
|
|
|
|
tiktok: 'فتح تيك توك',
|
|
|
|
|
github: 'فتح جيت هاب',
|
|
|
|
|
survey: 'فتح الاستطلاع',
|
|
|
|
|
recognizeEnglish: 'التعرف على الإنجليزية',
|
|
|
|
|
recognizeBangla: 'التعرف على البنغالية',
|
|
|
|
|
recognizeItalian: 'التعرف على الإيطالية',
|
|
|
|
|
recognizeSpanish: 'التعرف على الإسبانية',
|
|
|
|
|
recognizeFrench: 'التعرف على الفرنسية',
|
|
|
|
|
recognizeGerman: 'التعرف على الألمانية',
|
|
|
|
|
recognizeJapanese: 'التعرف على اليابانية',
|
|
|
|
|
recognizePortuguese: 'التعرف على البرتغالية',
|
|
|
|
|
recognizeChinese: 'التعرف على الصينية',
|
|
|
|
|
recognizeArabic: 'التعرف على العربية',
|
|
|
|
|
stopRecognition: 'إيقاف التعرف الصوتي',
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
const browser = {
|
|
|
|
|
@@ -194,10 +772,10 @@ if (speechRecognition) {
|
|
|
|
|
userLog('info', 'Speech recognition stopped', 'top-end');
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
isWebkitSpeechRecognitionSupported = true;
|
|
|
|
|
console.info('Browser supports webkitSpeechRecognition');
|
|
|
|
|
} else {
|
|
|
|
|
console.warn('This browser not supports webkitSpeechRecognition');
|
|
|
|
|
console.warn('This browser does not support webkitSpeechRecognition');
|
|
|
|
|
isVoiceCommandsEnabled = false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function setRecognitionLanguage(recognition, languageCode) {
|
|
|
|
|
@@ -210,12 +788,34 @@ function setRecognitionLanguage(recognition, languageCode) {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function startSpeech() {
|
|
|
|
|
recognition.lang = languageHandlers[currentLanguage]?.langCode || 'en-US';
|
|
|
|
|
recognition.start();
|
|
|
|
|
try {
|
|
|
|
|
recognition.lang = languageHandlers[currentLanguage]?.langCode || 'en-US';
|
|
|
|
|
recognition.start();
|
|
|
|
|
} catch (error) {
|
|
|
|
|
console.error('Error starting speech recognition:', error);
|
|
|
|
|
userLog('error', 'Failed to start voice recognition', 'top-end');
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function stopSpeech() {
|
|
|
|
|
try {
|
|
|
|
|
recognition.stop();
|
|
|
|
|
} catch (error) {
|
|
|
|
|
console.error('Error stopping speech recognition:', error);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function switchRecognitionLanguage(lang) {
|
|
|
|
|
currentLanguage = lang;
|
|
|
|
|
setRecognitionLanguage(recognition, languageHandlers[currentLanguage].langCode);
|
|
|
|
|
recognition.stop();
|
|
|
|
|
setTimeout(() => recognition.start(), 300);
|
|
|
|
|
userLog('info', `Switched to ${lang} recognition`, 'top-end');
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function printCommand(command) {
|
|
|
|
|
console.log('Detected', { command: command });
|
|
|
|
|
userLog('info', `Voice command: ${command}`, 'top-end', 2000);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function execVoiceCommands(transcript) {
|
|
|
|
|
@@ -443,28 +1043,50 @@ function execVoiceCommands(transcript) {
|
|
|
|
|
break;
|
|
|
|
|
case languageHandlers[currentLanguage].commands.recognizeBangla:
|
|
|
|
|
printCommand(languageHandlers[currentLanguage].commands.recognizeBangla);
|
|
|
|
|
currentLanguage = 'bn';
|
|
|
|
|
setRecognitionLanguage(recognition, languageHandlers[currentLanguage].langCode);
|
|
|
|
|
recognition.stop();
|
|
|
|
|
setTimeout(() => recognition.start(), 300);
|
|
|
|
|
switchRecognitionLanguage('bn');
|
|
|
|
|
break;
|
|
|
|
|
case languageHandlers[currentLanguage].commands.recognizeEnglish:
|
|
|
|
|
printCommand(languageHandlers[currentLanguage].commands.recognizeBangla);
|
|
|
|
|
currentLanguage = 'en';
|
|
|
|
|
setRecognitionLanguage(recognition, languageHandlers[currentLanguage].langCode);
|
|
|
|
|
recognition.stop();
|
|
|
|
|
setTimeout(() => recognition.start(), 300);
|
|
|
|
|
printCommand(languageHandlers[currentLanguage].commands.recognizeEnglish);
|
|
|
|
|
switchRecognitionLanguage('en');
|
|
|
|
|
break;
|
|
|
|
|
case languageHandlers[currentLanguage].commands.recognizeItalian:
|
|
|
|
|
printCommand(languageHandlers[currentLanguage].commands.recognizeItalian);
|
|
|
|
|
switchRecognitionLanguage('it');
|
|
|
|
|
break;
|
|
|
|
|
case languageHandlers[currentLanguage].commands.recognizeSpanish:
|
|
|
|
|
printCommand(languageHandlers[currentLanguage].commands.recognizeSpanish);
|
|
|
|
|
switchRecognitionLanguage('es');
|
|
|
|
|
break;
|
|
|
|
|
case languageHandlers[currentLanguage].commands.recognizeFrench:
|
|
|
|
|
printCommand(languageHandlers[currentLanguage].commands.recognizeFrench);
|
|
|
|
|
switchRecognitionLanguage('fr');
|
|
|
|
|
break;
|
|
|
|
|
case languageHandlers[currentLanguage].commands.recognizeGerman:
|
|
|
|
|
printCommand(languageHandlers[currentLanguage].commands.recognizeGerman);
|
|
|
|
|
switchRecognitionLanguage('de');
|
|
|
|
|
break;
|
|
|
|
|
case languageHandlers[currentLanguage].commands.recognizeJapanese:
|
|
|
|
|
printCommand(languageHandlers[currentLanguage].commands.recognizeJapanese);
|
|
|
|
|
switchRecognitionLanguage('ja');
|
|
|
|
|
break;
|
|
|
|
|
case languageHandlers[currentLanguage].commands.recognizePortuguese:
|
|
|
|
|
printCommand(languageHandlers[currentLanguage].commands.recognizePortuguese);
|
|
|
|
|
switchRecognitionLanguage('pt');
|
|
|
|
|
break;
|
|
|
|
|
case languageHandlers[currentLanguage].commands.recognizeChinese:
|
|
|
|
|
printCommand(languageHandlers[currentLanguage].commands.recognizeChinese);
|
|
|
|
|
switchRecognitionLanguage('zh');
|
|
|
|
|
break;
|
|
|
|
|
case languageHandlers[currentLanguage].commands.recognizeArabic:
|
|
|
|
|
printCommand(languageHandlers[currentLanguage].commands.recognizeArabic);
|
|
|
|
|
switchRecognitionLanguage('ar');
|
|
|
|
|
break;
|
|
|
|
|
case languageHandlers[currentLanguage].commands.stopRecognition:
|
|
|
|
|
printCommand(languageHandlers[currentLanguage].commands.stopRecognition);
|
|
|
|
|
chatSpeechStopButton.click();
|
|
|
|
|
break;
|
|
|
|
|
// ...
|
|
|
|
|
default:
|
|
|
|
|
console.log('Unrecognized command:', transcript);
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function printCommand(command) {
|
|
|
|
|
console.log('Detected', { command: command });
|
|
|
|
|
}
|
|
|
|
|
|