-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathwakeword.js
More file actions
95 lines (83 loc) · 2.98 KB
/
wakeword.js
File metadata and controls
95 lines (83 loc) · 2.98 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
/////////////
//VARIABLES//
/////////////
var matrix_ip = '127.0.0.1';// Local Device IP
var matrix_wakeword_base_port = 60001; // Wakeword base port
var matrix_io = require('matrix-protos').matrix_io;// MATRIX Protocol Buffers
var zmq = require('zeromq');// Asynchronous Messaging Framework
const LM_PATH = '/home/pi/MATRIX-TV-Remote/0652.lm';// Language Model File
const DIC_PATH = '/home/pi/MATRIX-TV-Remote/0652.dic';// Dictation File
var servos = require('./servos.js');
var lights = require('./lights.js');
/////////////
//BASE PORT//
/////////////
// Create a Pusher socket
var configSocket = zmq.socket('push');
// Connect Pusher to Base port
configSocket.connect('tcp://' + matrix_ip + ':' + matrix_wakeword_base_port /* config */);
// Create driver configuration
var config = matrix_io.malos.v1.driver.DriverConfig.create(
{ // Create & Set wakeword configurations
wakeword: matrix_io.malos.v1.io.WakeWordParams.create({
lmPath: LM_PATH,// Language model file path
dicPath: DIC_PATH,// Dictation file path
channel: matrix_io.malos.v1.io.WakeWordParams.MicChannel.channel8,// Desired MATRIX microphone
enableVerbose: false// Enable verbose option
})
});
// Send configuration to MATRIX device
configSocket.send(matrix_io.malos.v1.driver.DriverConfig.encode(config).finish());
console.log('Listening for wakewords');
//////////////
//ERROR PORT//
//////////////
// Create a Subscriber socket
var errorSocket = zmq.socket('sub');
// Connect Subscriber to Error port
errorSocket.connect('tcp://' + matrix_ip + ':' + (matrix_wakeword_base_port + 2));
// Connect Subscriber to Error port
errorSocket.subscribe('');
// On Message
errorSocket.on('message', function(error_message){
console.log('Error received: ' + error_message.toString('utf8'));// Log error
});
////////////////////
//DATA UPDATE PORT//
////////////////////
// Create a Subscriber socket
var updateSocket = zmq.socket('sub');
// Connect Subscriber to Base port
updateSocket.connect('tcp://' + matrix_ip + ':' + (matrix_wakeword_base_port + 3));
// Subscribe to messages
updateSocket.subscribe('');
// On Message
updateSocket.on('message', function(wakeword_buffer) {
// Extract message
var wakeWordData = matrix_io.malos.v1.io.WakeWordParams.decode(wakeword_buffer);
// Log message
console.log(wakeWordData);
// Run actions based on the phrase heard
switch(wakeWordData.wakeWord) {
case "MATRIX PROJECTOR ON":
console.log('I HEARD MATRIX PROJECTOR ON!');
servos.projectorOn();
break;
case "MATRIX PROJECTOR OFF":
console.log('I HEARD MATRIX PROJECTOR OFF!');
servos.projectorOff();
break;
case "MATRIX PROJECTOR CALIBRATE":
console.log('I HEARD MATRIX PROJECTOR CALIBRATE!');
servos.projectorCalibrate();
break;
case "MATRIX LIGHTS ON":
console.log('I HEARD MATRIX LIGHTS OFF!');
lights.lightsOn();
break;
case "MATRIX LIGHTS OFF":
console.log('I HEARD MATRIX LIGHTS OFF!');
lights.lightsOff();
break;
}
});