Initial commit
This commit is contained in:
@@ -0,0 +1,242 @@
|
||||
'use strict';
|
||||
|
||||
goog.provide('Blockly.JavaScript.Sendto');
|
||||
|
||||
goog.require('Blockly.JavaScript');
|
||||
|
||||
// --- SayIt --------------------------------------------------
|
||||
Blockly.Words['sayit'] = {'en': 'say text', 'de': 'aussprechen', 'ru': 'произнести'};
|
||||
Blockly.Words['sayit_message'] = {'en': 'message', 'de': 'Meldung', 'ru': 'сообщение'};
|
||||
Blockly.Words['sayit_volume'] = {'en': 'volume (optional)', 'de': 'Lautstärke (optional)', 'ru': 'громкость (не обяз.)'};
|
||||
Blockly.Words['sayit_tooltip'] = {'en': 'Text to speech', 'de': 'Text zu Sprache', 'ru': 'Произнести сообщение'};
|
||||
Blockly.Words['sayit_help'] = {'en': 'https://git.spacen.net/yunkong2/yunkong2.sayit/blob/master/README.md', 'de': 'http://www.yunkong2.net/?page_id=178&lang=de', 'ru': 'http://www.yunkong2.net/?page_id=4262&lang=ru'};
|
||||
Blockly.Words['sayit_configured'] = {'en': 'configured', 'de': 'standart', 'ru': 'настроенный'};
|
||||
|
||||
Blockly.Words['sayit_log'] = {'en': 'log level', 'de': 'Loglevel', 'ru': 'Протокол'};
|
||||
Blockly.Words['sayit_log_none'] = {'en': 'none', 'de': 'keins', 'ru': 'нет'};
|
||||
Blockly.Words['sayit_log_info'] = {'en': 'info', 'de': 'info', 'ru': 'инфо'};
|
||||
Blockly.Words['sayit_log_debug'] = {'en': 'debug', 'de': 'debug', 'ru': 'debug'};
|
||||
Blockly.Words['sayit_log_warn'] = {'en': 'warning', 'de': 'warning', 'ru': 'warning'};
|
||||
Blockly.Words['sayit_log_error'] = {'en': 'error', 'de': 'error', 'ru': 'ошибка'};
|
||||
|
||||
|
||||
// this is copy of engines.js
|
||||
var sayitEngines = {
|
||||
"en": {name: "Google - English", engine: "google", params: []},
|
||||
"de": {name: "Google - Deutsch", engine: "google", params: []},
|
||||
"ru": {name: "Google - Русский", engine: "google", params: []},
|
||||
"it": {name: "Google - Italiano", engine: "google", params: []},
|
||||
"es": {name: "Google - Espaniol", engine: "google", params: []},
|
||||
"fr": {name: "Google - Français", engine: "google", params: []},
|
||||
"ru_YA": {name: "Yandex - Русский", engine: "yandex", params: ['key', 'voice', 'emotion', 'ill', 'drunk', 'robot'], voice: ['jane', 'zahar'], emotion: ['none', 'good', 'neutral', 'evil', 'mixed']},
|
||||
|
||||
"en-US": {name: "PicoTTS - Englisch US", engine: "PicoTTS", params: []},
|
||||
"en-GB": {name: "PicoTTS - Englisch GB", engine: "PicoTTS", params: []},
|
||||
"de-DE": {name: "PicoTTS - Deutsch", engine: "PicoTTS", params: []},
|
||||
"it-IT": {name: "PicoTTS - Italiano", engine: "PicoTTS", params: []},
|
||||
"es-ES": {name: "PicoTTS - Espaniol", engine: "PicoTTS", params: []},
|
||||
"fr-FR": {name: "PicoTTS - Français", engine: "PicoTTS", params: []},
|
||||
|
||||
"ru-RU_CLOUD_Female": {gender: "Female", engine: "cloud", params: ['cloud'], language: "ru-RU", ename: "Tatyana", ssml: true, name: "Cloud - Русский - Татьяна"},
|
||||
"ru-RU_CLOUD_Male": {gender: "Male", engine: "cloud", params: ['cloud'], language: "ru-RU", ename: "Maxim", ssml: true, name: "Cloud - Русский - Максим"},
|
||||
"de-DE_CLOUD_Female": {gender: "Female", engine: "cloud", params: ['cloud'], language: "de-DE", ename: "Marlene", ssml: true, name: "Cloud - Deutsch - Marlene"},
|
||||
"de-DE_CLOUD_Male": {gender: "Male", engine: "cloud", params: ['cloud'], language: "de-DE", ename: "Hans", ssml: true, name: "Cloud - Deutsch - Hans"},
|
||||
"en-US_CLOUD_Female": {gender: "Female", engine: "cloud", params: ['cloud'], language: "en-US", ename: "Salli", ssml: true, name: "Cloud - en-US - Female - Salli"},
|
||||
"en-US_CLOUD_Male": {gender: "Male", engine: "cloud", params: ['cloud'], language: "en-US", ename: "Joey", ssml: true, name: "Cloud - en-US - Male - Joey"},
|
||||
"da-DK_CLOUD_Female": {gender: "Female", engine: "cloud", params: ['cloud'], language: "da-DK", ename: "Naja", ssml: true, name: "Cloud - da-DK - Female - Naja"},
|
||||
"da-DK_CLOUD_Male": {gender: "Male", engine: "cloud", params: ['cloud'], language: "da-DK", ename: "Mads", ssml: true, name: "Cloud - da-DK - Male - Mads"},
|
||||
"en-AU_CLOUD_Female": {gender: "Female", engine: "cloud", params: ['cloud'], language: "en-AU", ename: "Nicole", ssml: true, name: "Cloud - en-AU - Female - Nicole"},
|
||||
"en-AU_CLOUD_Male": {gender: "Male", engine: "cloud", params: ['cloud'], language: "en-AU", ename: "Russell", ssml: true, name: "Cloud - en-AU - Male - Russell"},
|
||||
"en-GB_CLOUD_Female_Amy": {gender: "Female", engine: "cloud", params: ['cloud'], language: "en-GB", ename: "Amy", ssml: true, name: "Cloud - en-GB - Female - Amy"},
|
||||
"en-GB_CLOUD_Male": {gender: "Male", engine: "cloud", params: ['cloud'], language: "en-GB", ename: "Brian", ssml: true, name: "Cloud - en-GB - Male - Brian"},
|
||||
"en-GB_CLOUD_Female_Emma": {gender: "Female", engine: "cloud", params: ['cloud'], language: "en-GB", ename: "Emma", ssml: true, name: "Cloud - en-GB - Female - Emma"},
|
||||
"en-GB-WLS_CLOUD_Female": {gender: "Female", engine: "cloud", params: ['cloud'], language: "en-GB-WLS", ename: "Gwyneth", ssml: true, name: "Cloud - en-GB-WLS - Female - Gwyneth"},
|
||||
"en-GB-WLS_CLOUD_Male": {gender: "Male", engine: "cloud", params: ['cloud'], language: "en-GB-WLS", ename: "Geraint", ssml: true, name: "Cloud - en-GB-WLS - Male - Geraint"},
|
||||
"cy-GB_CLOUD_Female": {gender: "Female", engine: "cloud", params: ['cloud'], language: "cy-GB", ename: "Gwyneth", ssml: true, name: "Cloud - cy-GB - Female - Gwyneth"},
|
||||
"cy-GB_CLOUD_Male": {gender: "Male", engine: "cloud", params: ['cloud'], language: "cy-GB", ename: "Geraint", ssml: true, name: "Cloud - cy-GB - Male - Geraint"},
|
||||
"en-IN_CLOUD_Female": {gender: "Female", engine: "cloud", params: ['cloud'], language: "en-IN", ename: "Raveena", ssml: true, name: "Cloud - en-IN - Female - Raveena"},
|
||||
"en-US_CLOUD_Male_Chipmunk":{gender: "Male", engine: "cloud", params: ['cloud'], language: "en-US", ename: "Chipmunk", ssml: true, name: "Cloud - en-US - Male - Chipmunk"},
|
||||
"en-US_CLOUD_Male_Eric": {gender: "Male", engine: "cloud", params: ['cloud'], language: "en-US", ename: "Eric", ssml: true, name: "Cloud - en-US - Male - Eric"},
|
||||
"en-US_CLOUD_Female_Ivy": {gender: "Female", engine: "cloud", params: ['cloud'], language: "en-US", ename: "Ivy", ssml: true, name: "Cloud - en-US - Female - Ivy"},
|
||||
"en-US_CLOUD_Female_Jennifer": {gender: "Female", engine: "cloud", params: ['cloud'], language: "en-US", ename: "Jennifer", ssml: true, name: "Cloud - en-US - Female - Jennifer"},
|
||||
"en-US_CLOUD_Male_Justin": {gender: "Male", engine: "cloud", params: ['cloud'], language: "en-US", ename: "Justin", ssml: true, name: "Cloud - en-US - Male - Justin"},
|
||||
"en-US_CLOUD_Female_Kendra": {gender: "Female", engine: "cloud", params: ['cloud'], language: "en-US", ename: "Kendra", ssml: true, name: "Cloud - en-US - Female - Kendra"},
|
||||
"en-US_CLOUD_Female_Kimberly": {gender: "Female", engine: "cloud", params: ['cloud'], language: "en-US", ename: "Kimberly", ssml: true, name: "Cloud - en-US - Female - Kimberly"},
|
||||
"es-ES_CLOUD_Female": {gender: "Female", engine: "cloud", params: ['cloud'], language: "es-ES", ename: "Conchita", ssml: true, name: "Cloud - es-ES - Female - Conchita"},
|
||||
"es-ES_CLOUD_Male": {gender: "Male", engine: "cloud", params: ['cloud'], language: "es-ES", ename: "Enrique", ssml: true, name: "Cloud - es-ES - Male - Enrique"},
|
||||
"es-US_CLOUD_Female": {gender: "Female", engine: "cloud", params: ['cloud'], language: "es-US", ename: "Penelope", ssml: true, name: "Cloud - es-US - Female - Penelope"},
|
||||
"es-US_CLOUD_Male": {gender: "Male", engine: "cloud", params: ['cloud'], language: "es-US", ename: "Miguel", ssml: true, name: "Cloud - es-US - Male - Miguel"},
|
||||
"fr-CA_CLOUD_Female": {gender: "Female", engine: "cloud", params: ['cloud'], language: "fr-CA", ename: "Chantal", ssml: true, name: "Cloud - fr-CA - Female - Chantal"},
|
||||
"fr-FR_CLOUD_Female": {gender: "Female", engine: "cloud", params: ['cloud'], language: "fr-FR", ename: "Celine", ssml: true, name: "Cloud - fr-FR - Female - Celine"},
|
||||
"fr-FR_CLOUD_Male": {gender: "Male", engine: "cloud", params: ['cloud'], language: "fr-FR", ename: "Mathieu", ssml: true, name: "Cloud - fr-FR - Male - Mathieu"},
|
||||
"is-IS_CLOUD_Female": {gender: "Female", engine: "cloud", params: ['cloud'], language: "is-IS", ename: "Dora", ssml: true, name: "Cloud - is-IS - Female - Dora"},
|
||||
"is-IS_CLOUD_Male": {gender: "Male", engine: "cloud", params: ['cloud'], language: "is-IS", ename: "Karl", ssml: true, name: "Cloud - is-IS - Male - Karl"},
|
||||
"it-IT_CLOUD_Female": {gender: "Female", engine: "cloud", params: ['cloud'], language: "it-IT", ename: "Carla", ssml: true, name: "Cloud - it-IT - Female - Carla"},
|
||||
"it-IT_CLOUD_Male": {gender: "Male", engine: "cloud", params: ['cloud'], language: "it-IT", ename: "Giorgio", ssml: true, name: "Cloud - it-IT - Male - Giorgio"},
|
||||
"nb-NO_CLOUD_Female": {gender: "Female", engine: "cloud", params: ['cloud'], language: "nb-NO", ename: "Liv", ssml: true, name: "Cloud - nb-NO - Female - Liv"},
|
||||
"nl-NL_CLOUD_Female": {gender: "Female", engine: "cloud", params: ['cloud'], language: "nl-NL", ename: "Lotte", ssml: true, name: "Cloud - nl-NL - Female - Lotte"},
|
||||
"nl-NL_CLOUD_Male": {gender: "Male", engine: "cloud", params: ['cloud'], language: "nl-NL", ename: "Ruben", ssml: true, name: "Cloud - nl-NL - Male - Ruben"},
|
||||
"pl-PL_CLOUD_Female_Agnieszka":{gender: "Female", engine: "cloud",params: ['cloud'], language: "pl-PL", ename: "Agnieszka", ssml: true, name: "Cloud - pl-PL - Female - Agnieszka"},
|
||||
"pl-PL_CLOUD_Male_Jacek": {gender: "Male", engine: "cloud", params: ['cloud'], language: "pl-PL", ename: "Jacek", ssml: true, name: "Cloud - pl-PL - Male - Jacek"},
|
||||
"pl-PL_CLOUD_Female_Ewa": {gender: "Female", engine: "cloud", params: ['cloud'], language: "pl-PL", ename: "Ewa", ssml: true, name: "Cloud - pl-PL - Female - Ewa"},
|
||||
"pl-PL_CLOUD_Male_Jan": {gender: "Male", engine: "cloud", params: ['cloud'], language: "pl-PL", ename: "Jan", ssml: true, name: "Cloud - pl-PL - Male - Jan"},
|
||||
"pl-PL_CLOUD_Female": {gender: "Female", engine: "cloud", params: ['cloud'], language: "pl-PL", ename: "Maja", ssml: true, name: "Cloud - pl-PL - Female - Maja"},
|
||||
"pt-BR_CLOUD_Female": {gender: "Female", engine: "cloud", params: ['cloud'], language: "pt-BR", ename: "Vitoria", ssml: true, name: "Cloud - pt-BR - Female - Vitoria"},
|
||||
"pt-BR_CLOUD_Male": {gender: "Male", engine: "cloud", params: ['cloud'], language: "pt-BR", ename: "Ricardo", ssml: true, name: "Cloud - pt-BR - Male - Ricardo"},
|
||||
"pt-PT_CLOUD_Male": {gender: "Male", engine: "cloud", params: ['cloud'], language: "pt-PT", ename: "Cristiano", ssml: true, name: "Cloud - pt-PT - Male - Cristiano"},
|
||||
"pt-PT_CLOUD_Female": {gender: "Female", engine: "cloud", params: ['cloud'], language: "pt-PT", ename: "Ines", ssml: true, name: "Cloud - pt-PT - Female - Ines"},
|
||||
"ro-RO_CLOUD_Female": {gender: "Female", engine: "cloud", params: ['cloud'], language: "ro-RO", ename: "Carmen", ssml: true, name: "Cloud - ro-RO - Female - Carmen"},
|
||||
"sv-SE_CLOUD_Female": {gender: "Female", engine: "cloud", params: ['cloud'], language: "sv-SE", ename: "Astrid", ssml: true, name: "Cloud - sv-SE - Female - Astrid"},
|
||||
"tr-TR_CLOUD_Female": {gender: "Female", engine: "cloud", params: ['cloud'], language: "tr-TR", ename: "Filiz", ssml: true, name: "Cloud - tr-TR - Female - Filiz"},
|
||||
|
||||
"ru-RU_AP_Female": {gender: "Female", engine: "polly", params: ['accessKey', 'secretKey', 'region'], language: "ru-RU", ename: "Tatyana", ssml: true, name: "AWS Polly - Русский - Татьяна"},
|
||||
"ru-RU_AP_Male": {gender: "Male", engine: "polly", params: ['accessKey', 'secretKey', 'region'], language: "ru-RU", ename: "Maxim", ssml: true, name: "AWS Polly - Русский - Максим"},
|
||||
"de-DE_AP_Female": {gender: "Female", engine: "polly", params: ['accessKey', 'secretKey', 'region'], language: "de-DE", ename: "Marlene", ssml: true, name: "AWS Polly - Deutsch - Marlene"},
|
||||
"de-DE_AP_Male": {gender: "Male", engine: "polly", params: ['accessKey', 'secretKey', 'region'], language: "de-DE", ename: "Hans", ssml: true, name: "AWS Polly - Deutsch - Hans"},
|
||||
"en-US_AP_Female": {gender: "Female", engine: "polly", params: ['accessKey', 'secretKey', 'region'], language: "en-US", ename: "Salli", ssml: true, name: "AWS Polly - en-US - Female - Salli"},
|
||||
"en-US_AP_Male": {gender: "Male", engine: "polly", params: ['accessKey', 'secretKey', 'region'], language: "en-US", ename: "Joey", ssml: true, name: "AWS Polly - en-US - Male - Joey"},
|
||||
"da-DK_AP_Female": {gender: "Female", engine: "polly", params: ['accessKey', 'secretKey', 'region'], language: "da-DK", ename: "Naja", ssml: true, name: "AWS Polly - da-DK - Female - Naja"},
|
||||
"da-DK_AP_Male": {gender: "Male", engine: "polly", params: ['accessKey', 'secretKey', 'region'], language: "da-DK", ename: "Mads", ssml: true, name: "AWS Polly - da-DK - Male - Mads"},
|
||||
"en-AU_AP_Female": {gender: "Female", engine: "polly", params: ['accessKey', 'secretKey', 'region'], language: "en-AU", ename: "Nicole", ssml: true, name: "AWS Polly - en-AU - Female - Nicole"},
|
||||
"en-AU_AP_Male": {gender: "Male", engine: "polly", params: ['accessKey', 'secretKey', 'region'], language: "en-AU", ename: "Russell", ssml: true, name: "AWS Polly - en-AU - Male - Russell"},
|
||||
"en-GB_AP_Female_Amy": {gender: "Female", engine: "polly", params: ['accessKey', 'secretKey', 'region'], language: "en-GB", ename: "Amy", ssml: true, name: "AWS Polly - en-GB - Female - Amy"},
|
||||
"en-GB_AP_Male": {gender: "Male", engine: "polly", params: ['accessKey', 'secretKey', 'region'], language: "en-GB", ename: "Brian", ssml: true, name: "AWS Polly - en-GB - Male - Brian"},
|
||||
"en-GB_AP_Female_Emma": {gender: "Female", engine: "polly", params: ['accessKey', 'secretKey', 'region'], language: "en-GB", ename: "Emma", ssml: true, name: "AWS Polly - en-GB - Female - Emma"},
|
||||
"en-GB-WLS_AP_Female": {gender: "Female", engine: "polly", params: ['accessKey', 'secretKey', 'region'], language: "en-GB-WLS", ename: "Gwyneth", ssml: true, name: "AWS Polly - en-GB-WLS - Female - Gwyneth"},
|
||||
"en-GB-WLS_AP_Male": {gender: "Male", engine: "polly", params: ['accessKey', 'secretKey', 'region'], language: "en-GB-WLS", ename: "Geraint", ssml: true, name: "AWS Polly - en-GB-WLS - Male - Geraint"},
|
||||
"cy-GB_AP_Female": {gender: "Female", engine: "polly", params: ['accessKey', 'secretKey', 'region'], language: "cy-GB", ename: "Gwyneth", ssml: true, name: "AWS Polly - cy-GB - Female - Gwyneth"},
|
||||
"cy-GB_AP_Male": {gender: "Male", engine: "polly", params: ['accessKey', 'secretKey', 'region'], language: "cy-GB", ename: "Geraint", ssml: true, name: "AWS Polly - cy-GB - Male - Geraint"},
|
||||
"en-IN_AP_Female": {gender: "Female", engine: "polly", params: ['accessKey', 'secretKey', 'region'], language: "en-IN", ename: "Raveena", ssml: true, name: "AWS Polly - en-IN - Female - Raveena"},
|
||||
"en-US_AP_Male_Chipmunk": {gender: "Male", engine: "polly", params: ['accessKey', 'secretKey', 'region'], language: "en-US", ename: "Chipmunk", ssml: true, name: "AWS Polly - en-US - Male - Chipmunk"},
|
||||
"en-US_AP_Male_Eric": {gender: "Male", engine: "polly", params: ['accessKey', 'secretKey', 'region'], language: "en-US", ename: "Eric", ssml: true, name: "AWS Polly - en-US - Male - Eric"},
|
||||
"en-US_AP_Female_Ivy": {gender: "Female", engine: "polly", params: ['accessKey', 'secretKey', 'region'], language: "en-US", ename: "Ivy", ssml: true, name: "AWS Polly - en-US - Female - Ivy"},
|
||||
"en-US_AP_Female_Jennifer": {gender: "Female", engine: "polly", params: ['accessKey', 'secretKey', 'region'], language: "en-US", ename: "Jennifer", ssml: true, name: "AWS Polly - en-US - Female - Jennifer"},
|
||||
"en-US_AP_Male_Justin": {gender: "Male", engine: "polly", params: ['accessKey', 'secretKey', 'region'], language: "en-US", ename: "Justin", ssml: true, name: "AWS Polly - en-US - Male - Justin"},
|
||||
"en-US_AP_Female_Kendra": {gender: "Female", engine: "polly", params: ['accessKey', 'secretKey', 'region'], language: "en-US", ename: "Kendra", ssml: true, name: "AWS Polly - en-US - Female - Kendra"},
|
||||
"en-US_AP_Female_Kimberly": {gender: "Female", engine: "polly", params: ['accessKey', 'secretKey', 'region'], language: "en-US", ename: "Kimberly", ssml: true, name: "AWS Polly - en-US - Female - Kimberly"},
|
||||
"es-ES_AP_Female": {gender: "Female", engine: "polly", params: ['accessKey', 'secretKey', 'region'], language: "es-ES", ename: "Conchita", ssml: true, name: "AWS Polly - es-ES - Female - Conchita"},
|
||||
"es-ES_AP_Male": {gender: "Male", engine: "polly", params: ['accessKey', 'secretKey', 'region'], language: "es-ES", ename: "Enrique", ssml: true, name: "AWS Polly - es-ES - Male - Enrique"},
|
||||
"es-US_AP_Female": {gender: "Female", engine: "polly", params: ['accessKey', 'secretKey', 'region'], language: "es-US", ename: "Penelope", ssml: true, name: "AWS Polly - es-US - Female - Penelope"},
|
||||
"es-US_AP_Male": {gender: "Male", engine: "polly", params: ['accessKey', 'secretKey', 'region'], language: "es-US", ename: "Miguel", ssml: true, name: "AWS Polly - es-US - Male - Miguel"},
|
||||
"fr-CA_AP_Female": {gender: "Female", engine: "polly", params: ['accessKey', 'secretKey', 'region'], language: "fr-CA", ename: "Chantal", ssml: true, name: "AWS Polly - fr-CA - Female - Chantal"},
|
||||
"fr-FR_AP_Female": {gender: "Female", engine: "polly", params: ['accessKey', 'secretKey', 'region'], language: "fr-FR", ename: "Celine", ssml: true, name: "AWS Polly - fr-FR - Female - Celine"},
|
||||
"fr-FR_AP_Male": {gender: "Male", engine: "polly", params: ['accessKey', 'secretKey', 'region'], language: "fr-FR", ename: "Mathieu", ssml: true, name: "AWS Polly - fr-FR - Male - Mathieu"},
|
||||
"is-IS_AP_Female": {gender: "Female", engine: "polly", params: ['accessKey', 'secretKey', 'region'], language: "is-IS", ename: "Dora", ssml: true, name: "AWS Polly - is-IS - Female - Dora"},
|
||||
"is-IS_AP_Male": {gender: "Male", engine: "polly", params: ['accessKey', 'secretKey', 'region'], language: "is-IS", ename: "Karl", ssml: true, name: "AWS Polly - is-IS - Male - Karl"},
|
||||
"it-IT_AP_Female": {gender: "Female", engine: "polly", params: ['accessKey', 'secretKey', 'region'], language: "it-IT", ename: "Carla", ssml: true, name: "AWS Polly - it-IT - Female - Carla"},
|
||||
"it-IT_AP_Male": {gender: "Male", engine: "polly", params: ['accessKey', 'secretKey', 'region'], language: "it-IT", ename: "Giorgio", ssml: true, name: "AWS Polly - it-IT - Male - Giorgio"},
|
||||
"nb-NO_AP_Female": {gender: "Female", engine: "polly", params: ['accessKey', 'secretKey', 'region'], language: "nb-NO", ename: "Liv", ssml: true, name: "AWS Polly - nb-NO - Female - Liv"},
|
||||
"nl-NL_AP_Female": {gender: "Female", engine: "polly", params: ['accessKey', 'secretKey', 'region'], language: "nl-NL", ename: "Lotte", ssml: true, name: "AWS Polly - nl-NL - Female - Lotte"},
|
||||
"nl-NL_AP_Male": {gender: "Male", engine: "polly", params: ['accessKey', 'secretKey', 'region'], language: "nl-NL", ename: "Ruben", ssml: true, name: "AWS Polly - nl-NL - Male - Ruben"},
|
||||
"pl-PL_AP_Female_Agnieszka":{gender: "Female", engine: "polly", params: ['accessKey', 'secretKey', 'region'], language: "pl-PL", ename: "Agnieszka", ssml: true, name: "AWS Polly - pl-PL - Female - Agnieszka"},
|
||||
"pl-PL_AP_Male_Jacek": {gender: "Male", engine: "polly", params: ['accessKey', 'secretKey', 'region'], language: "pl-PL", ename: "Jacek", ssml: true, name: "AWS Polly - pl-PL - Male - Jacek"},
|
||||
"pl-PL_AP_Female_Ewa": {gender: "Female", engine: "polly", params: ['accessKey', 'secretKey', 'region'], language: "pl-PL", ename: "Ewa", ssml: true, name: "AWS Polly - pl-PL - Female - Ewa"},
|
||||
"pl-PL_AP_Male_Jan": {gender: "Male", engine: "polly", params: ['accessKey', 'secretKey', 'region'], language: "pl-PL", ename: "Jan", ssml: true, name: "AWS Polly - pl-PL - Male - Jan"},
|
||||
"pl-PL_AP_Female": {gender: "Female", engine: "polly", params: ['accessKey', 'secretKey', 'region'], language: "pl-PL", ename: "Maja", ssml: true, name: "AWS Polly - pl-PL - Female - Maja"},
|
||||
"pt-BR_AP_Female": {gender: "Female", engine: "polly", params: ['accessKey', 'secretKey', 'region'], language: "pt-BR", ename: "Vitoria", ssml: true, name: "AWS Polly - pt-BR - Female - Vitoria"},
|
||||
"pt-BR_AP_Male": {gender: "Male", engine: "polly", params: ['accessKey', 'secretKey', 'region'], language: "pt-BR", ename: "Ricardo", ssml: true, name: "AWS Polly - pt-BR - Male - Ricardo"},
|
||||
"pt-PT_AP_Male": {gender: "Male", engine: "polly", params: ['accessKey', 'secretKey', 'region'], language: "pt-PT", ename: "Cristiano", ssml: true, name: "AWS Polly - pt-PT - Male - Cristiano"},
|
||||
"pt-PT_AP_Female": {gender: "Female", engine: "polly", params: ['accessKey', 'secretKey', 'region'], language: "pt-PT", ename: "Ines", ssml: true, name: "AWS Polly - pt-PT - Female - Ines"},
|
||||
"ro-RO_AP_Female": {gender: "Female", engine: "polly", params: ['accessKey', 'secretKey', 'region'], language: "ro-RO", ename: "Carmen", ssml: true, name: "AWS Polly - ro-RO - Female - Carmen"},
|
||||
"sv-SE_AP_Female": {gender: "Female", engine: "polly", params: ['accessKey', 'secretKey', 'region'], language: "sv-SE", ename: "Astrid", ssml: true, name: "AWS Polly - sv-SE - Female - Astrid"},
|
||||
"tr-TR_AP_Female": {gender: "Female", engine: "polly", params: ['accessKey', 'secretKey', 'region'], language: "tr-TR", ename: "Filiz", ssml: true, name: "AWS Polly - tr-TR - Female - Filiz"}
|
||||
};
|
||||
|
||||
// Blockly.Sendto is global variable and defined in javascript/admin/google-blockly/own/blocks_sendto.js
|
||||
|
||||
Blockly.Sendto.blocks['sayit'] =
|
||||
'<block type="sayit">'
|
||||
+ ' <value name="INSTANCE">'
|
||||
+ ' </value>'
|
||||
+ ' <value name="LANGUAGE">'
|
||||
+ ' </value>'
|
||||
+ ' <value name="VOLUME">'
|
||||
+ ' </value>'
|
||||
+ ' <value name="MESSAGE">'
|
||||
+ ' <shadow type="text">'
|
||||
+ ' <field name="TEXT">text</field>'
|
||||
+ ' </shadow>'
|
||||
+ ' </value>'
|
||||
+ ' <value name="LOG">'
|
||||
+ ' </value>'
|
||||
+ '</block>';
|
||||
|
||||
Blockly.Blocks['sayit'] = {
|
||||
init: function() {
|
||||
var options = [];
|
||||
if (typeof main !== 'undefined' && main.instances) {
|
||||
for (var i = 0; i < main.instances.length; i++) {
|
||||
var m = main.instances[i].match(/^system.adapter.sayit.(\d+)$/);
|
||||
if (m) {
|
||||
var n = parseInt(m[1], 10);
|
||||
options.push(['sayit.' + n, '.' + n]);
|
||||
}
|
||||
}
|
||||
if (options.length === 0) {
|
||||
for (var u = 0; u <= 4; u++) {
|
||||
options.push(['sayit.' + u, '.' + u]);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
for (var u = 0; u <= 4; u++) {
|
||||
options.push(['sayit.' + u, '.' + u]);
|
||||
}
|
||||
}
|
||||
|
||||
this.appendDummyInput('INSTANCE')
|
||||
.appendField(Blockly.Words['sayit'][systemLang])
|
||||
.appendField(new Blockly.FieldDropdown(options), 'INSTANCE');
|
||||
|
||||
var languages = [[Blockly.Words['sayit_configured'][systemLang], '']];
|
||||
for (var l in sayitEngines) {
|
||||
if (sayitEngines.hasOwnProperty(l)) languages.push([sayitEngines[l].name, l]);
|
||||
}
|
||||
|
||||
this.appendDummyInput('LANGUAGE')
|
||||
.appendField(new Blockly.FieldDropdown(languages), 'LANGUAGE');
|
||||
|
||||
var input = this.appendValueInput('VOLUME')
|
||||
.setCheck('Number')
|
||||
.appendField(Blockly.Words['sayit_volume'][systemLang]);
|
||||
if (input.connection) input.connection._optional = true;
|
||||
|
||||
this.appendValueInput('MESSAGE')
|
||||
.appendField(Blockly.Words['sayit_message'][systemLang]);
|
||||
|
||||
this.appendDummyInput('LOG')
|
||||
.appendField(Blockly.Words['sayit_log'][systemLang])
|
||||
.appendField(new Blockly.FieldDropdown([
|
||||
[Blockly.Words['sayit_log_none'][systemLang], ''],
|
||||
[Blockly.Words['sayit_log_info'][systemLang], 'log'],
|
||||
[Blockly.Words['sayit_log_debug'][systemLang], 'debug'],
|
||||
[Blockly.Words['sayit_log_warn'][systemLang], 'warn'],
|
||||
[Blockly.Words['sayit_log_error'][systemLang], 'error']
|
||||
]), 'LOG');
|
||||
|
||||
this.setInputsInline(false);
|
||||
this.setPreviousStatement(true, null);
|
||||
this.setNextStatement(true, null);
|
||||
|
||||
this.setColour(Blockly.Sendto.HUE);
|
||||
this.setTooltip(Blockly.Words['sayit_tooltip'][systemLang]);
|
||||
this.setHelpUrl(Blockly.Words['sayit_help'][systemLang]);
|
||||
}
|
||||
};
|
||||
|
||||
Blockly.JavaScript['sayit'] = function(block) {
|
||||
var dropdown_instance = block.getFieldValue('INSTANCE');
|
||||
var dropdown_language = block.getFieldValue('LANGUAGE');
|
||||
var value_message = Blockly.JavaScript.valueToCode(block, 'MESSAGE', Blockly.JavaScript.ORDER_ATOMIC);
|
||||
var value_volume = Blockly.JavaScript.valueToCode(block, 'VOLUME', Blockly.JavaScript.ORDER_ATOMIC);
|
||||
var logLevel = block.getFieldValue('LOG');
|
||||
|
||||
var logText;
|
||||
if (logLevel) {
|
||||
logText = 'console.' + logLevel + '("sayIt' + (dropdown_language ? '[' + dropdown_language + ']' : '') + (value_volume ? '[Volume - ' + value_volume + ']' : '') + ': " + ' + value_message + ');\n'
|
||||
} else {
|
||||
logText = '';
|
||||
}
|
||||
|
||||
return 'setState("sayit' + dropdown_instance + '.tts.text", "' + (dropdown_language ? dropdown_language + ';' : '') + (value_volume !== null && value_volume !== '' ? value_volume + ';' : '') + '" + ' + value_message + ');\n' +
|
||||
logText;
|
||||
};
|
||||
@@ -0,0 +1,139 @@
|
||||
// DONT Forget to update sayitEngines in blockly.js (If you change this table)
|
||||
|
||||
var sayitEngines = {
|
||||
"en": {name: "Google - English", engine: "google", params: []},
|
||||
"de": {name: "Google - Deutsch", engine: "google", params: []},
|
||||
"ru": {name: "Google - Русский", engine: "google", params: []},
|
||||
"it": {name: "Google - Italiano", engine: "google", params: []},
|
||||
"es": {name: "Google - Espaniol", engine: "google", params: []},
|
||||
"fr": {name: "Google - Français", engine: "google", params: []},
|
||||
"ru_YA": {name: "Yandex - Русский", engine: "yandex", params: ['key', 'voice', 'emotion', 'ill', 'drunk', 'robot'], voice: ['jane', 'zahar'], emotion: ['none', 'good', 'neutral', 'evil', 'mixed']},
|
||||
|
||||
"ru-RU_CLOUD_Female": {gender: "Female", engine: "cloud", params: ['cloud'], language: "ru-RU", ename: "Tatyana", ssml: true, name: "Cloud - Русский - Татьяна"},
|
||||
"ru-RU_CLOUD_Male": {gender: "Male", engine: "cloud", params: ['cloud'], language: "ru-RU", ename: "Maxim", ssml: true, name: "Cloud - Русский - Максим"},
|
||||
"de-DE_CLOUD_Female": {gender: "Female", engine: "cloud", params: ['cloud'], language: "de-DE", ename: "Marlene", ssml: true, name: "Cloud - Deutsch - Marlene"},
|
||||
"de-DE_CLOUD_Male": {gender: "Male", engine: "cloud", params: ['cloud'], language: "de-DE", ename: "Hans", ssml: true, name: "Cloud - Deutsch - Hans"},
|
||||
"en-US_CLOUD_Female": {gender: "Female", engine: "cloud", params: ['cloud'], language: "en-US", ename: "Salli", ssml: true, name: "Cloud - en-US - Female - Salli"},
|
||||
"en-US_CLOUD_Male": {gender: "Male", engine: "cloud", params: ['cloud'], language: "en-US", ename: "Joey", ssml: true, name: "Cloud - en-US - Male - Joey"},
|
||||
"da-DK_CLOUD_Female": {gender: "Female", engine: "cloud", params: ['cloud'], language: "da-DK", ename: "Naja", ssml: true, name: "Cloud - da-DK - Female - Naja"},
|
||||
"da-DK_CLOUD_Male": {gender: "Male", engine: "cloud", params: ['cloud'], language: "da-DK", ename: "Mads", ssml: true, name: "Cloud - da-DK - Male - Mads"},
|
||||
"en-AU_CLOUD_Female": {gender: "Female", engine: "cloud", params: ['cloud'], language: "en-AU", ename: "Nicole", ssml: true, name: "Cloud - en-AU - Female - Nicole"},
|
||||
"en-AU_CLOUD_Male": {gender: "Male", engine: "cloud", params: ['cloud'], language: "en-AU", ename: "Russell", ssml: true, name: "Cloud - en-AU - Male - Russell"},
|
||||
"en-GB_CLOUD_Female_Amy": {gender: "Female", engine: "cloud", params: ['cloud'], language: "en-GB", ename: "Amy", ssml: true, name: "Cloud - en-GB - Female - Amy"},
|
||||
"en-GB_CLOUD_Male": {gender: "Male", engine: "cloud", params: ['cloud'], language: "en-GB", ename: "Brian", ssml: true, name: "Cloud - en-GB - Male - Brian"},
|
||||
"en-GB_CLOUD_Female_Emma": {gender: "Female", engine: "cloud", params: ['cloud'], language: "en-GB", ename: "Emma", ssml: true, name: "Cloud - en-GB - Female - Emma"},
|
||||
"en-GB-WLS_CLOUD_Female": {gender: "Female", engine: "cloud", params: ['cloud'], language: "en-GB-WLS", ename: "Gwyneth", ssml: true, name: "Cloud - en-GB-WLS - Female - Gwyneth"},
|
||||
"en-GB-WLS_CLOUD_Male": {gender: "Male", engine: "cloud", params: ['cloud'], language: "en-GB-WLS", ename: "Geraint", ssml: true, name: "Cloud - en-GB-WLS - Male - Geraint"},
|
||||
"cy-GB_CLOUD_Female": {gender: "Female", engine: "cloud", params: ['cloud'], language: "cy-GB", ename: "Gwyneth", ssml: true, name: "Cloud - cy-GB - Female - Gwyneth"},
|
||||
"cy-GB_CLOUD_Male": {gender: "Male", engine: "cloud", params: ['cloud'], language: "cy-GB", ename: "Geraint", ssml: true, name: "Cloud - cy-GB - Male - Geraint"},
|
||||
"en-IN_CLOUD_Female": {gender: "Female", engine: "cloud", params: ['cloud'], language: "en-IN", ename: "Raveena", ssml: true, name: "Cloud - en-IN - Female - Raveena"},
|
||||
"en-US_CLOUD_Male_Chipmunk":{gender: "Male", engine: "cloud", params: ['cloud'], language: "en-US", ename: "Chipmunk", ssml: true, name: "Cloud - en-US - Male - Chipmunk"},
|
||||
"en-US_CLOUD_Male_Eric": {gender: "Male", engine: "cloud", params: ['cloud'], language: "en-US", ename: "Eric", ssml: true, name: "Cloud - en-US - Male - Eric"},
|
||||
"en-US_CLOUD_Female_Ivy": {gender: "Female", engine: "cloud", params: ['cloud'], language: "en-US", ename: "Ivy", ssml: true, name: "Cloud - en-US - Female - Ivy"},
|
||||
"en-US_CLOUD_Female_Jennifer": {gender: "Female", engine: "cloud", params: ['cloud'], language: "en-US", ename: "Jennifer", ssml: true, name: "Cloud - en-US - Female - Jennifer"},
|
||||
"en-US_CLOUD_Male_Justin": {gender: "Male", engine: "cloud", params: ['cloud'], language: "en-US", ename: "Justin", ssml: true, name: "Cloud - en-US - Male - Justin"},
|
||||
"en-US_CLOUD_Female_Kendra": {gender: "Female", engine: "cloud", params: ['cloud'], language: "en-US", ename: "Kendra", ssml: true, name: "Cloud - en-US - Female - Kendra"},
|
||||
"en-US_CLOUD_Female_Kimberly": {gender: "Female", engine: "cloud", params: ['cloud'], language: "en-US", ename: "Kimberly", ssml: true, name: "Cloud - en-US - Female - Kimberly"},
|
||||
"es-ES_CLOUD_Female": {gender: "Female", engine: "cloud", params: ['cloud'], language: "es-ES", ename: "Conchita", ssml: true, name: "Cloud - es-ES - Female - Conchita"},
|
||||
"es-ES_CLOUD_Male": {gender: "Male", engine: "cloud", params: ['cloud'], language: "es-ES", ename: "Enrique", ssml: true, name: "Cloud - es-ES - Male - Enrique"},
|
||||
"es-US_CLOUD_Female": {gender: "Female", engine: "cloud", params: ['cloud'], language: "es-US", ename: "Penelope", ssml: true, name: "Cloud - es-US - Female - Penelope"},
|
||||
"es-US_CLOUD_Male": {gender: "Male", engine: "cloud", params: ['cloud'], language: "es-US", ename: "Miguel", ssml: true, name: "Cloud - es-US - Male - Miguel"},
|
||||
"fr-CA_CLOUD_Female": {gender: "Female", engine: "cloud", params: ['cloud'], language: "fr-CA", ename: "Chantal", ssml: true, name: "Cloud - fr-CA - Female - Chantal"},
|
||||
"fr-FR_CLOUD_Female": {gender: "Female", engine: "cloud", params: ['cloud'], language: "fr-FR", ename: "Celine", ssml: true, name: "Cloud - fr-FR - Female - Celine"},
|
||||
"fr-FR_CLOUD_Male": {gender: "Male", engine: "cloud", params: ['cloud'], language: "fr-FR", ename: "Mathieu", ssml: true, name: "Cloud - fr-FR - Male - Mathieu"},
|
||||
"is-IS_CLOUD_Female": {gender: "Female", engine: "cloud", params: ['cloud'], language: "is-IS", ename: "Dora", ssml: true, name: "Cloud - is-IS - Female - Dora"},
|
||||
"is-IS_CLOUD_Male": {gender: "Male", engine: "cloud", params: ['cloud'], language: "is-IS", ename: "Karl", ssml: true, name: "Cloud - is-IS - Male - Karl"},
|
||||
"it-IT_CLOUD_Female": {gender: "Female", engine: "cloud", params: ['cloud'], language: "it-IT", ename: "Carla", ssml: true, name: "Cloud - it-IT - Female - Carla"},
|
||||
"it-IT_CLOUD_Male": {gender: "Male", engine: "cloud", params: ['cloud'], language: "it-IT", ename: "Giorgio", ssml: true, name: "Cloud - it-IT - Male - Giorgio"},
|
||||
"nb-NO_CLOUD_Female": {gender: "Female", engine: "cloud", params: ['cloud'], language: "nb-NO", ename: "Liv", ssml: true, name: "Cloud - nb-NO - Female - Liv"},
|
||||
"nl-NL_CLOUD_Female": {gender: "Female", engine: "cloud", params: ['cloud'], language: "nl-NL", ename: "Lotte", ssml: true, name: "Cloud - nl-NL - Female - Lotte"},
|
||||
"nl-NL_CLOUD_Male": {gender: "Male", engine: "cloud", params: ['cloud'], language: "nl-NL", ename: "Ruben", ssml: true, name: "Cloud - nl-NL - Male - Ruben"},
|
||||
"pl-PL_CLOUD_Female_Agnieszka":{gender: "Female", engine: "cloud",params: ['cloud'], language: "pl-PL", ename: "Agnieszka", ssml: true, name: "Cloud - pl-PL - Female - Agnieszka"},
|
||||
"pl-PL_CLOUD_Male_Jacek": {gender: "Male", engine: "cloud", params: ['cloud'], language: "pl-PL", ename: "Jacek", ssml: true, name: "Cloud - pl-PL - Male - Jacek"},
|
||||
"pl-PL_CLOUD_Female_Ewa": {gender: "Female", engine: "cloud", params: ['cloud'], language: "pl-PL", ename: "Ewa", ssml: true, name: "Cloud - pl-PL - Female - Ewa"},
|
||||
"pl-PL_CLOUD_Male_Jan": {gender: "Male", engine: "cloud", params: ['cloud'], language: "pl-PL", ename: "Jan", ssml: true, name: "Cloud - pl-PL - Male - Jan"},
|
||||
"pl-PL_CLOUD_Female": {gender: "Female", engine: "cloud", params: ['cloud'], language: "pl-PL", ename: "Maja", ssml: true, name: "Cloud - pl-PL - Female - Maja"},
|
||||
"pt-BR_CLOUD_Female": {gender: "Female", engine: "cloud", params: ['cloud'], language: "pt-BR", ename: "Vitoria", ssml: true, name: "Cloud - pt-BR - Female - Vitoria"},
|
||||
"pt-BR_CLOUD_Male": {gender: "Male", engine: "cloud", params: ['cloud'], language: "pt-BR", ename: "Ricardo", ssml: true, name: "Cloud - pt-BR - Male - Ricardo"},
|
||||
"pt-PT_CLOUD_Male": {gender: "Male", engine: "cloud", params: ['cloud'], language: "pt-PT", ename: "Cristiano", ssml: true, name: "Cloud - pt-PT - Male - Cristiano"},
|
||||
"pt-PT_CLOUD_Female": {gender: "Female", engine: "cloud", params: ['cloud'], language: "pt-PT", ename: "Ines", ssml: true, name: "Cloud - pt-PT - Female - Ines"},
|
||||
"ro-RO_CLOUD_Female": {gender: "Female", engine: "cloud", params: ['cloud'], language: "ro-RO", ename: "Carmen", ssml: true, name: "Cloud - ro-RO - Female - Carmen"},
|
||||
"sv-SE_CLOUD_Female": {gender: "Female", engine: "cloud", params: ['cloud'], language: "sv-SE", ename: "Astrid", ssml: true, name: "Cloud - sv-SE - Female - Astrid"},
|
||||
"tr-TR_CLOUD_Female": {gender: "Female", engine: "cloud", params: ['cloud'], language: "tr-TR", ename: "Filiz", ssml: true, name: "Cloud - tr-TR - Female - Filiz"},
|
||||
|
||||
"en-US": {name: "PicoTTS - Englisch US", engine: "PicoTTS", params: []},
|
||||
"en-GB": {name: "PicoTTS - Englisch GB", engine: "PicoTTS", params: []},
|
||||
"de-DE": {name: "PicoTTS - Deutsch", engine: "PicoTTS", params: []},
|
||||
"it-IT": {name: "PicoTTS - Italiano", engine: "PicoTTS", params: []},
|
||||
"es-ES": {name: "PicoTTS - Espaniol", engine: "PicoTTS", params: []},
|
||||
"fr-FR": {name: "PicoTTS - Français", engine: "PicoTTS", params: []},
|
||||
|
||||
"ru-RU_AP_Female": {gender: "Female", engine: "polly", params: ['accessKey', 'secretKey', 'region'], language: "ru-RU", ename: "Tatyana", ssml: true, name: "AWS Polly - Русский - Татьяна"},
|
||||
"ru-RU_AP_Male": {gender: "Male", engine: "polly", params: ['accessKey', 'secretKey', 'region'], language: "ru-RU", ename: "Maxim", ssml: true, name: "AWS Polly - Русский - Максим"},
|
||||
"de-DE_AP_Female": {gender: "Female", engine: "polly", params: ['accessKey', 'secretKey', 'region'], language: "de-DE", ename: "Marlene", ssml: true, name: "AWS Polly - Deutsch - Marlene"},
|
||||
"de-DE_AP_Male": {gender: "Male", engine: "polly", params: ['accessKey', 'secretKey', 'region'], language: "de-DE", ename: "Hans", ssml: true, name: "AWS Polly - Deutsch - Hans"},
|
||||
"en-US_AP_Female": {gender: "Female", engine: "polly", params: ['accessKey', 'secretKey', 'region'], language: "en-US", ename: "Salli", ssml: true, name: "AWS Polly - en-US - Female - Salli"},
|
||||
"en-US_AP_Male": {gender: "Male", engine: "polly", params: ['accessKey', 'secretKey', 'region'], language: "en-US", ename: "Joey", ssml: true, name: "AWS Polly - en-US - Male - Joey"},
|
||||
"da-DK_AP_Female": {gender: "Female", engine: "polly", params: ['accessKey', 'secretKey', 'region'], language: "da-DK", ename: "Naja", ssml: true, name: "AWS Polly - da-DK - Female - Naja"},
|
||||
"da-DK_AP_Male": {gender: "Male", engine: "polly", params: ['accessKey', 'secretKey', 'region'], language: "da-DK", ename: "Mads", ssml: true, name: "AWS Polly - da-DK - Male - Mads"},
|
||||
"en-AU_AP_Female": {gender: "Female", engine: "polly", params: ['accessKey', 'secretKey', 'region'], language: "en-AU", ename: "Nicole", ssml: true, name: "AWS Polly - en-AU - Female - Nicole"},
|
||||
"en-AU_AP_Male": {gender: "Male", engine: "polly", params: ['accessKey', 'secretKey', 'region'], language: "en-AU", ename: "Russell", ssml: true, name: "AWS Polly - en-AU - Male - Russell"},
|
||||
"en-GB_AP_Female_Amy": {gender: "Female", engine: "polly", params: ['accessKey', 'secretKey', 'region'], language: "en-GB", ename: "Amy", ssml: true, name: "AWS Polly - en-GB - Female - Amy"},
|
||||
"en-GB_AP_Male": {gender: "Male", engine: "polly", params: ['accessKey', 'secretKey', 'region'], language: "en-GB", ename: "Brian", ssml: true, name: "AWS Polly - en-GB - Male - Brian"},
|
||||
"en-GB_AP_Female_Emma": {gender: "Female", engine: "polly", params: ['accessKey', 'secretKey', 'region'], language: "en-GB", ename: "Emma", ssml: true, name: "AWS Polly - en-GB - Female - Emma"},
|
||||
"en-GB-WLS_AP_Female": {gender: "Female", engine: "polly", params: ['accessKey', 'secretKey', 'region'], language: "en-GB-WLS", ename: "Gwyneth", ssml: true, name: "AWS Polly - en-GB-WLS - Female - Gwyneth"},
|
||||
"en-GB-WLS_AP_Male": {gender: "Male", engine: "polly", params: ['accessKey', 'secretKey', 'region'], language: "en-GB-WLS", ename: "Geraint", ssml: true, name: "AWS Polly - en-GB-WLS - Male - Geraint"},
|
||||
"cy-GB_AP_Female": {gender: "Female", engine: "polly", params: ['accessKey', 'secretKey', 'region'], language: "cy-GB", ename: "Gwyneth", ssml: true, name: "AWS Polly - cy-GB - Female - Gwyneth"},
|
||||
"cy-GB_AP_Male": {gender: "Male", engine: "polly", params: ['accessKey', 'secretKey', 'region'], language: "cy-GB", ename: "Geraint", ssml: true, name: "AWS Polly - cy-GB - Male - Geraint"},
|
||||
"en-IN_AP_Female": {gender: "Female", engine: "polly", params: ['accessKey', 'secretKey', 'region'], language: "en-IN", ename: "Raveena", ssml: true, name: "AWS Polly - en-IN - Female - Raveena"},
|
||||
"en-US_AP_Male_Chipmunk": {gender: "Male", engine: "polly", params: ['accessKey', 'secretKey', 'region'], language: "en-US", ename: "Chipmunk", ssml: true, name: "AWS Polly - en-US - Male - Chipmunk"},
|
||||
"en-US_AP_Male_Eric": {gender: "Male", engine: "polly", params: ['accessKey', 'secretKey', 'region'], language: "en-US", ename: "Eric", ssml: true, name: "AWS Polly - en-US - Male - Eric"},
|
||||
"en-US_AP_Female_Ivy": {gender: "Female", engine: "polly", params: ['accessKey', 'secretKey', 'region'], language: "en-US", ename: "Ivy", ssml: true, name: "AWS Polly - en-US - Female - Ivy"},
|
||||
"en-US_AP_Female_Jennifer": {gender: "Female", engine: "polly", params: ['accessKey', 'secretKey', 'region'], language: "en-US", ename: "Jennifer", ssml: true, name: "AWS Polly - en-US - Female - Jennifer"},
|
||||
"en-US_AP_Male_Justin": {gender: "Male", engine: "polly", params: ['accessKey', 'secretKey', 'region'], language: "en-US", ename: "Justin", ssml: true, name: "AWS Polly - en-US - Male - Justin"},
|
||||
"en-US_AP_Female_Kendra": {gender: "Female", engine: "polly", params: ['accessKey', 'secretKey', 'region'], language: "en-US", ename: "Kendra", ssml: true, name: "AWS Polly - en-US - Female - Kendra"},
|
||||
"en-US_AP_Female_Kimberly": {gender: "Female", engine: "polly", params: ['accessKey', 'secretKey', 'region'], language: "en-US", ename: "Kimberly", ssml: true, name: "AWS Polly - en-US - Female - Kimberly"},
|
||||
"es-ES_AP_Female": {gender: "Female", engine: "polly", params: ['accessKey', 'secretKey', 'region'], language: "es-ES", ename: "Conchita", ssml: true, name: "AWS Polly - es-ES - Female - Conchita"},
|
||||
"es-ES_AP_Male": {gender: "Male", engine: "polly", params: ['accessKey', 'secretKey', 'region'], language: "es-ES", ename: "Enrique", ssml: true, name: "AWS Polly - es-ES - Male - Enrique"},
|
||||
"es-US_AP_Female": {gender: "Female", engine: "polly", params: ['accessKey', 'secretKey', 'region'], language: "es-US", ename: "Penelope", ssml: true, name: "AWS Polly - es-US - Female - Penelope"},
|
||||
"es-US_AP_Male": {gender: "Male", engine: "polly", params: ['accessKey', 'secretKey', 'region'], language: "es-US", ename: "Miguel", ssml: true, name: "AWS Polly - es-US - Male - Miguel"},
|
||||
"fr-CA_AP_Female": {gender: "Female", engine: "polly", params: ['accessKey', 'secretKey', 'region'], language: "fr-CA", ename: "Chantal", ssml: true, name: "AWS Polly - fr-CA - Female - Chantal"},
|
||||
"fr-FR_AP_Female": {gender: "Female", engine: "polly", params: ['accessKey', 'secretKey', 'region'], language: "fr-FR", ename: "Celine", ssml: true, name: "AWS Polly - fr-FR - Female - Celine"},
|
||||
"fr-FR_AP_Male": {gender: "Male", engine: "polly", params: ['accessKey', 'secretKey', 'region'], language: "fr-FR", ename: "Mathieu", ssml: true, name: "AWS Polly - fr-FR - Male - Mathieu"},
|
||||
"is-IS_AP_Female": {gender: "Female", engine: "polly", params: ['accessKey', 'secretKey', 'region'], language: "is-IS", ename: "Dora", ssml: true, name: "AWS Polly - is-IS - Female - Dora"},
|
||||
"is-IS_AP_Male": {gender: "Male", engine: "polly", params: ['accessKey', 'secretKey', 'region'], language: "is-IS", ename: "Karl", ssml: true, name: "AWS Polly - is-IS - Male - Karl"},
|
||||
"it-IT_AP_Female": {gender: "Female", engine: "polly", params: ['accessKey', 'secretKey', 'region'], language: "it-IT", ename: "Carla", ssml: true, name: "AWS Polly - it-IT - Female - Carla"},
|
||||
"it-IT_AP_Male": {gender: "Male", engine: "polly", params: ['accessKey', 'secretKey', 'region'], language: "it-IT", ename: "Giorgio", ssml: true, name: "AWS Polly - it-IT - Male - Giorgio"},
|
||||
"nb-NO_AP_Female": {gender: "Female", engine: "polly", params: ['accessKey', 'secretKey', 'region'], language: "nb-NO", ename: "Liv", ssml: true, name: "AWS Polly - nb-NO - Female - Liv"},
|
||||
"nl-NL_AP_Female": {gender: "Female", engine: "polly", params: ['accessKey', 'secretKey', 'region'], language: "nl-NL", ename: "Lotte", ssml: true, name: "AWS Polly - nl-NL - Female - Lotte"},
|
||||
"nl-NL_AP_Male": {gender: "Male", engine: "polly", params: ['accessKey', 'secretKey', 'region'], language: "nl-NL", ename: "Ruben", ssml: true, name: "AWS Polly - nl-NL - Male - Ruben"},
|
||||
"pl-PL_AP_Female_Agnieszka":{gender: "Female", engine: "polly", params: ['accessKey', 'secretKey', 'region'], language: "pl-PL", ename: "Agnieszka", ssml: true, name: "AWS Polly - pl-PL - Female - Agnieszka"},
|
||||
"pl-PL_AP_Male_Jacek": {gender: "Male", engine: "polly", params: ['accessKey', 'secretKey', 'region'], language: "pl-PL", ename: "Jacek", ssml: true, name: "AWS Polly - pl-PL - Male - Jacek"},
|
||||
"pl-PL_AP_Female_Ewa": {gender: "Female", engine: "polly", params: ['accessKey', 'secretKey', 'region'], language: "pl-PL", ename: "Ewa", ssml: true, name: "AWS Polly - pl-PL - Female - Ewa"},
|
||||
"pl-PL_AP_Male_Jan": {gender: "Male", engine: "polly", params: ['accessKey', 'secretKey', 'region'], language: "pl-PL", ename: "Jan", ssml: true, name: "AWS Polly - pl-PL - Male - Jan"},
|
||||
"pl-PL_AP_Female": {gender: "Female", engine: "polly", params: ['accessKey', 'secretKey', 'region'], language: "pl-PL", ename: "Maja", ssml: true, name: "AWS Polly - pl-PL - Female - Maja"},
|
||||
"pt-BR_AP_Female": {gender: "Female", engine: "polly", params: ['accessKey', 'secretKey', 'region'], language: "pt-BR", ename: "Vitoria", ssml: true, name: "AWS Polly - pt-BR - Female - Vitoria"},
|
||||
"pt-BR_AP_Male": {gender: "Male", engine: "polly", params: ['accessKey', 'secretKey', 'region'], language: "pt-BR", ename: "Ricardo", ssml: true, name: "AWS Polly - pt-BR - Male - Ricardo"},
|
||||
"pt-PT_AP_Male": {gender: "Male", engine: "polly", params: ['accessKey', 'secretKey', 'region'], language: "pt-PT", ename: "Cristiano", ssml: true, name: "AWS Polly - pt-PT - Male - Cristiano"},
|
||||
"pt-PT_AP_Female": {gender: "Female", engine: "polly", params: ['accessKey', 'secretKey', 'region'], language: "pt-PT", ename: "Ines", ssml: true, name: "AWS Polly - pt-PT - Female - Ines"},
|
||||
"ro-RO_AP_Female": {gender: "Female", engine: "polly", params: ['accessKey', 'secretKey', 'region'], language: "ro-RO", ename: "Carmen", ssml: true, name: "AWS Polly - ro-RO - Female - Carmen"},
|
||||
"sv-SE_AP_Female": {gender: "Female", engine: "polly", params: ['accessKey', 'secretKey', 'region'], language: "sv-SE", ename: "Astrid", ssml: true, name: "AWS Polly - sv-SE - Female - Astrid"},
|
||||
"tr-TR_AP_Female": {gender: "Female", engine: "polly", params: ['accessKey', 'secretKey', 'region'], language: "tr-TR", ename: "Filiz", ssml: true, name: "AWS Polly - tr-TR - Female - Filiz"}
|
||||
};
|
||||
|
||||
var sayitOptions = {
|
||||
"browser": {name: "Browser", params: ['engine', 'cache', 'instance'], mp3Required: true, checkLength: true, func: (typeof sayItBrowser !== 'undefined') ? sayItBrowser : null, server: true, libs: ['fs', 'crypto', 'http']},
|
||||
"mp24ftp": {name: "MediaPlayer24+FTP", params: ['engine', 'cache', 'server', 'port', 'user', 'pass'], mp3Required: true, checkLength: true, func: (typeof sayItMP24ftp !== 'undefined') ? sayItMP24ftp : null, server: false, libs: ['fs', 'crypto', 'http', 'jsftp']},
|
||||
"mp24": {name: "MediaPlayer24", params: ['server'], mp3Required: false, checkLength: true, func: (typeof sayItMP24 !== 'undefined') ? sayItMP24 : null, server: false, libs: ['fs', 'crypto', 'http']},
|
||||
"system": {name: "System", params: ['engine', 'cache'], mp3Required: true, checkLength: false, func: (typeof sayItSystem !== 'undefined') ? sayItSystem : null, server: false, libs: ['fs', 'crypto', 'http', 'child_process', 'os']},
|
||||
"windows": {name: "Windows default", params: [], mp3Required: false, checkLength: true, func: (typeof sayItWindows !== 'undefined') ? sayItWindows : null, server: false, libs: ['fs', 'child_process']},
|
||||
"sonos": {name: "Sonos", params: ['engine', 'cache', 'device', 'web', 'webServer'], mp3Required: true, checkLength: true, func: (typeof sayItSonos !== 'undefined') ? sayItSonos : null, server: true, libs: ['fs', 'crypto', 'http']},
|
||||
"chromecast": {name: "Chromecast", params: ['engine', 'cache', 'cDevice', 'web', 'webServer'], mp3Required: true, checkLength: true, func: (typeof sayItChromecast !== 'undefined') ? sayItChromecast : null, server: true, libs: ['fs', 'crypto', 'http']},
|
||||
"mpd": {name: "MPD", params: ['engine', 'cache', 'mpd_device', 'web', 'webServer'], mp3Required: true, checkLength: true, func: (typeof sayItMpd !== 'undefined') ? sayItMpd : null, server: true, libs: ['fs', 'crypto', 'http']},
|
||||
"googleHome": {name: "Google Home", params: ['engine', 'cache', 'server', 'web', 'webServer'], mp3Required: true, checkLength: true, func: (typeof sayItGoogleHome !== 'undefined') ? sayItGoogleHome : null, server: true, libs: ['fs', 'crypto', 'http', 'castv2-client']}
|
||||
};
|
||||
|
||||
if (typeof module !== 'undefined' && module.parent) {
|
||||
module.exports.sayitEngines = sayitEngines;
|
||||
module.exports.sayitOptions = sayitOptions;
|
||||
}
|
||||
@@ -0,0 +1,42 @@
|
||||
{
|
||||
"sayIt adapter settings": "sayIt Einstellungen",
|
||||
"Language:": "Sprache",
|
||||
"Type:": "Ausgabe durch",
|
||||
"Cache:": "Cache benutzen",
|
||||
"Server:": "Server",
|
||||
"Port:": "Port",
|
||||
"User:": "Anwender",
|
||||
"Password:": "Kennwort",
|
||||
"Browser instance:": "Browser-Instanz",
|
||||
"Device:": "Gerät",
|
||||
"Web server IP:": "Web server IP",
|
||||
"All": "Alle",
|
||||
"Web instance:": "Web instance",
|
||||
"Voice:": "Stimme",
|
||||
"API Key:": "API Key",
|
||||
"Emotion:": "Emotion",
|
||||
"Drunk:": "Betrunken",
|
||||
"Ill:": "Krank",
|
||||
"Robot:": "Roboter",
|
||||
"Announce:": "Ankündigung",
|
||||
"place here": "Dateien hier ablegen",
|
||||
"Announce timeout (sec):": "Ankündigungstimeout (Sek)",
|
||||
"Announce length (sec):": "Ankündigunglänge (Sek)",
|
||||
"API Key is not set!": "API Key ist leer!",
|
||||
"System command:": "Systemkommando",
|
||||
"Announce volume (%):": "Ankündigungslautstärke(%)",
|
||||
"Linux player:": "Linux-Player",
|
||||
"Ignore for non linux OS": "Ignorieren für nicht linux OS",
|
||||
"Access Key:": "Access Key",
|
||||
"Secret Key:": "Secret Key",
|
||||
"AWS Region:": "AWS Region",
|
||||
"Cloud instance:": "Cloud-Intsanz",
|
||||
"Cache-Expiry:": "Cache-Expiry",
|
||||
"Browse": "Suchen",
|
||||
"select": "auswählen",
|
||||
"error": "Fehler",
|
||||
"IP not accessible for server": "IP ist für dieses Gerät nicht erreichbar",
|
||||
"Install first cloud adapter": "Erst muss cloud-Adapter installiert werden",
|
||||
"tooltip_type": "Damit wird gesetzt, wo die Sprache ausgegeben wird",
|
||||
"tooltip_command": "Dieses Kommando wird ausgeführt, um eigenen System-Player zu benutzen"
|
||||
}
|
||||
@@ -0,0 +1,42 @@
|
||||
{
|
||||
"sayIt adapter settings": "sayIt adapter settings",
|
||||
"Language:": "Language",
|
||||
"Type:": "Output in",
|
||||
"Cache:": "Cache received audio files",
|
||||
"Server:": "Server",
|
||||
"Port:": "Port",
|
||||
"User:": "User",
|
||||
"Password:": "Password",
|
||||
"Browser instance:": "Browser instance",
|
||||
"Device:": "Device",
|
||||
"Web server IP:": "Web server IP",
|
||||
"All": "All",
|
||||
"Web instance:": "Web instance",
|
||||
"Voice:": "Voice",
|
||||
"API Key:": "API Key",
|
||||
"Emotion:": "Emotion",
|
||||
"Drunk:": "Drunk",
|
||||
"Ill:": "Ill",
|
||||
"Robot:": "Robot",
|
||||
"Announce:": "Announce",
|
||||
"place here": "Place files here",
|
||||
"Announce timeout (sec):": "Announce timeout (sec)",
|
||||
"Announce length (sec):": "Announce length (sec)",
|
||||
"API Key is not set!": "API Key is not set!",
|
||||
"System command:": "System command",
|
||||
"Announce volume (%):": "Announce volume(%)",
|
||||
"Linux player:": "Linux player",
|
||||
"Ignore for non linux OS": "Ignore for non linux OS",
|
||||
"Access Key:": "Access Key",
|
||||
"Secret Key:": "Secret Key",
|
||||
"AWS Region:": "AWS Region",
|
||||
"Cloud instance:": "Cloud instance",
|
||||
"Cache-Expiry:": "Cache-Expiry",
|
||||
"Browse": "Browse",
|
||||
"select": "select",
|
||||
"error": "error",
|
||||
"IP not accessible for server": "IP is not accessible for the device",
|
||||
"Install first cloud adapter": "Install first cloud adapter",
|
||||
"tooltip_type": "Specify where the voice must be played",
|
||||
"tooltip_command": "This command will be executed, to use the custom system player"
|
||||
}
|
||||
@@ -0,0 +1,42 @@
|
||||
{
|
||||
"sayIt adapter settings": "sayIt configuración del adaptador",
|
||||
"Language:": "Idioma",
|
||||
"Type:": "Salida en",
|
||||
"Cache:": "Caché recibió archivos de audio",
|
||||
"Server:": "Servidor",
|
||||
"Port:": "Puerto",
|
||||
"User:": "Usuario",
|
||||
"Password:": "Contraseña",
|
||||
"Browser instance:": "Instancia del navegador",
|
||||
"Device:": "Dispositivo",
|
||||
"Web server IP:": "Servidor web IP",
|
||||
"All": "Todas",
|
||||
"Web instance:": "Instancia web",
|
||||
"Voice:": "Voz",
|
||||
"API Key:": "Clave API",
|
||||
"Emotion:": "Emoción",
|
||||
"Drunk:": "Borracho",
|
||||
"Ill:": "Enfermo",
|
||||
"Robot:": "Robot",
|
||||
"Announce:": "Anunciar",
|
||||
"place here": "Coloque los archivos aquí",
|
||||
"Announce timeout (sec):": "Anunciar tiempo de espera (sec)",
|
||||
"Announce length (sec):": "Anunciar longitud (sec)",
|
||||
"API Key is not set!": "¡La clave API no está configurada!",
|
||||
"System command:": "Comando del sistema",
|
||||
"Announce volume (%):": "Anunciar volumen (%)",
|
||||
"Linux player:": "Reproductor de Linux",
|
||||
"Ignore for non linux OS": "Ignorar para el sistema operativo no Linux",
|
||||
"Access Key:": "Llave de acceso",
|
||||
"Secret Key:": "Llave secreta",
|
||||
"AWS Region:": "Región de AWS",
|
||||
"Cloud instance:": "Instancia de la nube",
|
||||
"Cache-Expiry:": "Caché-expiración",
|
||||
"Browse": "Vistazo",
|
||||
"select": "seleccionar",
|
||||
"error": "error",
|
||||
"IP not accessible for server": "IP no es accesible para el dispositivo",
|
||||
"Install first cloud adapter": "Instale el primer adaptador de nube",
|
||||
"tooltip_type": "Especifique dónde debe reproducirse la voz",
|
||||
"tooltip_command": "Este comando se ejecutará para usar el reproductor de sistema personalizado"
|
||||
}
|
||||
@@ -0,0 +1,42 @@
|
||||
{
|
||||
"sayIt adapter settings": "sayIt paramètres de l'adaptateur",
|
||||
"Language:": "La langue",
|
||||
"Type:": "Sortie dans",
|
||||
"Cache:": "Cache les fichiers audio reçus",
|
||||
"Server:": "Serveur",
|
||||
"Port:": "Port",
|
||||
"User:": "Utilisateur",
|
||||
"Password:": "Mot de passe",
|
||||
"Browser instance:": "Instance du navigateur",
|
||||
"Device:": "Dispositif",
|
||||
"Web server IP:": "Adresse IP du serveur Web",
|
||||
"All": "Tout",
|
||||
"Web instance:": "Instance Web",
|
||||
"Voice:": "Voix",
|
||||
"API Key:": "clé API",
|
||||
"Emotion:": "Émotion",
|
||||
"Drunk:": "Ivre",
|
||||
"Ill:": "Mauvais",
|
||||
"Robot:": "Robot",
|
||||
"Announce:": "Annoncer",
|
||||
"place here": "Placez les fichiers ici",
|
||||
"Announce timeout (sec):": "Annoncer le délai (sec)",
|
||||
"Announce length (sec):": "Annoncer la longueur (sec)",
|
||||
"API Key is not set!": "La clé de l'API n'est pas définie!",
|
||||
"System command:": "Commande système",
|
||||
"Announce volume (%):": "Annoncer le volume (%)",
|
||||
"Linux player:": "Lecteur Linux",
|
||||
"Ignore for non linux OS": "Ignorer pour les systèmes d'exploitation autres que Linux",
|
||||
"Access Key:": "Clef d'accès",
|
||||
"Secret Key:": "Clef secrète",
|
||||
"AWS Region:": "Région AWS",
|
||||
"Cloud instance:": "Instance de cloud",
|
||||
"Cache-Expiry:": "Cache-Expiration",
|
||||
"Browse": "Feuilleter",
|
||||
"select": "sélectionner",
|
||||
"error": "Erreur",
|
||||
"IP not accessible for server": "L'adresse IP n'est pas accessible pour l'appareil",
|
||||
"Install first cloud adapter": "Installez le premier adaptateur de cloud",
|
||||
"tooltip_type": "Précisez où la voix doit être jouée",
|
||||
"tooltip_command": "Cette commande sera exécutée pour utiliser le lecteur système personnalisé"
|
||||
}
|
||||
@@ -0,0 +1,42 @@
|
||||
{
|
||||
"sayIt adapter settings": "impostazioni dell'adattatore sayIt",
|
||||
"Language:": "linguaggio",
|
||||
"Type:": "Uscita in",
|
||||
"Cache:": "La cache ha ricevuto file audio",
|
||||
"Server:": "server",
|
||||
"Port:": "Porta",
|
||||
"User:": "Utente",
|
||||
"Password:": "Parola d'ordine",
|
||||
"Browser instance:": "Istanza del browser",
|
||||
"Device:": "Dispositivo",
|
||||
"Web server IP:": "IP del server Web",
|
||||
"All": "Tutti",
|
||||
"Web instance:": "Istanza Web",
|
||||
"Voice:": "Voce",
|
||||
"API Key:": "Chiave API",
|
||||
"Emotion:": "Emozione",
|
||||
"Drunk:": "Ubriaco",
|
||||
"Ill:": "Malato",
|
||||
"Robot:": "Robot",
|
||||
"Announce:": "Annunciare",
|
||||
"place here": "Inserisci i file qui",
|
||||
"Announce timeout (sec):": "Annuncia timeout (sec)",
|
||||
"Announce length (sec):": "Annunciare la lunghezza (sec)",
|
||||
"API Key is not set!": "Chiave API non impostata!",
|
||||
"System command:": "Comando di sistema",
|
||||
"Announce volume (%):": "Annuncia volume (%)",
|
||||
"Linux player:": "Lettore Linux",
|
||||
"Ignore for non linux OS": "Ignora per sistema operativo non Linux",
|
||||
"Access Key:": "Chiave di accesso",
|
||||
"Secret Key:": "Chiave segreta",
|
||||
"AWS Region:": "Regione AWS",
|
||||
"Cloud instance:": "Istanza Cloud",
|
||||
"Cache-Expiry:": "Cache-scadenza",
|
||||
"Browse": "Navigare",
|
||||
"select": "selezionare",
|
||||
"error": "errore",
|
||||
"IP not accessible for server": "L'IP non è accessibile per il dispositivo",
|
||||
"Install first cloud adapter": "Installa il primo adattatore cloud",
|
||||
"tooltip_type": "Specificare dove deve essere suonata la voce",
|
||||
"tooltip_command": "Questo comando verrà eseguito, per utilizzare il player di sistema personalizzato"
|
||||
}
|
||||
@@ -0,0 +1,42 @@
|
||||
{
|
||||
"sayIt adapter settings": "sayIt adapter-instellingen",
|
||||
"Language:": "Taal",
|
||||
"Type:": "Uitgang in",
|
||||
"Cache:": "Cache ontvangen audiobestanden",
|
||||
"Server:": "Server",
|
||||
"Port:": "Haven",
|
||||
"User:": "Gebruiker",
|
||||
"Password:": "Wachtwoord",
|
||||
"Browser instance:": "Browserinstantie",
|
||||
"Device:": "Apparaat",
|
||||
"Web server IP:": "Webserver IP",
|
||||
"All": "Alle",
|
||||
"Web instance:": "Web-instantie",
|
||||
"Voice:": "Stem",
|
||||
"API Key:": "API sleutel",
|
||||
"Emotion:": "Emotie",
|
||||
"Drunk:": "Dronken",
|
||||
"Ill:": "Ziek",
|
||||
"Robot:": "Robot",
|
||||
"Announce:": "aankondigen",
|
||||
"place here": "Plaats hier bestanden",
|
||||
"Announce timeout (sec):": "Announce time-out (sec)",
|
||||
"Announce length (sec):": "Kondig lengte (sec)",
|
||||
"API Key is not set!": "API-sleutel is niet ingesteld!",
|
||||
"System command:": "Systeemopdracht",
|
||||
"Announce volume (%):": "Volume aankondigen (%)",
|
||||
"Linux player:": "Linux-speler",
|
||||
"Ignore for non linux OS": "Negeren voor niet-Linux OS",
|
||||
"Access Key:": "Toegangssleutel",
|
||||
"Secret Key:": "Geheime sleutel",
|
||||
"AWS Region:": "AWS-regio",
|
||||
"Cloud instance:": "Cloud instantie",
|
||||
"Cache-Expiry:": "Cache-Vervaldatum",
|
||||
"Browse": "Blader",
|
||||
"select": "kiezen",
|
||||
"error": "fout",
|
||||
"IP not accessible for server": "IP is niet toegankelijk voor het apparaat",
|
||||
"Install first cloud adapter": "Installeer de eerste cloudadapter",
|
||||
"tooltip_type": "Geef op waar de stem moet worden afgespeeld",
|
||||
"tooltip_command": "Deze opdracht wordt uitgevoerd om de aangepaste systeemspeler te gebruiken"
|
||||
}
|
||||
@@ -0,0 +1,42 @@
|
||||
{
|
||||
"sayIt adapter settings": "sayTo ustawienia adaptera",
|
||||
"Language:": "Język",
|
||||
"Type:": "Wyjście w",
|
||||
"Cache:": "Pamięć podręczna otrzymała pliki audio",
|
||||
"Server:": "serwer",
|
||||
"Port:": "Port",
|
||||
"User:": "Użytkownik",
|
||||
"Password:": "Hasło",
|
||||
"Browser instance:": "Browser instance",
|
||||
"Device:": "Urządzenie",
|
||||
"Web server IP:": "Adres IP serwera WWW",
|
||||
"All": "Wszystko",
|
||||
"Web instance:": "Instancja internetowa",
|
||||
"Voice:": "Głos",
|
||||
"API Key:": "Klucz API",
|
||||
"Emotion:": "Emocja",
|
||||
"Drunk:": "Pijany",
|
||||
"Ill:": "Chory",
|
||||
"Robot:": "Robot",
|
||||
"Announce:": "Ogłosić",
|
||||
"place here": "Umieść pliki tutaj",
|
||||
"Announce timeout (sec):": "Ogłaszaj limit czasu (sek)",
|
||||
"Announce length (sec):": "Ogłaszaj długość (s)",
|
||||
"API Key is not set!": "Klucz API nie jest ustawiony!",
|
||||
"System command:": "Polecenie systemowe",
|
||||
"Announce volume (%):": "Ogłaszaj objętość (%)",
|
||||
"Linux player:": "Odtwarzacz Linux",
|
||||
"Ignore for non linux OS": "Zignoruj dla systemu operacyjnego non linux",
|
||||
"Access Key:": "Klucz dostępu",
|
||||
"Secret Key:": "Sekretny klucz",
|
||||
"AWS Region:": "Region AWS",
|
||||
"Cloud instance:": "Instancja chmury",
|
||||
"Cache-Expiry:": "Cache-Expiry",
|
||||
"Browse": "Paść się",
|
||||
"select": "Wybierz",
|
||||
"error": "błąd",
|
||||
"IP not accessible for server": "Adres IP jest niedostępny dla urządzenia",
|
||||
"Install first cloud adapter": "Zainstaluj pierwszy adapter chmury",
|
||||
"tooltip_type": "Określ, gdzie musi być odtwarzany głos",
|
||||
"tooltip_command": "To polecenie zostanie wykonane, aby użyć niestandardowego odtwarzacza systemu"
|
||||
}
|
||||
@@ -0,0 +1,42 @@
|
||||
{
|
||||
"sayIt adapter settings": "configurações do adaptador sayIt",
|
||||
"Language:": "Língua",
|
||||
"Type:": "Saída em",
|
||||
"Cache:": "Cache recebido arquivos de áudio",
|
||||
"Server:": "Servidor",
|
||||
"Port:": "Porta",
|
||||
"User:": "Do utilizador",
|
||||
"Password:": "Senha",
|
||||
"Browser instance:": "Instância do navegador",
|
||||
"Device:": "Dispositivo",
|
||||
"Web server IP:": "IP do servidor da Web",
|
||||
"All": "Todos",
|
||||
"Web instance:": "Instância da Web",
|
||||
"Voice:": "Voz",
|
||||
"API Key:": "Chave API",
|
||||
"Emotion:": "Emoção",
|
||||
"Drunk:": "Bêbado",
|
||||
"Ill:": "Eu vou",
|
||||
"Robot:": "Robô",
|
||||
"Announce:": "Anunciar",
|
||||
"place here": "Coloque arquivos aqui",
|
||||
"Announce timeout (sec):": "Anular o tempo limite (seg)",
|
||||
"Announce length (sec):": "Anunciar o comprimento (seg)",
|
||||
"API Key is not set!": "A chave da API não está definida!",
|
||||
"System command:": "Comando do sistema",
|
||||
"Announce volume (%):": "Anunciar volume (%)",
|
||||
"Linux player:": "Jogador Linux",
|
||||
"Ignore for non linux OS": "Ignorar para SO não linux",
|
||||
"Access Key:": "Chave de acesso",
|
||||
"Secret Key:": "Chave secreta",
|
||||
"AWS Region:": "Região da AWS",
|
||||
"Cloud instance:": "Instância de nuvem",
|
||||
"Cache-Expiry:": "Cache-Expiração",
|
||||
"Browse": "Squeaky toy",
|
||||
"select": "selecione",
|
||||
"error": "erro",
|
||||
"IP not accessible for server": "IP não está acessível para o dispositivo",
|
||||
"Install first cloud adapter": "Instalar o primeiro adaptador de nuvem",
|
||||
"tooltip_type": "Especifique onde a voz deve ser tocada",
|
||||
"tooltip_command": "Este comando será executado para usar o player do sistema personalizado"
|
||||
}
|
||||
@@ -0,0 +1,42 @@
|
||||
{
|
||||
"sayIt adapter settings": "sayIt Настройки",
|
||||
"Language:": "Язык",
|
||||
"Type:": "Вывод звука",
|
||||
"Cache:": "Кэшировать полученные аудио-файлы",
|
||||
"Server:": "Сервер",
|
||||
"Port:": "Порт",
|
||||
"User:": "Пользователь",
|
||||
"Password:": "Пароль",
|
||||
"Browser instance:": "ID броузера",
|
||||
"Device:": "Устройство",
|
||||
"Web server IP:": "IP Веб сервера",
|
||||
"All": "Все",
|
||||
"Web instance:": "Web instance",
|
||||
"Voice:": "Голос",
|
||||
"API Key:": "API Key",
|
||||
"Emotion:": "Емоциональный окрас",
|
||||
"Drunk:": "Пьяный голос",
|
||||
"Ill:": "Больной голос",
|
||||
"Robot:": "Голос робота",
|
||||
"Announce:": "Извещение",
|
||||
"place here": "Перетащите файлы сюда",
|
||||
"Announce timeout (sec):": "Таймаут извещения (сек)",
|
||||
"Announce length (sec):": "Длительность извещения (сек)",
|
||||
"API Key is not set!": "API Key отсутствует!",
|
||||
"System command:": "Системный вызов",
|
||||
"Announce volume (%):": "Громкость извещения(%)",
|
||||
"Linux player:": "Linux плейер",
|
||||
"Ignore for non linux OS": "Игнорировать для не linux OS",
|
||||
"Access Key:": "Access Key",
|
||||
"Secret Key:": "Secret Key",
|
||||
"AWS Region:": "AWS регион",
|
||||
"Cloud instance:": "Cloud драйвер",
|
||||
"Cache-Expiry:": "Срок хранения кэш",
|
||||
"Browse": "Искать",
|
||||
"select": "выбрать",
|
||||
"error": "ошибка",
|
||||
"IP not accessible for server": "Этот IP недоступен для устройства",
|
||||
"Install first cloud adapter": "Сначала установите cloud драйвер",
|
||||
"tooltip_type": "Укажите как и где будет выводится голос",
|
||||
"tooltip_command": "Эта команда выполнится для проигрывания с собственным плеером"
|
||||
}
|
||||
@@ -0,0 +1,650 @@
|
||||
<html>
|
||||
<head>
|
||||
<link rel="stylesheet" type="text/css" href="../../lib/css/themes/jquery-ui/redmond/jquery-ui.min.css"/>
|
||||
<script type="text/javascript" src="../../lib/js/jquery-1.11.1.min.js"></script>
|
||||
<script type="text/javascript" src="../../socket.io/socket.io.js"></script>
|
||||
<script type="text/javascript" src="../../lib/js/jquery-ui-1.10.3.full.min.js"></script>
|
||||
|
||||
<link rel="stylesheet" type="text/css" href="../../css/adapter.css"/>
|
||||
<script type="text/javascript" src="engines.js"></script>
|
||||
<script type="text/javascript" src="../../js/translate.js"></script>
|
||||
<script type="text/javascript" src="../../js/adapter-settings.js"></script>
|
||||
<script type="text/javascript" src="words.js"></script>
|
||||
<style>
|
||||
#drop_zone {
|
||||
border: 2px dashed #bbb;
|
||||
-moz-border-radius: 5px;
|
||||
-webkit-border-radius: 5px;
|
||||
border-radius: 5px;
|
||||
padding: 25px;
|
||||
text-align: center;
|
||||
font-size: 20pt;
|
||||
font-weight: bold;
|
||||
font-family: 'Arial';
|
||||
color: #bbb;
|
||||
width: 90%;
|
||||
height: 60px;
|
||||
}
|
||||
|
||||
.error {
|
||||
border: 2px solid red;
|
||||
}
|
||||
</style>
|
||||
<script type="text/javascript">
|
||||
var webServers = null;
|
||||
var gOnChange;
|
||||
|
||||
function showHideSettings() {
|
||||
$('.variable').hide();
|
||||
var type = $('#type').val();
|
||||
for (var j = 0; j < sayitOptions[type].params.length; j++) {
|
||||
$('#tr_' + sayitOptions[type].params[j]).show();
|
||||
}
|
||||
|
||||
if (type === 'googleHome') {
|
||||
$('.announceValue').hide();
|
||||
$('.announce').hide();
|
||||
$('.system').hide();
|
||||
$('.googleHome').show();
|
||||
|
||||
getIsAdapterAlive(function (isAlive) {
|
||||
if (isAlive || common.enabled) {
|
||||
$('#search').button('enable');
|
||||
fillGoogleHome();
|
||||
}
|
||||
});
|
||||
} else {
|
||||
$('.googleHome').hide();
|
||||
$('.announceValue').show();
|
||||
$('.announce').show();
|
||||
}
|
||||
|
||||
$('.engine').hide();
|
||||
var engine = $('#engine').val();
|
||||
|
||||
if (!sayitEngines[engine] || sayitOptions[type].params.indexOf('engine') === -1) return;
|
||||
|
||||
for (var i = 0; i < sayitEngines[engine].params.length; i++) {
|
||||
$('#tr_' + sayitEngines[engine].params[i]).show();
|
||||
if (sayitEngines[engine][sayitEngines[engine].params[i]]) {
|
||||
var arr = sayitEngines[engine][sayitEngines[engine].params[i]];
|
||||
var param = sayitEngines[engine].params[i];
|
||||
|
||||
var $val = $('#' + param);
|
||||
if (arr.length) {
|
||||
var val = $val.val();
|
||||
var text = '';
|
||||
for (var p = 0; p < arr.length; p++) {
|
||||
text += '<option value="' + arr[p] + '">' + arr[p] + '</option>';
|
||||
}
|
||||
$val.html(text);
|
||||
if (val) {
|
||||
$val.val(val);
|
||||
} else {
|
||||
$val.val(arr[0]);
|
||||
}
|
||||
} else {
|
||||
$val.html('');
|
||||
}
|
||||
}
|
||||
}
|
||||
if (type !== 'system') {
|
||||
$('.system').hide();
|
||||
} else {
|
||||
$('.system').show();
|
||||
}
|
||||
|
||||
if (!$('#announce').val()) {
|
||||
$('.announce').hide();
|
||||
$('#play').button('disable');
|
||||
} else {
|
||||
$('.announce').show();
|
||||
$('#play').button('enable');
|
||||
}
|
||||
}
|
||||
|
||||
function fillSonosDevices(elem, current) {
|
||||
socket.emit('getObjectView', 'system', 'channel', {startkey: 'sonos.', endkey: 'sonos.\u9999'}, function (err, res) {
|
||||
if (!err && res) {
|
||||
for (var i = 0; i < res.rows.length; i++) {
|
||||
$(elem).append('<option value="' + res.rows[i].id + '">' + res.rows[i].id + '</option>');
|
||||
}
|
||||
}
|
||||
$(elem).val(current);
|
||||
});
|
||||
}
|
||||
|
||||
function fillMpdDevice(elem, current) {
|
||||
socket.emit('getObjectView', 'system', 'instance', {startkey: 'system.adapter.mpd.', endkey: 'system.adapter.mpd.\u9999'}, function (err, res) {
|
||||
if (!err && res) {
|
||||
for (var i = 0; i < res.rows.length; i++) {
|
||||
var n = res.rows[i].id.replace('system.adapter.', '');
|
||||
$(elem).append('<option value="' + n + '">' + n + '</option>');
|
||||
}
|
||||
}
|
||||
$(elem).val(current);
|
||||
});
|
||||
}
|
||||
|
||||
function fillChromecastDevices(elem, current) {
|
||||
socket.emit('getObjectView', 'system', 'device', {startkey: 'chromecast.', endkey: 'chromecast.\u9999'}, function (err, res) {
|
||||
if (!err && res) {
|
||||
for (var i = 0; i < res.rows.length; i++) {
|
||||
$(elem).append('<option value="' + res.rows[i].id + '">' + res.rows[i].id + '</option>');
|
||||
}
|
||||
}
|
||||
$(elem).val(current);
|
||||
});
|
||||
}
|
||||
|
||||
function fillGoogleHome() {
|
||||
$('#search').button('disable');
|
||||
sendTo(null, 'browseChromecast', null, function (list) {
|
||||
var text = '<option value="">' + _('select') + '</option>';
|
||||
if (list) {
|
||||
for (var i = 0; i < list.length; i++) {
|
||||
text += '<option value="' + list[i].ip + '">' + list[i].name + '[' + list[i].ip + ']</option>';
|
||||
}
|
||||
$('#googleHome').html(text).prop('disabled', false).off('change').on('change', function () {
|
||||
$('#server').val($(this).val()).trigger('change');
|
||||
});
|
||||
} else {
|
||||
$('#googleHome').html('<option value="">' + _('error') + '</option>').prop('disabled', true);
|
||||
}
|
||||
$('#search').button('enable');
|
||||
});
|
||||
}
|
||||
|
||||
function ip2hex(ip) {
|
||||
var octets = ip.split('.');
|
||||
if (octets.length !== 4) {
|
||||
return 0;
|
||||
}
|
||||
var result = 0;
|
||||
for (var i = 0; i < octets.length; ++i) {
|
||||
var octet = parseInt(octets[i], 10);
|
||||
if (Number.isNaN(octet) || octet < 0 || octet > 255) {
|
||||
throw new Error("Each octet must be between 0 and 255");
|
||||
}
|
||||
result |= octet << ((octets.length - i) * 8);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
function checkWeb(elem, current) {
|
||||
var web = $('#web').val();
|
||||
for (var i = 0; i < webServers.length; i++) {
|
||||
if (webServers[i].id === 'system.adapter.' + web) {
|
||||
if (webServers[i].value.native.auth) {
|
||||
showMessage(_('Cannot use web server with authentication'), null, 'info');
|
||||
}
|
||||
if (webServers[i].value.native.bind === 'localhost' || webServers[i].value.native.bind === '127.0.0.1' || webServers[i].value.native.bind === '::1') {
|
||||
showMessage(_('Cannot use web server only on localhost'), null, 'info');
|
||||
}
|
||||
|
||||
if (webServers[i].value.native.bind === '0.0.0.0') {
|
||||
$('#tr_webServer').show();
|
||||
var $webServer = $('#webServer');
|
||||
$webServer.html('');
|
||||
// read all ipv4 addresses of host
|
||||
socket.emit('getObject', 'system.host.' + webServers[i].value.common.host, function (err, obj) {
|
||||
var text = '';
|
||||
if (!err && obj && obj.native) {
|
||||
for (var iface in obj.native.hardware.networkInterfaces) {
|
||||
if (obj.native.hardware.networkInterfaces.hasOwnProperty(iface)) {
|
||||
for (var i = 0; i < obj.native.hardware.networkInterfaces[iface].length; i++) {
|
||||
if (obj.native.hardware.networkInterfaces[iface][i].family === 'IPv4' && !obj.native.hardware.networkInterfaces[iface][i].internal) {
|
||||
text += '<option value="' + obj.native.hardware.networkInterfaces[iface][i].address + '" data-mask="' + obj.native.hardware.networkInterfaces[iface][i].netmask + '">[IPv4] ' + obj.native.hardware.networkInterfaces[iface][i].address + ' - ' + iface + '</option>';
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
$webServer.html(text);
|
||||
|
||||
if (current) {
|
||||
$webServer.val(current);
|
||||
}
|
||||
$webServer.off('change').on('change', function () {
|
||||
gOnChange();
|
||||
var ip = $(this).val();
|
||||
var netmask = $(this).find('option[value="' + ip + '"]').data('mask');
|
||||
var server;
|
||||
var type = $('#type').val();
|
||||
if (type === 'googleHome') {
|
||||
server = $('#server').val();
|
||||
} else if (type === 'sonos') {
|
||||
server = $('#device').val();
|
||||
} else if (type === 'chromecast') {
|
||||
server = $('#cDevice').val();
|
||||
} else if (type === 'mpd') {
|
||||
server = $('#mpd_device').val();
|
||||
}
|
||||
if (server && ip && netmask && server.indexOf(':') === -1 && ip.indexOf(':') === -1) {
|
||||
ip = ip2hex(ip);
|
||||
netmask = ip2hex(netmask);
|
||||
server = ip2hex(server);
|
||||
if ((ip & netmask) !== (server & netmask)) {
|
||||
$webServer.addClass('error').attr('title', _('IP not accessible for server'));
|
||||
} else {
|
||||
$webServer.removeClass('error').attr('title', '');
|
||||
}
|
||||
} else {
|
||||
$webServer.removeClass('error');
|
||||
}
|
||||
|
||||
});
|
||||
});
|
||||
} else if (webServers[i].value.native.bind === '::') {
|
||||
// read all ipv6 addresses of host
|
||||
socket.emit('getObject', 'system.host.' + webServers[i].value.common.host, function (err, obj) {
|
||||
if (!err && obj && obj.native) {
|
||||
for (var iface in obj.native.hardware.networkInterfaces) {
|
||||
if (obj.native.hardware.networkInterfaces.hasOwnProperty(iface)) {
|
||||
for (var i = 0; i < obj.native.hardware.networkInterfaces[iface].length; i++) {
|
||||
if (obj.native.hardware.networkInterfaces[iface][i].family === 'IPv6' && !obj.native.hardware.networkInterfaces[iface][i].internal) {
|
||||
$('#webServer').append('<option value="' + obj.native.hardware.networkInterfaces[iface][i].address + '">[IPv6] ' + obj.native.hardware.networkInterfaces[iface][i].address + ' - ' + iface + '</option>');
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (current) {
|
||||
$('#webServer').val(current);
|
||||
}
|
||||
});
|
||||
} else {
|
||||
$('#tr_webServer').hide();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function fillWebServices(elem, current, type, webServer) {
|
||||
socket.emit('getObjectView', 'system', 'instance', {startkey: 'system.adapter.web.', endkey: 'system.adapter.web.\u9999'}, function (err, res) {
|
||||
if (!err && res) {
|
||||
webServers = res.rows;
|
||||
for (var i = 0; i < res.rows.length; i++) {
|
||||
var n = res.rows[i].id.replace('system.adapter.', '');
|
||||
var auth = res.rows[i].value.native.auth ? 'data-auth="true"' : '';
|
||||
$(elem).append('<option value="' + n + '" ' + auth + '>' + n + '</option>');
|
||||
}
|
||||
}
|
||||
$(elem).val(current);
|
||||
if ((type === 'sonos') ||
|
||||
(type === 'chromecast') ||
|
||||
(type === 'googleHome')) {
|
||||
checkWeb('#web', webServer);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function uploadFile(file, callback) {
|
||||
var reader = new FileReader();
|
||||
|
||||
// Closure to capture the file information.
|
||||
reader.onload = function(e) {
|
||||
socket.emit('writeFile', 'sayit.' + instance, 'tts.userfiles/' + file.name, e.target.result, function () {
|
||||
if (callback) callback(file.name);
|
||||
});
|
||||
};
|
||||
|
||||
// Read in the image file as a data URL.
|
||||
reader.readAsArrayBuffer(file);
|
||||
}
|
||||
|
||||
function handleFileSelect(evt) {
|
||||
var files = evt.target.files; // FileList object
|
||||
$('#drop_indcator').hide();
|
||||
|
||||
// files is a FileList of File objects. List some properties.
|
||||
var count = 0;
|
||||
for (var i = 0, f; f = files[i]; i++) {
|
||||
if (f.size > 1024 * 1024) {
|
||||
showMessage(_('File %s is too big. Maximum 1MB', escape(f.name)));
|
||||
$('#files').val('');
|
||||
return;
|
||||
}
|
||||
if (f.name === 'say.mp3') {
|
||||
showMessage(_('Name say.mp3 is reserved'));
|
||||
$('#files').val('');
|
||||
return;
|
||||
}
|
||||
count++;
|
||||
uploadFile(f, function (name) {
|
||||
count--;
|
||||
if (!count) {
|
||||
// Read names of files for gong
|
||||
socket.emit('readDir', 'sayit.' + instance, 'tts.userfiles', function (err, dir) {
|
||||
var text = '<option value="">' + _('none') + '</option>';
|
||||
if (dir) {
|
||||
for (var i = 0; i < dir.length; i++) {
|
||||
if (dir[i].isDir) continue;
|
||||
text += '<option value="' + dir[i].file + '">' + dir[i].file + '</option>';
|
||||
}
|
||||
}
|
||||
$('#announce').html(text).val(name).trigger('change');
|
||||
$('#files').val('');
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
function handleFileSelectDrop(evt) {
|
||||
$('#drop_indcator').hide();
|
||||
evt.stopPropagation();
|
||||
evt.preventDefault();
|
||||
|
||||
var files = evt.dataTransfer.files; // FileList object.
|
||||
|
||||
// files is a FileList of File objects. List some properties.
|
||||
var output = [];
|
||||
for (var i = 0, f; f = files[i]; i++) {
|
||||
if (f.size > 1024 * 1024) {
|
||||
showMessage(_('File %s is too big. Maximum 1MB', escape(f.name)));
|
||||
return;
|
||||
}
|
||||
console.log(escape(f.name));
|
||||
}
|
||||
}
|
||||
|
||||
function handleDragOver(evt) {
|
||||
evt.stopPropagation();
|
||||
evt.preventDefault();
|
||||
evt.dataTransfer.dropEffect = 'copy'; // Explicitly show this is a copy.
|
||||
$('#drop_indcator').show();
|
||||
}
|
||||
|
||||
// the function loadSettings has to exist ...
|
||||
function load(settings, onChange) {
|
||||
if (!settings) return;
|
||||
|
||||
if (!settings.player) {
|
||||
settings.player = 'mpg321';
|
||||
}
|
||||
gOnChange = onChange;
|
||||
|
||||
var $play = $('#play');
|
||||
var $announce = $('#announce');
|
||||
|
||||
$play.button({icons: {primary: 'ui-icon-play'}, text: false}).css({width: 22, height: 22}).click(function () {
|
||||
socket.emit('readFile', 'sayit.' + instance, 'tts.userfiles/' + $('#announce').val(), function (err, data) {
|
||||
if (typeof AudioContext !== 'undefined') {
|
||||
context = new AudioContext();
|
||||
context.decodeAudioData(data, function(buffer) {
|
||||
//console.log(buffer);
|
||||
var source = context.createBufferSource(); // creates a sound source
|
||||
source.buffer = buffer; // tell the source which sound to play
|
||||
source.connect(context.destination); // connect the source to the context's destination (the speakers)
|
||||
source.start(0);
|
||||
}, function(err) {
|
||||
console.log(err);
|
||||
});
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
var $type = $('#type');
|
||||
for (name in sayitOptions) {
|
||||
if (sayitOptions.hasOwnProperty(name)) {
|
||||
$type.append('<option value="' + name + '">' + sayitOptions[name].name + '</option>');
|
||||
}
|
||||
}
|
||||
|
||||
$('#search').button({
|
||||
label: _('Browse')
|
||||
}).click(function () {
|
||||
fillGoogleHome();
|
||||
});
|
||||
|
||||
getIsAdapterAlive(function (isAlive) {
|
||||
if (isAlive || common.enabled) {
|
||||
$('#search').button('enable');
|
||||
if (settings.type === 'googleHome') {
|
||||
fillGoogleHome();
|
||||
}
|
||||
} else {
|
||||
$('#search').button('disable').title(_('Adapter must be enabled'));
|
||||
}
|
||||
});
|
||||
|
||||
var $engine = $('#engine');
|
||||
for (var name in sayitEngines) {
|
||||
if (sayitEngines.hasOwnProperty(name)) {
|
||||
$engine.append('<option value="' + name + '">' + sayitEngines[name].name + '</option>');
|
||||
}
|
||||
}
|
||||
for (var key in settings) {
|
||||
if (settings.hasOwnProperty(key)) {
|
||||
var $val = $('#' + key + '.value');
|
||||
if ($val.attr('type') === 'checkbox') {
|
||||
$val.prop('checked', settings[key]);
|
||||
} else {
|
||||
$val.val(settings[key]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$('.value').on('change', function () {
|
||||
var key = $(this).attr('id');
|
||||
|
||||
if (key === 'auth') {
|
||||
if ($('#auth').prop('checked')) {
|
||||
$('#secure').prop('checked', true);
|
||||
}
|
||||
} else
|
||||
if (key === 'type' || key === 'engine') {
|
||||
showHideSettings();
|
||||
var type = $('#type').val();
|
||||
if ((type === 'sonos') ||
|
||||
(type === 'chromecast') ||
|
||||
(type === 'mpd') ||
|
||||
(type === 'googleHome')) {
|
||||
checkWeb('#web');
|
||||
$('#announce').val('').trigger('change');
|
||||
showHideSettings();
|
||||
} else {
|
||||
showHideSettings();
|
||||
}
|
||||
} else
|
||||
if (key === 'announce') {
|
||||
showHideSettings();
|
||||
if ($(this).val()) {
|
||||
socket.emit('readFile', 'sayit.' + instance, 'tts.userfiles/' + $('#announce').val(), function (err, data) {
|
||||
if (typeof AudioContext !== 'undefined') {
|
||||
context = new AudioContext();
|
||||
context.decodeAudioData(data, function (buffer) {
|
||||
$('#annoDuration').val(Math.ceil(buffer.duration));
|
||||
}, function (err) {
|
||||
console.log(err);
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
if (key === 'web') {
|
||||
checkWeb('#web');
|
||||
}
|
||||
onChange();
|
||||
}).keyup(function() {
|
||||
$(this).trigger('change');
|
||||
});
|
||||
|
||||
if (!settings.engine) {
|
||||
settings.engine = systemLang;
|
||||
$engine.val(systemLang).trigger('change');
|
||||
}
|
||||
if (!settings.instance) {
|
||||
settings.instance = 'FFFFFFFF';
|
||||
$('#instance').val(settings.instance).trigger('change');
|
||||
}
|
||||
|
||||
fillSonosDevices('#device', settings.device);
|
||||
fillChromecastDevices('#cDevice', settings.cDevice);
|
||||
fillWebServices('#web', settings.web, settings.type, settings.webServer);
|
||||
fillMpdDevice('#mpd_device', settings.mpd_device);
|
||||
|
||||
if ((settings.type === 'sonos') ||
|
||||
(settings.type === 'chromecast') ||
|
||||
(settings.type === 'mpd') ||
|
||||
(settings.type === 'googleHome')){
|
||||
$('.announce').hide();
|
||||
if (settings.announce) {
|
||||
$announce.val('').trigger('change');
|
||||
}
|
||||
}
|
||||
// Read names of files for gong
|
||||
socket.emit('readDir', 'sayit.' + instance, 'tts.userfiles', function (err, dir) {
|
||||
var text = '<option value="">' + _('none') + '</option>';
|
||||
if (dir) {
|
||||
for (var i = 0; i < dir.length; i++) {
|
||||
if (dir[i].isDir) continue;
|
||||
text += '<option value="' + dir[i].file + '">' + dir[i].file + '</option>';
|
||||
}
|
||||
}
|
||||
$('#announce').html(text).val(settings.announce);
|
||||
showHideSettings();
|
||||
});
|
||||
|
||||
getAdapterInstances('cloud', function (list) {
|
||||
if (list) {
|
||||
var text = '';
|
||||
for (var i = 0; i < list.length; i++) {
|
||||
var id = list[i]._id.substring('system.adapter.'.length);
|
||||
text += '<option value="' + id + '" ' + (id === settings.cloud ? 'selected' : '') + '>' + id + '</option>';
|
||||
}
|
||||
if (text) $('#cloud').html(text);
|
||||
}
|
||||
});
|
||||
|
||||
$('#voice').val(settings.voice);
|
||||
var w = $engine.width();
|
||||
$announce.css({width: w});
|
||||
$type.css({width: w});
|
||||
|
||||
|
||||
document.getElementById('files').addEventListener('change', handleFileSelect, false);
|
||||
showHideSettings();
|
||||
|
||||
if (!$announce.val()) {
|
||||
$play.button('disable');
|
||||
}
|
||||
if (typeof AudioContext === 'undefined') {
|
||||
$play.hide();
|
||||
}
|
||||
|
||||
var dropZone = document.getElementById('drop_zone');
|
||||
if (dropZone) {
|
||||
dropZone.addEventListener('dragover', handleDragOver, false);
|
||||
dropZone.addEventListener('drop', handleFileSelect, false);
|
||||
/*dropZone.addEventListener('dragend', function () {
|
||||
$(this).css({background: 'white'});
|
||||
console.log('dragend');
|
||||
return false;
|
||||
}, false);
|
||||
dropZone.addEventListener('dragstart', function () {
|
||||
console.log('dragstart');
|
||||
}, false);
|
||||
dropZone.addEventListener('dragleave', function () {
|
||||
$(this).css({background: 'white'});
|
||||
}, false);
|
||||
dropZone.addEventListener('dragenter', function () {
|
||||
$(this).css({background: 'gray'});
|
||||
}, false);*/
|
||||
}
|
||||
|
||||
onChange(false);
|
||||
}
|
||||
|
||||
function save(callback) {
|
||||
var obj = {};
|
||||
$('.value').each(function () {
|
||||
var $this = $(this);
|
||||
if ($this.attr('type') === 'checkbox') {
|
||||
obj[$this.attr('id')] = $this.prop('checked');
|
||||
} else {
|
||||
obj[$this.attr('id')] = $this.val();
|
||||
}
|
||||
});
|
||||
|
||||
if (obj.engine && sayitEngines[obj.engine].engine === 'yandex') {
|
||||
if (!obj.key) {
|
||||
showMessage(_('API Key is not set!'));
|
||||
return;
|
||||
}
|
||||
} else
|
||||
if (obj.engine && sayitEngines[obj.engine].engine === 'polly') {
|
||||
if (!obj.accessKey || !obj.secretKey) {
|
||||
showMessage(_('API Key is not set!'));
|
||||
return;
|
||||
}
|
||||
if (!obj.region) {
|
||||
showMessage(_('AWS Region is not set!'));
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if (obj.type === 'googleHome') {
|
||||
obj.cache = false;
|
||||
}
|
||||
|
||||
callback(obj);
|
||||
}
|
||||
</script>
|
||||
</head>
|
||||
<body>
|
||||
<!-- you have to put your config page in a div with id adapter-container -->
|
||||
<div id="adapter-container" ondragover="return false" ondrop="return false">
|
||||
|
||||
<table><tr><td><img src="sayit.png"></td><td><h3 class="translate">sayIt adapter settings</h3></td></tr></table>
|
||||
|
||||
<div>
|
||||
<table>
|
||||
<tr><td><label class="translate" for="type">Type:</label></td><td class="admin-icon" data-link="configuration"></td><td><select class="value" id="type"></select></td></tr>
|
||||
<tr id="tr_engine" class="variable"><td style="width: 150px"><label class="translate" for="engine">Language:</label></td><td class="admin-icon" data-link="tts-engines"></td><td><select class="value" id="engine"></select></td></tr>
|
||||
<tr class="system"><td><label for="player" class="translate">Linux player:</label></td><td class="admin-icon"></td><td>
|
||||
<select class="value" id="player" >
|
||||
<option value="mpg321">mpg321</option>
|
||||
<option value="omxplayer">omxplayer</option>
|
||||
</select><span class="translate" style="padding-left: 10px; font-size: 10px">Ignore for non linux OS</span>
|
||||
</td>
|
||||
</tr>
|
||||
<tr class="system"><td><label class="translate" for="command">System command:</label></td><td class="admin-icon" data-link="system-command"></td><td><input class="value" id="command"/></td></tr>
|
||||
<tr class="announceValue"><td><label class="translate" for="announce">Announce:</label></td><td class="admin-icon"></td><td><select class="value" id="announce"></select> <button id="play"></button></td></tr>
|
||||
<tr class="announceValue"><td></td><td></td><td><input type="file" accept=".mp3,audio/*" id="files" name="files[]" multiple /></td></tr>
|
||||
<tr class="announce"><td><label class="translate" for="annoTimeout">Announce timeout (sec):</label></td><td class="admin-icon"></td><td><input class="value" id="annoTimeout" size="8" /></td></tr>
|
||||
<tr class="announce"><td><label class="translate" for="annoDuration">Announce length (sec):</label></td><td class="admin-icon"></td><td><input class="value" id="annoDuration" size="2" /></td></tr>
|
||||
<tr class="announce"><td><label class="translate" for="annoVolume">Announce volume (%):</label></td><td class="admin-icon"></td><td><input class="value" id="annoVolume" size="3" /></td></tr>
|
||||
<tr><td> </td><td></td><td> </td></tr>
|
||||
|
||||
<tr id="tr_cache" class="variable"><td><label class="translate" for="cache">Cache:</label></td><td class="admin-icon"></td> <td><input class="value" id="cache" type="checkbox" /></td></tr>
|
||||
<tr id="tr_cacheExpiryDays" class="variable"><td><label class="translate" for="tr_cacheExpiryDays">Cache-Expiry:</label></td><td class="admin-icon"></td> <td><input class="value" id="cacheExpiryDays" size="5" /></td></tr>
|
||||
<tr id="tr_server" class="variable"><td><label class="translate" for="server">Server:</label></td><td class="admin-icon"></td> <td><input class="value" id="server"/><select class="value googleHome" id="googleHome"><option value="" class="translate">none</option></select><button style="font-size: 10px; margin-left: 10px;" id="search" class="translate googleHome"></button></td></tr>
|
||||
<tr id="tr_port" class="variable"><td><label class="translate" for="port">Port:</label></td><td class="admin-icon"></td> <td><input class="value" id="port" size="5" maxlength="5"/></td></tr>
|
||||
<tr id="tr_user" class="variable"><td><label class="translate" for="user">User:</label></td><td class="admin-icon"></td> <td><input class="value" id="user" /></td></tr>
|
||||
<tr id="tr_pass" class="variable"><td><label class="translate" for="pass">Password:</label></td><td class="admin-icon"></td><td><input class="value" id="pass" /></td></tr>
|
||||
<tr id="tr_instance" class="variable"><td><label class="translate" for="instance">Browser instance:</label></td><td class="admin-icon"></td><td><input class="value" id="instance" /></td></tr>
|
||||
<tr id="tr_device" class="variable"><td><label class="translate" for="device">Device:</label></td><td class="admin-icon"></td><td><select class="value" id="device"><option value="" class="translate">All</option></select></td></tr>
|
||||
<tr id="tr_cDevice" class="variable"><td><label class="translate" for="cDevice">Device:</label></td><td class="admin-icon"></td><td><select class="value" id="cDevice"><option value="" class="translate">All</option></select></td></tr>
|
||||
<tr id="tr_mpd_device" class="variable"><td><label class="translate" for="mpd_device">Device:</label></td><td class="admin-icon"></td><td><select class="value" id="mpd_device"><option value="" class="translate">All</option></select></td></tr>
|
||||
<tr id="tr_web" class="variable"><td><label class="translate" for="web">Web instance:</label></td><td class="admin-icon"></td><td><select class="value" id="web"></select></td></tr>
|
||||
<tr id="tr_webServer" class="variable"><td><label class="translate" for="webServer">Web server IP:</label></td><td class="admin-icon"></td><td><select class="value" id="webServer"></select></td></tr>
|
||||
<tr id="tr_voice" class="engine" ><td><label class="translate" for="voice">Voice:</label></td><td class="admin-icon"></td><td><select class="value" id="voice"></select></td></tr>
|
||||
<tr id="tr_key" class="engine" ><td><label class="translate" for="key">API Key:</label></td><td class="admin-icon"></td><td><input class="value" id="key" type="text"/></td></tr>
|
||||
<tr id="tr_emotion" class="engine" ><td><label class="translate" for="emotion">Emotion:</label></td><td class="admin-icon"></td><td><select class="value" id="emotion"></select></td></tr>
|
||||
<tr id="tr_drunk" class="engine" ><td><label class="translate" for="drunk">Drunk:</label></td><td class="admin-icon"></td><td><input type="checkbox" class="value" id="drunk"/></td></tr>
|
||||
<tr id="tr_ill" class="engine" ><td><label class="translate" for="ill">Ill:</label></td><td class="admin-icon"></td><td><input type="checkbox" class="value" id="ill"/></td></tr>
|
||||
<tr id="tr_robot" class="engine" ><td><label class="translate" for="robot">Robot:</label></td><td class="admin-icon"></td><td><input type="checkbox" class="value" id="robot"/></td></tr>
|
||||
<tr id="tr_accessKey" class="engine" ><td><label class="translate" for="accessKey">Access Key:</label></td><td class="admin-icon"></td><td><input class="value" id="accessKey" type="text"/></td></tr>
|
||||
<tr id="tr_secretKey" class="engine" ><td><label class="translate" for="secretKey">Secret Key:</label></td><td class="admin-icon"></td><td><input class="value" id="secretKey" type="password"/></td></tr>
|
||||
<tr id="tr_region" class="engine" ><td><label class="translate" for="region">AWS Region:</label></td><td class="admin-icon"></td><td><input class="value" id="region" type="text"/></td></tr>
|
||||
<tr id="tr_cloud" class="engine" ><td><label class="translate" for="cloud">Cloud instance:</label></td><td class="admin-icon"></td><td><select class="value" id="cloud"><option value="" class="translate">Install first cloud adapter</option></select></td></tr>
|
||||
</table>
|
||||
</div>
|
||||
<div id="drop_zone" style="display: none" class="translate">place here</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,811 @@
|
||||
<html>
|
||||
<head>
|
||||
<!-- Materialze style -->
|
||||
<link rel="stylesheet" type="text/css" href="../../css/adapter.css"/>
|
||||
<link rel="stylesheet" type="text/css" href="../../lib/css/materialize.css">
|
||||
|
||||
<script type="text/javascript" src="../../lib/js/jquery-3.2.1.min.js"></script>
|
||||
<script type="text/javascript" src="../../socket.io/socket.io.js"></script>
|
||||
|
||||
<script type="text/javascript" src="engines.js"></script>
|
||||
<script type="text/javascript" src="../../js/translate.js"></script>
|
||||
<script type="text/javascript" src="../../lib/js/materialize.js"></script>
|
||||
<script type="text/javascript" src="../../js/adapter-settings.js"></script>
|
||||
<script type="text/javascript" src="words.js"></script>
|
||||
<style>
|
||||
#drop_zone {
|
||||
border: 2px dashed #bbb;
|
||||
-moz-border-radius: 5px;
|
||||
-webkit-border-radius: 5px;
|
||||
border-radius: 5px;
|
||||
padding: 25px;
|
||||
text-align: center;
|
||||
font-size: 20pt;
|
||||
font-weight: bold;
|
||||
font-family: 'Arial';
|
||||
color: #bbb;
|
||||
width: 90%;
|
||||
height: 60px;
|
||||
}
|
||||
|
||||
.error {
|
||||
border: 2px solid red;
|
||||
}
|
||||
</style>
|
||||
<script type="text/javascript">
|
||||
var webServers = null;
|
||||
var gOnChange;
|
||||
|
||||
function showHideSettings() {
|
||||
$('.variable').hide();
|
||||
var type = $('#type').val();
|
||||
for (var j = 0; j < sayitOptions[type].params.length; j++) {
|
||||
$('#tr_' + sayitOptions[type].params[j]).show();
|
||||
}
|
||||
|
||||
if (type === 'googleHome') {
|
||||
$('.announceValue').hide();
|
||||
$('.announce').hide();
|
||||
$('.system').hide();
|
||||
$('.googleHome').show();
|
||||
|
||||
getIsAdapterAlive(function (isAlive) {
|
||||
if (isAlive || common.enabled) {
|
||||
$('#search').removeClass('disabled');
|
||||
fillGoogleHome();
|
||||
}
|
||||
});
|
||||
} else {
|
||||
$('.googleHome').hide();
|
||||
$('.announceValue').show();
|
||||
$('.announce').show();
|
||||
}
|
||||
|
||||
$('.engine').hide();
|
||||
var engine = $('#engine').val();
|
||||
|
||||
if (!sayitEngines[engine] || sayitOptions[type].params.indexOf('engine') === -1) return;
|
||||
|
||||
for (var i = 0; i < sayitEngines[engine].params.length; i++) {
|
||||
$('#tr_' + sayitEngines[engine].params[i]).show();
|
||||
if (sayitEngines[engine][sayitEngines[engine].params[i]]) {
|
||||
var arr = sayitEngines[engine][sayitEngines[engine].params[i]];
|
||||
var param = sayitEngines[engine].params[i];
|
||||
|
||||
var $val = $('#' + param);
|
||||
if (arr.length) {
|
||||
var val = $val.val();
|
||||
var text = '';
|
||||
for (var p = 0; p < arr.length; p++) {
|
||||
text += '<option value="' + arr[p] + '">' + arr[p] + '</option>';
|
||||
}
|
||||
$val.html(text);
|
||||
if (val) {
|
||||
$val.val(val);
|
||||
} else {
|
||||
$val.val(arr[0]);
|
||||
}
|
||||
} else {
|
||||
$val.html('');
|
||||
}
|
||||
}
|
||||
}
|
||||
if (type !== 'system') {
|
||||
$('.system').hide();
|
||||
} else {
|
||||
$('.system').show();
|
||||
}
|
||||
|
||||
if (!$('#announce').val()) {
|
||||
$('.announce').hide();
|
||||
$('#play').addClass('disabled');
|
||||
} else {
|
||||
$('.announce').show();
|
||||
$('#play').removeClass('disabled');
|
||||
}
|
||||
}
|
||||
|
||||
function fillSonosDevices(elem, current) {
|
||||
socket.emit('getObjectView', 'system', 'channel', {startkey: 'sonos.', endkey: 'sonos.\u9999'}, function (err, res) {
|
||||
if (!err && res) {
|
||||
for (var i = 0; i < res.rows.length; i++) {
|
||||
$(elem).append('<option value="' + res.rows[i].id + '">' + res.rows[i].id + '</option>');
|
||||
}
|
||||
$(elem).select();
|
||||
}
|
||||
$(elem).val(current);
|
||||
});
|
||||
}
|
||||
|
||||
function fillMpdDevice(elem, current) {
|
||||
socket.emit('getObjectView', 'system', 'instance', {startkey: 'system.adapter.mpd.', endkey: 'system.adapter.mpd.\u9999'}, function (err, res) {
|
||||
if (!err && res) {
|
||||
for (var i = 0; i < res.rows.length; i++) {
|
||||
var n = res.rows[i].id.replace('system.adapter.', '');
|
||||
$(elem).append('<option value="' + n + '">' + n + '</option>');
|
||||
}
|
||||
$(elem).select();
|
||||
}
|
||||
$(elem).val(current);
|
||||
});
|
||||
}
|
||||
|
||||
function fillChromecastDevices(elem, current) {
|
||||
socket.emit('getObjectView', 'system', 'device', {startkey: 'chromecast.', endkey: 'chromecast.\u9999'}, function (err, res) {
|
||||
if (!err && res) {
|
||||
for (var i = 0; i < res.rows.length; i++) {
|
||||
$(elem).append('<option value="' + res.rows[i].id + '">' + res.rows[i].id + '</option>');
|
||||
}
|
||||
}
|
||||
$(elem).select();
|
||||
$(elem).val(current);
|
||||
});
|
||||
}
|
||||
|
||||
function fillGoogleHome() {
|
||||
$('#search').addClass('disabled');
|
||||
sendTo(null, 'browseChromecast', null, function (list) {
|
||||
var text = '<option value="">' + _('select') + '</option>';
|
||||
if (list) {
|
||||
for (var i = 0; i < list.length; i++) {
|
||||
text += '<option value="' + list[i].ip + '">' + list[i].name + '[' + list[i].ip + ']</option>';
|
||||
}
|
||||
$('#googleHome').html(text).prop('disabled', false).off('change').on('change', function () {
|
||||
$('#server').val($(this).val()).trigger('change');
|
||||
});
|
||||
} else {
|
||||
$('#googleHome').html('<option value="">' + _('error') + '</option>').prop('disabled', true);
|
||||
}
|
||||
$('#search').removeClass('disabled');
|
||||
$('#googleHome').select();
|
||||
});
|
||||
}
|
||||
|
||||
function ip2hex(ip) {
|
||||
var octets = ip.split('.');
|
||||
if (octets.length !== 4) {
|
||||
return 0;
|
||||
}
|
||||
var result = 0;
|
||||
for (var i = 0; i < octets.length; ++i) {
|
||||
var octet = parseInt(octets[i], 10);
|
||||
if (Number.isNaN(octet) || octet < 0 || octet > 255) {
|
||||
throw new Error("Each octet must be between 0 and 255");
|
||||
}
|
||||
result |= octet << ((octets.length - i) * 8);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
function checkWeb(elem, current) {
|
||||
var web = $('#web').val();
|
||||
for (var i = 0; i < webServers.length; i++) {
|
||||
if (webServers[i].id === 'system.adapter.' + web) {
|
||||
if (webServers[i].value.native.auth) {
|
||||
showMessage(_('Cannot use web server with authentication'), null, 'info');
|
||||
}
|
||||
if (webServers[i].value.native.bind === 'localhost' || webServers[i].value.native.bind === '127.0.0.1' || webServers[i].value.native.bind === '::1') {
|
||||
showMessage(_('Cannot use web server only on localhost'), null, 'info');
|
||||
}
|
||||
|
||||
if (webServers[i].value.native.bind === '0.0.0.0') {
|
||||
$('#tr_webServer').show();
|
||||
var $webServer = $('#webServer');
|
||||
$webServer.html('');
|
||||
// read all ipv4 addresses of host
|
||||
socket.emit('getObject', 'system.host.' + webServers[i].value.common.host, function (err, obj) {
|
||||
var text = '';
|
||||
if (!err && obj && obj.native) {
|
||||
for (var iface in obj.native.hardware.networkInterfaces) {
|
||||
if (obj.native.hardware.networkInterfaces.hasOwnProperty(iface)) {
|
||||
for (var i = 0; i < obj.native.hardware.networkInterfaces[iface].length; i++) {
|
||||
if (obj.native.hardware.networkInterfaces[iface][i].family === 'IPv4' && !obj.native.hardware.networkInterfaces[iface][i].internal) {
|
||||
text += '<option value="' + obj.native.hardware.networkInterfaces[iface][i].address + '" data-mask="' + obj.native.hardware.networkInterfaces[iface][i].netmask + '">[IPv4] ' + obj.native.hardware.networkInterfaces[iface][i].address + ' - ' + iface + '</option>';
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
$webServer.html(text);
|
||||
if (current) {
|
||||
$webServer.val(current);
|
||||
}
|
||||
$webServer.select();
|
||||
|
||||
$webServer.off('change').on('change', function () {
|
||||
gOnChange();
|
||||
var ip = $(this).val();
|
||||
var netmask = $(this).find('option[value="' + ip + '"]').data('mask');
|
||||
var server;
|
||||
var type = $('#type').val();
|
||||
if (type === 'googleHome') {
|
||||
server = $('#server').val();
|
||||
} else if (type === 'sonos') {
|
||||
server = $('#device').val().split('.')[3].replace('_', '.').replace('_', '.').replace('_', '.');
|
||||
} else if (type === 'chromecast') {
|
||||
server = $('#cDevice').val();
|
||||
} else if (type === 'mpd') {
|
||||
server = $('#mpd_device').val();
|
||||
}
|
||||
if (server && ip && netmask && server.indexOf(':') === -1 && ip.indexOf(':') === -1) {
|
||||
ip = ip2hex(ip);
|
||||
netmask = ip2hex(netmask);
|
||||
server = ip2hex(server);
|
||||
if ((ip & netmask) !== (server & netmask)) {
|
||||
$webServer.addClass('error').attr('title', _('IP not accessible for server'));
|
||||
} else {
|
||||
$webServer.removeClass('error').attr('title', '');
|
||||
}
|
||||
} else {
|
||||
$webServer.removeClass('error');
|
||||
}
|
||||
});
|
||||
});
|
||||
} else if (webServers[i].value.native.bind === '::') {
|
||||
// read all ipv6 addresses of host
|
||||
socket.emit('getObject', 'system.host.' + webServers[i].value.common.host, function (err, obj) {
|
||||
if (!err && obj && obj.native) {
|
||||
for (var iface in obj.native.hardware.networkInterfaces) {
|
||||
if (obj.native.hardware.networkInterfaces.hasOwnProperty(iface)) {
|
||||
for (var i = 0; i < obj.native.hardware.networkInterfaces[iface].length; i++) {
|
||||
if (obj.native.hardware.networkInterfaces[iface][i].family === 'IPv6' && !obj.native.hardware.networkInterfaces[iface][i].internal) {
|
||||
$('#webServer').append('<option value="' + obj.native.hardware.networkInterfaces[iface][i].address + '">[IPv6] ' + obj.native.hardware.networkInterfaces[iface][i].address + ' - ' + iface + '</option>');
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (current) {
|
||||
$('#webServer').val(current);
|
||||
}
|
||||
});
|
||||
$('#webServer').select();
|
||||
} else {
|
||||
$('#tr_webServer').hide();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
function fillWebServices(elem, current, type, webServer) {
|
||||
socket.emit('getObjectView', 'system', 'instance', {startkey: 'system.adapter.web.', endkey: 'system.adapter.web.\u9999'}, function (err, res) {
|
||||
if (!err && res) {
|
||||
webServers = res.rows;
|
||||
for (var i = 0; i < res.rows.length; i++) {
|
||||
var n = res.rows[i].id.replace('system.adapter.', '');
|
||||
var auth = res.rows[i].value.native.auth ? 'data-auth="true"' : '';
|
||||
$(elem).append('<option value="' + n + '" ' + auth + '>' + n + '</option>');
|
||||
}
|
||||
}
|
||||
$(elem).val(current);
|
||||
if ((type === 'sonos') ||
|
||||
(type === 'chromecast') ||
|
||||
(type === 'googleHome')) {
|
||||
checkWeb('#web', webServer);
|
||||
}
|
||||
|
||||
$(elem).select();
|
||||
});
|
||||
}
|
||||
|
||||
function uploadFile(file, callback) {
|
||||
var reader = new FileReader();
|
||||
|
||||
// Closure to capture the file information.
|
||||
reader.onload = function(e) {
|
||||
socket.emit('writeFile', 'sayit.' + instance, 'tts.userfiles/' + file.name, e.target.result, function () {
|
||||
if (callback) callback(file.name);
|
||||
});
|
||||
};
|
||||
|
||||
// Read in the image file as a data URL.
|
||||
reader.readAsArrayBuffer(file);
|
||||
}
|
||||
|
||||
function handleFileSelect(evt) {
|
||||
var files = evt.target.files; // FileList object
|
||||
$('#drop_indcator').hide();
|
||||
|
||||
// files is a FileList of File objects. List some properties.
|
||||
var count = 0;
|
||||
for (var i = 0, f; f = files[i]; i++) {
|
||||
if (f.size > 1024 * 1024) {
|
||||
showMessage(_('File %s is too big. Maximum 1MB', escape(f.name)));
|
||||
$('#files').val('');
|
||||
return;
|
||||
}
|
||||
if (f.name === 'say.mp3') {
|
||||
showMessage(_('Name say.mp3 is reserved'));
|
||||
$('#files').val('');
|
||||
return;
|
||||
}
|
||||
count++;
|
||||
uploadFile(f, function (name) {
|
||||
count--;
|
||||
if (!count) {
|
||||
// Read names of files for gong
|
||||
socket.emit('readDir', 'sayit.' + instance, 'tts.userfiles', function (err, dir) {
|
||||
var text = '<option value="">' + _('none') + '</option>';
|
||||
if (dir) {
|
||||
for (var i = 0; i < dir.length; i++) {
|
||||
if (dir[i].isDir) continue;
|
||||
text += '<option value="' + dir[i].file + '">' + dir[i].file + '</option>';
|
||||
}
|
||||
}
|
||||
$('#announce').html(text).val(name).trigger('change');
|
||||
$('#announce').select();
|
||||
$('#files').val('');
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
function handleFileSelectDrop(evt) {
|
||||
$('#drop_indcator').hide();
|
||||
evt.stopPropagation();
|
||||
evt.preventDefault();
|
||||
|
||||
var files = evt.dataTransfer.files; // FileList object.
|
||||
|
||||
// files is a FileList of File objects. List some properties.
|
||||
var output = [];
|
||||
for (var i = 0, f; f = files[i]; i++) {
|
||||
if (f.size > 1024 * 1024) {
|
||||
showMessage(_('File %s is too big. Maximum 1MB', escape(f.name)));
|
||||
return;
|
||||
}
|
||||
console.log(escape(f.name));
|
||||
}
|
||||
}
|
||||
|
||||
function handleDragOver(evt) {
|
||||
evt.stopPropagation();
|
||||
evt.preventDefault();
|
||||
evt.dataTransfer.dropEffect = 'copy'; // Explicitly show this is a copy.
|
||||
$('#drop_indcator').show();
|
||||
}
|
||||
|
||||
// the function loadSettings has to exist ...
|
||||
function load(settings, onChange) {
|
||||
if (!settings) return;
|
||||
|
||||
if (!settings.player) {
|
||||
settings.player = 'mpg321';
|
||||
}
|
||||
gOnChange = onChange;
|
||||
|
||||
$('#play').on('click', function () {
|
||||
socket.emit('readFile', 'sayit.' + instance, 'tts.userfiles/' + $('#announce').val(), function (err, data) {
|
||||
if (typeof AudioContext !== 'undefined') {
|
||||
context = new AudioContext();
|
||||
context.decodeAudioData(data, function(buffer) {
|
||||
//console.log(buffer);
|
||||
var source = context.createBufferSource(); // creates a sound source
|
||||
source.buffer = buffer; // tell the source which sound to play
|
||||
source.connect(context.destination); // connect the source to the context's destination (the speakers)
|
||||
source.start(0);
|
||||
}, function(err) {
|
||||
console.log(err);
|
||||
});
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
var $t = $('#type');
|
||||
for (name in sayitOptions) {
|
||||
if (sayitOptions.hasOwnProperty(name)) {
|
||||
$t.append('<option value="' + name + '">' + sayitOptions[name].name + '</option>');
|
||||
}
|
||||
}
|
||||
|
||||
$('#search').on('click', function () {
|
||||
fillGoogleHome();
|
||||
});
|
||||
|
||||
getIsAdapterAlive(function (isAlive) {
|
||||
if (isAlive || common.enabled) {
|
||||
$('#search').removeClass('disabled');
|
||||
if (settings.type === 'googleHome') {
|
||||
fillGoogleHome();
|
||||
}
|
||||
} else {
|
||||
$('#search').addClass('disabled').attr('title', _('Adapter must be enabled'));
|
||||
}
|
||||
});
|
||||
|
||||
var $e = $('#engine');
|
||||
for (var name in sayitEngines) {
|
||||
if (sayitEngines.hasOwnProperty(name)) {
|
||||
$e.append('<option value="' + name + '">' + sayitEngines[name].name + '</option>');
|
||||
}
|
||||
}
|
||||
for (var key in settings) {
|
||||
if (settings.hasOwnProperty(key)) {
|
||||
var $val = $('#' + key + '.value');
|
||||
if ($val.attr('type') === 'checkbox') {
|
||||
$val.prop('checked', settings[key]);
|
||||
} else {
|
||||
$val.val(settings[key]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$('.value').on('change', function () {
|
||||
var key = $(this).attr('id');
|
||||
|
||||
if (key === 'auth') {
|
||||
if ($('#auth').prop('checked')) {
|
||||
$('#secure').prop('checked', true);
|
||||
}
|
||||
} else
|
||||
if (key === 'type' || key === 'engine') {
|
||||
showHideSettings();
|
||||
var type = $('#type').val();
|
||||
if ((type === 'sonos') ||
|
||||
(type === 'chromecast') ||
|
||||
(type === 'mpd') ||
|
||||
(type === 'googleHome')) {
|
||||
checkWeb('#web');
|
||||
$('#announce').val('').trigger('change');
|
||||
showHideSettings();
|
||||
} else {
|
||||
showHideSettings();
|
||||
}
|
||||
} else
|
||||
if (key === 'announce') {
|
||||
showHideSettings();
|
||||
if ($(this).val()) {
|
||||
socket.emit('readFile', 'sayit.' + instance, 'tts.userfiles/' + $('#announce').val(), function (err, data) {
|
||||
if (typeof AudioContext !== 'undefined') {
|
||||
context = new AudioContext();
|
||||
context.decodeAudioData(data, function (buffer) {
|
||||
$('#annoDuration').val(Math.ceil(buffer.duration));
|
||||
}, function (err) {
|
||||
console.log(err);
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
if (key === 'web') {
|
||||
checkWeb('#web');
|
||||
}
|
||||
onChange();
|
||||
}).keyup(function() {
|
||||
$(this).trigger('change');
|
||||
});
|
||||
|
||||
if (!settings.engine) {
|
||||
settings.engine = systemLang;
|
||||
$('#engine').val(systemLang).trigger('change');
|
||||
}
|
||||
if (!settings.instance) {
|
||||
settings.instance = 'FFFFFFFF';
|
||||
$('#instance').val(settings.instance).trigger('change');
|
||||
}
|
||||
|
||||
fillSonosDevices('#device', settings.device);
|
||||
fillChromecastDevices('#cDevice', settings.cDevice);
|
||||
fillWebServices('#web', settings.web, settings.type, settings.webServer);
|
||||
fillMpdDevice('#mpd_device', settings.mpd_device);
|
||||
|
||||
if ((settings.type === 'sonos') ||
|
||||
(settings.type === 'chromecast') ||
|
||||
(settings.type === 'mpd') ||
|
||||
(settings.type === 'googleHome')){
|
||||
$('.announce').hide();
|
||||
if (settings.announce) {
|
||||
$('#announce').val('').trigger('change');
|
||||
}
|
||||
}
|
||||
// Read names of files for gong
|
||||
socket.emit('readDir', 'sayit.' + instance, 'tts.userfiles', function (err, dir) {
|
||||
var text = '<option value="">' + _('none') + '</option>';
|
||||
if (dir) {
|
||||
for (var i = 0; i < dir.length; i++) {
|
||||
if (dir[i].isDir) continue;
|
||||
text += '<option value="' + dir[i].file + '">' + dir[i].file + '</option>';
|
||||
}
|
||||
}
|
||||
$('#announce').html(text).val(settings.announce);
|
||||
showHideSettings();
|
||||
});
|
||||
|
||||
getAdapterInstances('cloud', function (list) {
|
||||
if (list) {
|
||||
var text = '';
|
||||
for (var i = 0; i < list.length; i++) {
|
||||
var id = list[i]._id.substring('system.adapter.'.length);
|
||||
text += '<option value="' + id + '" ' + (id === settings.cloud ? 'selected' : '') + '>' + id + '</option>';
|
||||
}
|
||||
if (text) $('#cloud').html(text);
|
||||
}
|
||||
});
|
||||
|
||||
$('#voice').val(settings.voice);
|
||||
var w = $('#engine').width();
|
||||
$('#announce').css({width: w});
|
||||
$('#type').css({width: w});
|
||||
|
||||
|
||||
document.getElementById('files').addEventListener('change', handleFileSelect, false);
|
||||
showHideSettings();
|
||||
|
||||
if (!$('#announce').val()) $('#play').addClass('disabled');
|
||||
if (typeof AudioContext === 'undefined') $('#play').hide();
|
||||
|
||||
var dropZone = document.getElementById('drop_zone');
|
||||
if (dropZone) {
|
||||
dropZone.addEventListener('dragover', handleDragOver, false);
|
||||
dropZone.addEventListener('drop', handleFileSelect, false);
|
||||
/*dropZone.addEventListener('dragend', function () {
|
||||
$(this).css({background: 'white'});
|
||||
console.log('dragend');
|
||||
return false;
|
||||
}, false);
|
||||
dropZone.addEventListener('dragstart', function () {
|
||||
console.log('dragstart');
|
||||
}, false);
|
||||
dropZone.addEventListener('dragleave', function () {
|
||||
$(this).css({background: 'white'});
|
||||
}, false);
|
||||
dropZone.addEventListener('dragenter', function () {
|
||||
$(this).css({background: 'gray'});
|
||||
}, false);*/
|
||||
}
|
||||
|
||||
onChange(false);
|
||||
}
|
||||
|
||||
function save(callback) {
|
||||
var obj = {};
|
||||
$('.value').each(function () {
|
||||
var $this = $(this);
|
||||
if ($this.attr('type') === 'checkbox') {
|
||||
obj[$this.attr('id')] = $this.prop('checked');
|
||||
} else {
|
||||
obj[$this.attr('id')] = $this.val();
|
||||
}
|
||||
});
|
||||
|
||||
if (obj.engine && sayitEngines[obj.engine].engine === 'yandex') {
|
||||
if (!obj.key) {
|
||||
showMessage(_('API Key is not set!'));
|
||||
return;
|
||||
}
|
||||
} else
|
||||
if (obj.engine && sayitEngines[obj.engine].engine === 'polly') {
|
||||
if (!obj.accessKey || !obj.secretKey) {
|
||||
showMessage(_('API Key is not set!'));
|
||||
return;
|
||||
}
|
||||
if (!obj.region) {
|
||||
showMessage(_('AWS Region is not set!'));
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if (obj.type === 'googleHome') {
|
||||
obj.cache = false;
|
||||
}
|
||||
|
||||
callback(obj);
|
||||
}
|
||||
</script>
|
||||
</head>
|
||||
<body>
|
||||
<div class="m adapter-container" ondragover="return false" ondrop="return false">
|
||||
<div class="row">
|
||||
<div class="col s12">
|
||||
<div class="row">
|
||||
<div class="col s6">
|
||||
<img src="sayit.png" class="logo">
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="input-field col s6 m4">
|
||||
<select class="value" id="type"></select>
|
||||
<label class="translate" for="type">Type:</label>
|
||||
</div>
|
||||
<div class="input-field col s6 m4" id="tr_engine" >
|
||||
<select class="value" id="engine"></select>
|
||||
<label class="translate" for="engine">Language:</label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row system">
|
||||
<div class="input-field col s6 m4">
|
||||
<select class="value" id="player" >
|
||||
<option value="mpg321">mpg321</option>
|
||||
<option value="omxplayer">omxplayer</option>
|
||||
</select>
|
||||
<label for="player"><span class="translate">Linux player:</span><span class="translate" style="padding-left: 10px; font-size: 10px">Ignore for non linux OS</span></label>
|
||||
</div>
|
||||
<div class="input-field col s6 m4 l2">
|
||||
<input class="value" id="command"/>
|
||||
<label class="translate" for="command">System command:</label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row announceValue">
|
||||
<div class="input-field col s6 m4">
|
||||
<select class="value" id="announce"></select>
|
||||
<label class="translate" for="announce">Announce:</label>
|
||||
<a class="waves-effect waves-light btn translate" id="play">play</a>
|
||||
</div>
|
||||
<div class="file-field input-field col s6 m4">
|
||||
<div class="btn">
|
||||
<span class="translate">File</span>
|
||||
<input type="file" accept=".mp3,audio/*" id="files" name="files[]" multiple />
|
||||
</div>
|
||||
<div class="file-path-wrapper">
|
||||
<input class="file-path validate" type="text">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row announce">
|
||||
<div class="input-field col s4 m4 l2">
|
||||
<input class="value" id="annoTimeout" type="number" min="0" max="1000" />
|
||||
<label class="translate" for="annoTimeout">Announce timeout (sec):</label>
|
||||
</div>
|
||||
<div class="input-field col s4 m4 l2">
|
||||
<input class="value" id="annoDuration" type="number" min="0" max="99"/>
|
||||
<label class="translate" for="annoDuration">Announce length (sec):</label>
|
||||
</div>
|
||||
<div class="input-field col s4 m4 l2">
|
||||
<input class="value" id="annoVolume" type="number" min="0" max="100"/>
|
||||
<label class="translate" for="annoVolume">Announce volume (%):</label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
|
||||
</div>
|
||||
|
||||
<div class="row variable">
|
||||
<div class="input-field col s6 m4" id="tr_cache">
|
||||
<input class="value" id="cache" type="checkbox" />
|
||||
<label class="translate" for="cache">Cache:</label>
|
||||
</div>
|
||||
<div class="input-field col s6 m4" id="tr_cacheExpiryDays" >
|
||||
<input class="value" id="cacheExpiryDays" size="5" />
|
||||
<label class="translate" for="tr_cacheExpiryDays">Cache-Expiry:</label>
|
||||
</div>
|
||||
</div>
|
||||
<div id="tr_server" class="row variable">
|
||||
<div class="input-field col s6 m4 l2">
|
||||
<input class="value" id="server"/>
|
||||
<label class="translate" for="server">Server:</label>
|
||||
<select class="value googleHome" id="googleHome">
|
||||
<option value="" class="translate">none</option>
|
||||
</select>
|
||||
<a class="waves-effect waves-light btn translate googleHome" style="font-size: 10px; margin-left: 10px;" id="search">Browse</a>
|
||||
</div>
|
||||
</div>
|
||||
<div id="tr_port" class="row variable">
|
||||
<div class="input-field col s6 m4 l2">
|
||||
<input class="value" id="port" size="5" maxlength="5"/>
|
||||
<label class="translate" for="port">Port:</label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row variable">
|
||||
<div id="tr_user" class="input-field col s6 m4 l2">
|
||||
<input class="value" id="user" />
|
||||
<label class="translate" for="user">User:</label>
|
||||
</div>
|
||||
<div id="tr_pass"class="input-field col s6 m4 l2">
|
||||
<input class="value" id="pass" />
|
||||
<label class="translate" for="pass">Password:</label>
|
||||
</div>
|
||||
</div>
|
||||
<div id="tr_instance" class="row variable">
|
||||
<div class="input-field col s6 m4 l2">
|
||||
<label class="translate" for="instance">Browser instance:</label>
|
||||
<input class="value" id="instance" />
|
||||
</div>
|
||||
</div>
|
||||
<div id="tr_device" class="row variable">
|
||||
<div class="input-field col s6 m4 l2">
|
||||
<select class="value" id="device">
|
||||
<option value="" class="translate">All</option>
|
||||
</select>
|
||||
<label class="translate" for="device">Device:</label>
|
||||
</div>
|
||||
</div>
|
||||
<div id="tr_cDevice" class="row variable">
|
||||
<div class="input-field col s6 m4 l2">
|
||||
<select class="value" id="cDevice">
|
||||
<option value="" class="translate">All</option>
|
||||
</select>
|
||||
<label class="translate" for="cDevice">Device:</label>
|
||||
</div>
|
||||
</div>
|
||||
<div id="tr_mpd_device" class="row variable">
|
||||
<div class="input-field col s6 m4 l2">
|
||||
<select class="value" id="mpd_device">
|
||||
<option value="" class="translate">All</option>
|
||||
</select>
|
||||
<label class="translate" for="mpd_device">Device:</label>
|
||||
</div>
|
||||
</div>
|
||||
<div id="tr_web" class="row variable">
|
||||
<div class="input-field col s6 m4 l2">
|
||||
<select class="value" id="web"></select>
|
||||
<label class="translate" for="web">Web instance:</label>
|
||||
</div>
|
||||
</div>
|
||||
<div id="tr_webServer" class="row variable">
|
||||
<div class="input-field col s6 m4 l2">
|
||||
<select class="value" id="webServer"></select>
|
||||
<label class="translate" for="webServer">Web server IP:</label>
|
||||
</div>
|
||||
</div>
|
||||
<div id="tr_voice" class="row engine" >
|
||||
<div class="input-field col s6 m4 l2">
|
||||
<select class="value" id="voice"></select>
|
||||
<label class="translate" for="voice">Voice:</label>
|
||||
</div>
|
||||
</div>
|
||||
<div id="tr_key" class="row engine" >
|
||||
<div class="input-field col s6 m4 l2">
|
||||
<input class="value" id="key" type="text"/>
|
||||
<label class="translate" for="key">API Key:</label>
|
||||
</div>
|
||||
</div>
|
||||
<div id="tr_emotion" class="row engine" >
|
||||
<div class="input-field col s6 m4 l2">
|
||||
<select class="value" id="emotion"></select>
|
||||
<label class="translate" for="emotion">Emotion:</label>
|
||||
</div>
|
||||
</div>
|
||||
<div id="tr_drunk" class="row engine" >
|
||||
<div class="input-field col s6 m4 l2">
|
||||
<input type="checkbox" class="value" id="drunk"/>
|
||||
<label class="translate" for="drunk">Drunk:</label>
|
||||
</div>
|
||||
</div>
|
||||
<div id="tr_ill" class="row engine" >
|
||||
<div class="input-field col s6 m4 l2">
|
||||
<input type="checkbox" class="value" id="ill"/>
|
||||
<label class="translate" for="ill">Ill:</label>
|
||||
</div>
|
||||
</div>
|
||||
<div id="tr_robot" class="row engine" >
|
||||
<div class="input-field col s6 m4 l2">
|
||||
<input type="checkbox" class="value" id="robot"/>
|
||||
<label class="translate" for="robot">Robot:</label>
|
||||
</div>
|
||||
</div>
|
||||
<div id="tr_accessKey" class="row engine" >
|
||||
<div class="input-field col s6 m4 l2">
|
||||
<label class="translate" for="accessKey">Access Key:</label>
|
||||
<input class="value" id="accessKey" type="text"/>
|
||||
</div>
|
||||
</div>
|
||||
<div id="tr_secretKey" class="row engine" >
|
||||
<div class="input-field col s6 m4 l2">
|
||||
<label class="translate" for="secretKey">Secret Key:</label>
|
||||
<input class="value" id="secretKey" type="password"/>
|
||||
</div>
|
||||
</div>
|
||||
<div id="tr_region" class="row engine" >
|
||||
<div class="input-field col s6 m4 l2">
|
||||
<input class="value" id="region" type="text"/>
|
||||
<label class="translate" for="region">AWS Region:</label>
|
||||
</div>
|
||||
</div>
|
||||
<div id="tr_cloud" class="row engine" >
|
||||
<div class="input-field col s6 m4 l2">
|
||||
<select class="value" id="cloud">
|
||||
<option value="" class="translate">Install first cloud adapter</option>
|
||||
</select>
|
||||
<label class="translate" for="cloud">Cloud instance:</label>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="drop_zone" style="display: none" class="translate">place here</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 26 KiB |
@@ -0,0 +1,50 @@
|
||||
// DO NOT EDIT THIS FILE!!! IT WILL BE AUTOMATICALLY GENERATED FROM src/i18n
|
||||
/*global systemDictionary:true */
|
||||
'use strict';
|
||||
|
||||
systemDictionary = {
|
||||
"sayIt adapter settings": { "en": "sayIt adapter settings", "de": "sayIt Einstellungen", "ru": "sayIt Настройки", "pt": "configurações do adaptador sayIt", "nl": "sayIt adapter-instellingen", "fr": "sayIt paramètres de l'adaptateur", "it": "impostazioni dell'adattatore sayIt", "es": "sayIt configuración del adaptador", "pl": "sayTo ustawienia adaptera"},
|
||||
"Language:": { "en": "Language", "de": "Sprache", "ru": "Язык", "pt": "Língua", "nl": "Taal", "fr": "La langue", "it": "linguaggio", "es": "Idioma", "pl": "Język"},
|
||||
"Type:": { "en": "Output in", "de": "Ausgabe durch", "ru": "Вывод звука", "pt": "Saída em", "nl": "Uitgang in", "fr": "Sortie dans", "it": "Uscita in", "es": "Salida en", "pl": "Wyjście w"},
|
||||
"Cache:": { "en": "Cache received audio files", "de": "Cache benutzen", "ru": "Кэшировать полученные аудио-файлы", "pt": "Cache recebido arquivos de áudio", "nl": "Cache ontvangen audiobestanden", "fr": "Cache les fichiers audio reçus", "it": "La cache ha ricevuto file audio", "es": "Caché recibió archivos de audio", "pl": "Pamięć podręczna otrzymała pliki audio"},
|
||||
"Server:": { "en": "Server", "de": "Server", "ru": "Сервер", "pt": "Servidor", "nl": "Server", "fr": "Serveur", "it": "server", "es": "Servidor", "pl": "serwer"},
|
||||
"Port:": { "en": "Port", "de": "Port", "ru": "Порт", "pt": "Porta", "nl": "Haven", "fr": "Port", "it": "Porta", "es": "Puerto", "pl": "Port"},
|
||||
"User:": { "en": "User", "de": "Anwender", "ru": "Пользователь", "pt": "Do utilizador", "nl": "Gebruiker", "fr": "Utilisateur", "it": "Utente", "es": "Usuario", "pl": "Użytkownik"},
|
||||
"Password:": { "en": "Password", "de": "Kennwort", "ru": "Пароль", "pt": "Senha", "nl": "Wachtwoord", "fr": "Mot de passe", "it": "Parola d'ordine", "es": "Contraseña", "pl": "Hasło"},
|
||||
"Browser instance:": { "en": "Browser instance", "de": "Browser-Instanz", "ru": "ID броузера", "pt": "Instância do navegador", "nl": "Browserinstantie", "fr": "Instance du navigateur", "it": "Istanza del browser", "es": "Instancia del navegador", "pl": "Browser instance"},
|
||||
"Device:": { "en": "Device", "de": "Gerät", "ru": "Устройство", "pt": "Dispositivo", "nl": "Apparaat", "fr": "Dispositif", "it": "Dispositivo", "es": "Dispositivo", "pl": "Urządzenie"},
|
||||
"Web server IP:": { "en": "Web server IP", "de": "Web server IP", "ru": "IP Веб сервера", "pt": "IP do servidor da Web", "nl": "Webserver IP", "fr": "Adresse IP du serveur Web", "it": "IP del server Web", "es": "Servidor web IP", "pl": "Adres IP serwera WWW"},
|
||||
"All": { "en": "All", "de": "Alle", "ru": "Все", "pt": "Todos", "nl": "Alle", "fr": "Tout", "it": "Tutti", "es": "Todas", "pl": "Wszystko"},
|
||||
"Web instance:": { "en": "Web instance", "de": "Web instance", "ru": "Web instance", "pt": "Instância da Web", "nl": "Web-instantie", "fr": "Instance Web", "it": "Istanza Web", "es": "Instancia web", "pl": "Instancja internetowa"},
|
||||
"Voice:": { "en": "Voice", "de": "Stimme", "ru": "Голос", "pt": "Voz", "nl": "Stem", "fr": "Voix", "it": "Voce", "es": "Voz", "pl": "Głos"},
|
||||
"API Key:": { "en": "API Key", "de": "API Key", "ru": "API Key", "pt": "Chave API", "nl": "API sleutel", "fr": "clé API", "it": "Chiave API", "es": "Clave API", "pl": "Klucz API"},
|
||||
"Emotion:": { "en": "Emotion", "de": "Emotion", "ru": "Емоциональный окрас", "pt": "Emoção", "nl": "Emotie", "fr": "Émotion", "it": "Emozione", "es": "Emoción", "pl": "Emocja"},
|
||||
"Drunk:": { "en": "Drunk", "de": "Betrunken", "ru": "Пьяный голос", "pt": "Bêbado", "nl": "Dronken", "fr": "Ivre", "it": "Ubriaco", "es": "Borracho", "pl": "Pijany"},
|
||||
"Ill:": { "en": "Ill", "de": "Krank", "ru": "Больной голос", "pt": "Eu vou", "nl": "Ziek", "fr": "Mauvais", "it": "Malato", "es": "Enfermo", "pl": "Chory"},
|
||||
"Robot:": { "en": "Robot", "de": "Roboter", "ru": "Голос робота", "pt": "Robô", "nl": "Robot", "fr": "Robot", "it": "Robot", "es": "Robot", "pl": "Robot"},
|
||||
"Announce:": { "en": "Announce", "de": "Ankündigung", "ru": "Извещение", "pt": "Anunciar", "nl": "aankondigen", "fr": "Annoncer", "it": "Annunciare", "es": "Anunciar", "pl": "Ogłosić"},
|
||||
"place here": { "en": "Place files here", "de": "Dateien hier ablegen", "ru": "Перетащите файлы сюда", "pt": "Coloque arquivos aqui", "nl": "Plaats hier bestanden", "fr": "Placez les fichiers ici", "it": "Inserisci i file qui", "es": "Coloque los archivos aquí", "pl": "Umieść pliki tutaj"},
|
||||
"Announce timeout (sec):": { "en": "Announce timeout (sec)", "de": "Ankündigungstimeout (Sek)", "ru": "Таймаут извещения (сек)", "pt": "Anular o tempo limite (seg)", "nl": "Announce time-out (sec)", "fr": "Annoncer le délai (sec)", "it": "Annuncia timeout (sec)", "es": "Anunciar tiempo de espera (sec)", "pl": "Ogłaszaj limit czasu (sek)"},
|
||||
"Announce length (sec):": { "en": "Announce length (sec)", "de": "Ankündigunglänge (Sek)", "ru": "Длительность извещения (сек)", "pt": "Anunciar o comprimento (seg)", "nl": "Kondig lengte (sec)", "fr": "Annoncer la longueur (sec)", "it": "Annunciare la lunghezza (sec)", "es": "Anunciar longitud (sec)", "pl": "Ogłaszaj długość (s)"},
|
||||
"API Key is not set!": { "en": "API Key is not set!", "de": "API Key ist leer!", "ru": "API Key отсутствует!", "pt": "A chave da API não está definida!", "nl": "API-sleutel is niet ingesteld!", "fr": "La clé de l'API n'est pas définie!", "it": "Chiave API non impostata!", "es": "¡La clave API no está configurada!", "pl": "Klucz API nie jest ustawiony!"},
|
||||
"System command:": { "en": "System command", "de": "Systemkommando", "ru": "Системный вызов", "pt": "Comando do sistema", "nl": "Systeemopdracht", "fr": "Commande système", "it": "Comando di sistema", "es": "Comando del sistema", "pl": "Polecenie systemowe"},
|
||||
"Announce volume (%):": { "en": "Announce volume(%)", "de": "Ankündigungslautstärke(%)", "ru": "Громкость извещения(%)", "pt": "Anunciar volume (%)", "nl": "Volume aankondigen (%)", "fr": "Annoncer le volume (%)", "it": "Annuncia volume (%)", "es": "Anunciar volumen (%)", "pl": "Ogłaszaj objętość (%)"},
|
||||
"Linux player:": { "en": "Linux player", "de": "Linux-Player", "ru": "Linux плейер", "pt": "Jogador Linux", "nl": "Linux-speler", "fr": "Lecteur Linux", "it": "Lettore Linux", "es": "Reproductor de Linux", "pl": "Odtwarzacz Linux"},
|
||||
"Ignore for non linux OS": { "en": "Ignore for non linux OS", "de": "Ignorieren für nicht linux OS", "ru": "Игнорировать для не linux OS", "pt": "Ignorar para SO não linux", "nl": "Negeren voor niet-Linux OS", "fr": "Ignorer pour les systèmes d'exploitation autres que Linux", "it": "Ignora per sistema operativo non Linux", "es": "Ignorar para el sistema operativo no Linux", "pl": "Zignoruj dla systemu operacyjnego non linux"},
|
||||
"Access Key:": { "en": "Access Key", "de": "Access Key", "ru": "Access Key", "pt": "Chave de acesso", "nl": "Toegangssleutel", "fr": "Clef d'accès", "it": "Chiave di accesso", "es": "Llave de acceso", "pl": "Klucz dostępu"},
|
||||
"Secret Key:": { "en": "Secret Key", "de": "Secret Key", "ru": "Secret Key", "pt": "Chave secreta", "nl": "Geheime sleutel", "fr": "Clef secrète", "it": "Chiave segreta", "es": "Llave secreta", "pl": "Sekretny klucz"},
|
||||
"AWS Region:": { "en": "AWS Region", "de": "AWS Region", "ru": "AWS регион", "pt": "Região da AWS", "nl": "AWS-regio", "fr": "Région AWS", "it": "Regione AWS", "es": "Región de AWS", "pl": "Region AWS"},
|
||||
"Cloud instance:": { "en": "Cloud instance", "de": "Cloud-Instanz", "ru": "Cloud драйвер", "pt": "Instância de nuvem", "nl": "Cloud instantie", "fr": "Instance de cloud", "it": "Istanza Cloud", "es": "Instancia de la nube", "pl": "Instancja chmury"},
|
||||
"Cache-Expiry:": { "en": "Cache-Expiry", "de": "Cache-Ablauf", "ru": "Срок хранения кэш", "pt": "Cache-Expiração", "nl": "Cache-Vervaldatum", "fr": "Cache-Expiration", "it": "Cache-scadenza", "es": "Caché-expiración", "pl": "Cache-Expiry"},
|
||||
"Browse": { "en": "Browse", "de": "Suchen", "ru": "Искать", "pt": "Squeaky toy", "nl": "Blader", "fr": "Feuilleter", "it": "Navigare", "es": "Vistazo", "pl": "Paść się"},
|
||||
"select": { "en": "select", "de": "auswählen", "ru": "выбрать", "pt": "selecione", "nl": "kiezen", "fr": "sélectionner", "it": "selezionare", "es": "seleccionar", "pl": "Wybierz"},
|
||||
"error": { "en": "error", "de": "Fehler", "ru": "ошибка", "pt": "erro", "nl": "fout", "fr": "Erreur", "it": "errore", "es": "error", "pl": "błąd"},
|
||||
"IP not accessible for server": { "en": "IP is not accessible for the device", "de": "IP ist für dieses Gerät nicht erreichbar", "ru": "Этот IP недоступен для устройства", "pt": "IP não está acessível para o dispositivo", "nl": "IP is niet toegankelijk voor het apparaat", "fr": "L'adresse IP n'est pas accessible pour l'appareil", "it": "L'IP non è accessibile per il dispositivo", "es": "IP no es accesible para el dispositivo", "pl": "Adres IP jest niedostępny dla urządzenia"},
|
||||
"Install first cloud adapter": { "en": "Install cloud adapter at first", "de": "Installieren Sie zuerst den Cloud-Adapter", "ru": "Сначала установить облачный адаптер", "pt": "Instale o adaptador de nuvem primeiro", "nl": "Installeer eerst de cloud-adapter", "fr": "Installer l'adaptateur cloud au début", "it": "Installare inizialmente l'adattatore cloud", "es": "Instalar el adaptador de nube al principio", "pl": "Najpierw zainstaluj adapter chmury"},
|
||||
"tooltip_type": { "en": "Specify where the voice must be played", "de": "Damit wird gesetzt, wo die Sprache ausgegeben wird", "ru": "Укажите как и где будет выводится голос", "pt": "Especifique onde a voz deve ser tocada", "nl": "Geef op waar de stem moet worden afgespeeld", "fr": "Précisez où la voix doit être jouée", "it": "Specificare dove deve essere suonata la voce", "es": "Especifique dónde debe reproducirse la voz", "pl": "Określ, gdzie musi być odtwarzany głos"},
|
||||
"tooltip_command": { "en": "This command will be executed, to use the custom system player", "de": "Dieses Kommando wird ausgeführt, um eigenen System-Player zu benutzen", "ru": "Эта команда выполнится для проигрывания с собственным плеером", "pt": "Este comando será executado para usar o player do sistema personalizado", "nl": "Deze opdracht wordt uitgevoerd om de aangepaste systeemspeler te gebruiken", "fr": "Cette commande sera exécutée pour utiliser le lecteur système personnalisé", "it": "Questo comando verrà eseguito, per utilizzare il player di sistema personalizzato", "es": "Este comando se ejecutará para usar el reproductor de sistema personalizado", "pl": "To polecenie zostanie wykonane, aby użyć niestandardowego odtwarzacza systemu"},
|
||||
"File": { "en": "File", "de": "Datei", "ru": "файл", "pt": "Arquivo", "nl": "het dossier", "fr": "Fichier", "it": "File", "es": "Expediente", "pl": "Plik"},
|
||||
"tree": { "en": "tree", "de": "Baum", "ru": "дерево", "pt": "árvore", "nl": "boom", "fr": "arbre", "it": "albero", "es": "árbol", "pl": "drzewo"},
|
||||
"play": { "en": "play", "de": "abspielen", "ru": "играть", "pt": "Toque", "nl": "spelen", "fr": "jouer", "it": "giocare", "es": "jugar", "pl": "grać"},
|
||||
"Adapter must be enabled": { "en": "Adapter must be enabled", "de": "Adapter muss aktiviert sein", "ru": "Адаптер должен быть включен", "pt": "O adaptador deve estar ativado", "nl": "Adapter moet zijn ingeschakeld", "fr": "L'adaptateur doit être activé", "it": "L'adattatore deve essere abilitato", "es": "El adaptador debe estar habilitado", "pl": "Adapter musi być włączony"}
|
||||
};
|
||||
Reference in New Issue
Block a user