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 +8 -2
- package/nodes/local-out.html +10 -0
- package/nodes/local-out.js +7 -0
- package/nodes/locales/en-US/local-out.html +2 -1
- package/nodes/locales/en-US/local-out.json +1 -0
- package/nodes/locales/ru-RU/local-out.html +1 -0
- package/nodes/locales/ru-RU/local-out.json +1 -0
- package/nodes/yandex-login.js +14 -8
- package/package.json +1 -1
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
|
-
|
|
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'>добро пожаловать"
|
package/nodes/local-out.html
CHANGED
|
@@ -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> <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> <span data-i18n="label.prevent_listening"></span>
|
package/nodes/local-out.js
CHANGED
|
@@ -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"
|
|
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>
|
|
@@ -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>
|
package/nodes/yandex-login.js
CHANGED
|
@@ -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}':
|