node-red-contrib-yandex-station-management 0.3.2 → 0.3.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -3,6 +3,7 @@
3
3
  - Яндекс Станция(протестировано)
4
4
  - Яндекс Станция мини(протестировано)
5
5
  - Яндекс Станция мини 2 с экраном(протестировано)
6
+ - Яндекс Станция лайт(протестировано)
6
7
  - Яндекс Станци Макс(протестировано)
7
8
  - Яндекс Модуль(не протестировано)
8
9
  - Яндекс Модуль - 2 (в процессе тестирования)
@@ -40,7 +41,7 @@
40
41
 
41
42
  После деплоя в настройках ноды в поле Station должны появиться станции доступные для управления.
42
43
 
43
- npmЕсли станция не появилась в списке, то можно подождать пару минут или перезапустить Node-Red.
44
+ Если станция не появилась в списке, то можно подождать пару минут или перезапустить Node-Red.
44
45
 
45
46
  ## Описание возможностей и сценариев использования.
46
47
  ### Нода Station
@@ -125,6 +126,7 @@ Phrase to say - фраза, которую скажет Алиса вместо
125
126
  -
126
127
  Есть ряд опций:
127
128
  - Volume. Позволяет произносить фразу заданной громкостью. Если не выбрано, то фраза произносится с текущим уровнем громкости. После произнесения уровень громкости вернется в изначальный. Может быть переопределено через msg.volume
129
+ - Whisper. Позволяет произнести фразу шептом.. Переопределяется через msg.whisper
128
130
  - Prevent listening. Если выбрано, то колонка после воспроизведения не "слушает", что ей ответят. Может быть переопределено через msg.prevent_listening
129
131
  - Pause while TTS. Ставит воспроизведение плеера на паузу на время речи. Воспроизведение будет продолжено, только если что-то играло на момент поступления команды. Может быть переопределено через msg.pause_music
130
132
  Все опции комбинируемы между собой.
@@ -235,6 +237,7 @@ Phrase to say - фраза, которую скажет Алиса вместо
235
237
  }
236
238
  ```
237
239
  10. Отправить "Текст" для TTS.
240
+ Больше не работает!
238
241
  ```json
239
242
  {
240
243
  "command" : "sendText",
@@ -303,7 +306,10 @@ Phrase to say - фраза, которую скажет Алиса вместо
303
306
  ```json
304
307
  "value": "<speaker audio='alice-sounds-game-win-1.opus'>У вас получилось!"
305
308
  ```
306
-
309
+ - Говорить шепотом
310
+ ```json
311
+ "value": "<speaker is_whisper="true"'>Я говорю тихо-тихо!"
312
+ ```
307
313
  - Совмещение эффектов
308
314
  ```json
309
315
  "value": "<speaker voice='kostya' audio='alice-sounds-game-win-1.opus' effect='megaphone'>добро пожаловать"
@@ -36,6 +36,9 @@
36
36
  value: false,
37
37
  },
38
38
  noTrack: {},
39
+ whisper: {
40
+ value: false,
41
+ },
39
42
  ttsVoice: {
40
43
  value: null,
41
44
  },
@@ -247,6 +250,13 @@
247
250
  <input type="range" id="node-input-volume" name="volume" min="0" max="100" step="1" style="display: inline-block; width: 150px; margin-left: 10px; vertical-align: middle;">
248
251
  <div id="range-label" class='online'><span id="volume-level" class="online"></span><span class="online">%</span></div>
249
252
  </div>
253
+ <div class="form-row command_options command_options-tts">
254
+ <label for="node-input-whisper" class="label label-long">
255
+ <i class="fa fa-deaf"></i>&nbsp;<span data-i18n="label.whisper"></span>
256
+ <div class="red-ui-debug-msg-type-string" style="font-size: 10px;">msg.whisper</div></label>
257
+ </label>
258
+ <input type="checkbox" id="node-input-whisper" style="display: inline-block; width: auto; vertical-align: top;">
259
+ </div>
250
260
  <div class="form-row command_options command_options-tts">
251
261
  <label for="node-input-stopListening" class="label label-long">
252
262
  <i class="fa fa-deaf"></i>&nbsp;<span data-i18n="label.prevent_listening"></span>
@@ -15,6 +15,7 @@ module.exports = function(RED) {
15
15
  node.pauseMusic = config.pauseMusic;
16
16
  node.ttsVoice = config.ttsVoice;
17
17
  node.ttsEffect = config.ttsEffect;
18
+ node.whisper = config.whisper;
18
19
  node.status({});
19
20
 
20
21
  function debugMessage(text){
@@ -32,6 +33,7 @@ module.exports = function(RED) {
32
33
 
33
34
  //apply node's config
34
35
  if (node.volumeFlag) {data.volume = node.volume/100}
36
+ if (node.whisper) {data.whisper = node.whisper}
35
37
  if (node.stopListening) {data.stopListening = node.stopListening}
36
38
  if (node.noTrackPhrase) {data.noTrackPhrase = node.noTrackPhrase}
37
39
  if (node.pauseMusic) {data.pauseMusic = node.pauseMusic}
@@ -39,6 +41,7 @@ module.exports = function(RED) {
39
41
 
40
42
  //redefine options from input
41
43
  if ("volume" in input) {data.volume = input.volume/100}
44
+ if ("whisper" in input) {data.whisper = input.whisper?true:false}
42
45
  if ("voice" in input) {node.ttsVoice = input.voice}
43
46
  if ("effect" in input) {node.ttsEffect = input.effect}
44
47
  if ("prevent_listening" in input) {node.noTrackPhrase = input.prevent_listening}
@@ -100,6 +103,10 @@ module.exports = function(RED) {
100
103
  data.payload = "<speaker effect='" + effectsArr[ind] + "'>" + data.payload;
101
104
  }
102
105
  }
106
+
107
+ if (data.whisper) {
108
+ data.payload = "<speaker is_whisper='"+data.whisper+"'>" + data.payload;
109
+ }
103
110
  } else {
104
111
  data.payload = ""
105
112
  }
@@ -6,9 +6,10 @@
6
6
  <p>Воспросизведение голосом отправленных фраз - Text to Speech. Не имеет ограничения по символам.</p>
7
7
  <dl class="message-properties">
8
8
  <dt>Текст</dt><dd>Откуда брать текст: msg.payload, flow, global или Json - выбрать сообщение случайным образом из массива вида <code>["один", "два", "три"]</code>.</dd>
9
- <dt class="optional">Голос</dt><dd>Изменить голос.</dd>
9
+ <dt class="optional">Whisper</dt><dd>Ответить шёпотом.</dd>
10
10
  <dt class="optional">Эффект</dt><dd>Наложить эффект на голос.</dd>
11
11
  <dt class="optional">Громкость</dt><dd>Позволяет произносить фразу заданной громкостью. Если не выбрано, то фраза произносится с текущим уровнем громкости. После произнесения, уровень громкости вернется в изначальный.</dd>
12
+ <dt class="optional">Voice</dt><dd>Say a phrase in a whisper.</dd>
12
13
  <dt class="optional">Не ждать ответ</dt><dd>Если выбрано, то колонка, после воспроизведения, не "слушает", что ей ответят.</dd>
13
14
  <dt class="optional">Плеер на паузу</dt><dd>Ставит воспроизведение плеера на паузу на время речи. Воспроизведение будет продолжено, только если что-то играло на момент поступления команды.</dd>
14
15
  </dl>
@@ -11,6 +11,7 @@
11
11
  "volume": "Volume",
12
12
  "prevent_listening": "Prevent listening",
13
13
  "pause_while_tts": "Pause while TTS",
14
+ "whisper": "Whisper",
14
15
  "default_command": "Default command"
15
16
  },
16
17
  "placeholder": {
@@ -8,6 +8,7 @@
8
8
  <dt class="optional">Голос</dt><dd>Изменить голос.</dd>
9
9
  <dt class="optional">Эффект</dt><dd>Наложить эффект на голос.</dd>
10
10
  <dt class="optional">Громкость</dt><dd>Позволяет произносить фразу заданной громкостью. Если не выбрано, то фраза произносится с текущим уровнем громкости. После произнесения, уровень громкости вернется в изначальный.</dd>
11
+ <dt class="optional">Шёпот</dt><dd>Ответить шёпотом.</dd>
11
12
  <dt class="optional">Не ждать ответ</dt><dd>Если выбрано, то колонка, после воспроизведения, не "слушает", что ей ответят.</dd>
12
13
  <dt class="optional">Плеер на паузу</dt><dd>Ставит воспроизведение плеера на паузу на время речи. Воспроизведение будет продолжено, только если что-то играло на момент поступления команды.</dd>
13
14
  </dl>
@@ -11,6 +11,7 @@
11
11
  "volume": "Громкость",
12
12
  "prevent_listening": "Не ждать ответ",
13
13
  "pause_while_tts": "Плеер на паузу",
14
+ "whisper": "Шёпот",
14
15
  "default_command": "Команда"
15
16
  },
16
17
  "placeholder": {
@@ -97,15 +97,19 @@ module.exports = function(RED) {
97
97
  });
98
98
  //node.emit('refreshHttp', node.activeStationList, node.readyList)
99
99
  deviceListProcessing(node.deviceList)
100
+ try {
101
+ discoverDevices(node.deviceList)
102
+ .then(() => {
103
+ //debugMessage(`calling processing for ${node.deviceList.length} devices`);
104
+ deviceListProcessing(node.deviceList)
105
+
106
+ });
107
+ //debugMessage(node.id);
108
+ return node.deviceList;
109
+ } catch (error) {
110
+ debugMessage(`Error while searching: ${error}`);
111
+ }
100
112
 
101
- discoverDevices(node.deviceList)
102
- .then(() => {
103
- //debugMessage(`calling processing for ${node.deviceList.length} devices`);
104
- deviceListProcessing(node.deviceList)
105
-
106
- });
107
- //debugMessage(node.id);
108
- return node.deviceList;
109
113
  })
110
114
  .catch(function (err) {
111
115
  //node.emit('refreshHttp', node.readyList);
@@ -295,6 +299,7 @@ module.exports = function(RED) {
295
299
  if (device.lastState.aliceState == 'LISTENING' && device.waitForListening) {node.emit(`stopListening`, device)}
296
300
  if (device.lastState.aliceState == 'LISTENING' && device.playAfterTTS) {node.emit('startPlay', device)}
297
301
  if (device.lastState.aliceState == 'LISTENING' && device.waitForIdle) {node.emit('setVolume', device)}
302
+ //if (device.lastState.aliceState != 'SPEAKING' && device.ttsBuffer.length > 0) {node.emit('nextTts', device)}
298
303
  // if (device.parameters.hasOwnProperty(sheduler)) {
299
304
  // let resultSheduler = checkSheduler(device, dataRecieved.sentTime)
300
305
  // device.canPlay = resultSheduler[0]
@@ -514,6 +519,7 @@ module.exports = function(RED) {
514
519
  if ("session" in message.hap) {
515
520
  switch(JSON.stringify(message.payload)){
516
521
  case '{"TargetMediaState":1}':
522
+ return messageConstructor('command', {'payload': 'stop'})
517
523
  case '{"Active":0}':
518
524
  return messageConstructor('command', {'payload': 'stop'})
519
525
  case '{"TargetMediaState":0}':
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "node-red-contrib-yandex-station-management",
3
- "version": "0.3.2",
3
+ "version": "0.3.3",
4
4
  "description": "Local management of YandexStation using API on websockets",
5
5
  "main": "index.js",
6
6
  "scripts": {