mirror of
https://github.com/jambonz/jambonz-feature-server.git
synced 2026-07-04 19:32:01 +00:00
dont' stop AMD on StoppedSpeaking, wait for tone
This commit is contained in:
+28
-7
@@ -247,6 +247,11 @@ module.exports = (logger) => {
|
||||
const frequency = Math.floor(fsEvent.getHeader('Frequency'));
|
||||
const variance = Math.floor(fsEvent.getHeader('Frequency-variance'));
|
||||
task.emit('amd', {type: AmdEvents.ToneDetected, frequency, variance});
|
||||
if (ep.amd?.awaitingTone) {
|
||||
/* partial stop already tore down STT; finish cleanup now that the beep landed */
|
||||
stopAmd(ep, task);
|
||||
return;
|
||||
}
|
||||
if (ep.amd) {
|
||||
ep.amd.stopToneTimer();
|
||||
ep.amd.beepDetected = true;
|
||||
@@ -387,7 +392,9 @@ module.exports = (logger) => {
|
||||
.on(AmdEvents.MachineStoppedSpeaking, () => {
|
||||
task.emit('amd', {type: AmdEvents.MachineStoppedSpeaking});
|
||||
try {
|
||||
stopAmd(ep, task);
|
||||
/* if the beep already landed during the greeting, nothing left to wait for */
|
||||
const keepAvmd = !ep.amd?.beepDetected;
|
||||
stopAmd(ep, task, {keepAvmd});
|
||||
} catch (err) {
|
||||
logger.info({err}, 'Error stopping transcription');
|
||||
}
|
||||
@@ -401,11 +408,19 @@ module.exports = (logger) => {
|
||||
ep.execute('avmd_start').catch((err) => this.logger.info(err, 'Error starting avmd'));
|
||||
};
|
||||
|
||||
const stopAmd = (ep, task) => {
|
||||
const stopAmd = (ep, task, {keepAvmd = false} = {}) => {
|
||||
let vendor;
|
||||
if (ep.amd) {
|
||||
vendor = ep.amd.vendor;
|
||||
ep.amd.stopAllTimers();
|
||||
if (keepAvmd) {
|
||||
/* tear down STT but leave avmd + Beep listener + toneTimer running */
|
||||
ep.amd.stopDecisionTimer();
|
||||
ep.amd.stopNoSpeechTimer();
|
||||
ep.amd.stopGreetingCompletionTimer();
|
||||
ep.amd.awaitingTone = true;
|
||||
} else {
|
||||
ep.amd.stopAllTimers();
|
||||
}
|
||||
try {
|
||||
ep.removeListener(GoogleTranscriptionEvents.Transcription, ep.amd.transcriptionHandler);
|
||||
ep.removeListener(GoogleTranscriptionEvents.EndOfUtterance, ep.amd.EndOfUtteranceHandler);
|
||||
@@ -421,7 +436,9 @@ module.exports = (logger) => {
|
||||
} catch (error) {
|
||||
logger.error('Unable to Remove AMD Listener', error);
|
||||
}
|
||||
ep.amd = null;
|
||||
if (!keepAvmd) {
|
||||
ep.amd = null;
|
||||
}
|
||||
}
|
||||
|
||||
if (ep.connected) {
|
||||
@@ -431,10 +448,14 @@ module.exports = (logger) => {
|
||||
gracefulShutdown: false
|
||||
})
|
||||
.catch((err) => logger.info(err, 'stopAmd: Error stopping transcription'));
|
||||
task.emit('amd', {type: AmdEvents.Stopped});
|
||||
ep.execute('avmd_stop').catch((err) => this.logger.info(err, 'Error stopping avmd'));
|
||||
if (!keepAvmd) {
|
||||
task.emit('amd', {type: AmdEvents.Stopped});
|
||||
ep.execute('avmd_stop').catch((err) => this.logger.info(err, 'Error stopping avmd'));
|
||||
}
|
||||
}
|
||||
if (!keepAvmd) {
|
||||
ep.removeCustomEventListener(AvmdEvents.Beep);
|
||||
}
|
||||
ep.removeCustomEventListener(AvmdEvents.Beep);
|
||||
};
|
||||
|
||||
return {startAmd, stopAmd};
|
||||
|
||||
Reference in New Issue
Block a user