diff --git a/electron/wakeword.js b/electron/wakeword.js index 26b40b6..9dbba93 100644 --- a/electron/wakeword.js +++ b/electron/wakeword.js @@ -10,24 +10,30 @@ function startWakeword({ onWake }) { const scriptPath = path.join(__dirname, '../python/wakeword.py'); - wakewordProcess = spawn('python3', [scriptPath], { + const proc = spawn('python3', [scriptPath], { stdio: ['pipe', 'pipe', 'pipe'], }); + wakewordProcess = proc; - wakewordProcess.stdout.on('data', (data) => { - if (data.toString().trim() === 'WAKE') { - onWake(); + let lineBuffer = ''; + proc.stdout.on('data', (data) => { + lineBuffer += data.toString(); + const lines = lineBuffer.split('\n'); + lineBuffer = lines.pop(); + for (const line of lines) { + if (line.trim() === 'WAKE') onWake(); } }); - wakewordProcess.stderr.on('data', (data) => { + proc.stderr.on('data', (data) => { console.error('[Wakeword]', data.toString().trim()); }); - wakewordProcess.on('close', (code) => { + proc.on('close', (code, signal) => { + if (proc !== wakewordProcess) return; running = false; wakewordProcess = null; - if (code !== 0) { + if (code !== 0 && signal === null) { setTimeout(() => startWakeword({ onWake }), 2000); } });