12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849 |
- module.exports = function(RED) {
- var ui = require('../ui')(RED);
-
- function uiAudioNode(config) {
- RED.nodes.createNode(this,config);
- this.voice = config.voice;
- this.group = config.group;
- this.always = config.always || false;
- if (this.group && RED.nodes.getNode(this.group).hasOwnProperty("config")) {
- this.tabname = RED.nodes.getNode(RED.nodes.getNode(this.group).config.tab).name;
- }
- var node = this;
- node.status({});
-
- this.on('input', function(msg) {
- if (msg.hasOwnProperty("level") && (isNaN(msg.level) || msg.level > 300 || msg.level < 0)) {
- delete msg.level;
- }
- if (msg.reset == true) {
- ui.emit('ui-audio', { reset:true, tabname:node.tabname, always:node.always });
- }
- else if (Buffer.isBuffer(msg.payload)) {
- ui.emit('ui-audio', { audio:msg.payload, tabname:node.tabname, always:node.always, vol:msg.level });
- }
- else if (typeof msg.payload === "string") {
- ui.emit('ui-audio', { tts:msg.payload, voice:(node.voice || msg.voice || 0), tabname:node.tabname, always:node.always, vol:msg.level });
- }
- });
-
- var updateStatus = function(audioStatus) {
- if (audioStatus === "complete") {
- // When the audio or speech has played completely, clear the node status
- node.status({});
- }
- else if (audioStatus.indexOf("error") === 0) {
- node.status({shape:"ring",fill:"red",text:audioStatus});
- }
- else {
- node.status({shape:"dot",fill:"blue",text:audioStatus});
- }
- };
- ui.ev.on('audiostatus', updateStatus);
-
- this.on('close', function() {
- ui.ev.removeListener('audiostatus', updateStatus);
- })
- }
- RED.nodes.registerType("ui_audio", uiAudioNode);
- }
|