From 0ec9d5d037467618087b932d77c98b20de9baae7 Mon Sep 17 00:00:00 2001 From: LitoMore Date: Sun, 9 Jun 2024 09:11:10 +0800 Subject: [PATCH] Handle kill signals --- source/index.ts | 38 +++++++++++++++++++++++--------------- source/utils.ts | 2 +- 2 files changed, 24 insertions(+), 16 deletions(-) diff --git a/source/index.ts b/source/index.ts index f9eaf7f..a8f948a 100644 --- a/source/index.ts +++ b/source/index.ts @@ -1,4 +1,4 @@ -import {execa} from 'execa'; +import {ExecaError, execa} from 'execa'; import {killRunningSay} from './utils.js'; export type SayOptions = { @@ -15,20 +15,28 @@ export type SayOptions = { export async function say(text: string, options: SayOptions = {}) { await killRunningSay(); const {voice, rate, audioDevice, quality, inputFile, outputFile, networkSend, channels} = options; - await execa( - 'say', - [ - text, - voice && ['--voice', voice], - rate && ['--rate', rate], - audioDevice && ['--audio-device', audioDevice], - quality && ['--quality', quality], - inputFile && ['--input-file', inputFile], - outputFile && ['--output-file', outputFile], - networkSend && ['--network-send', networkSend], - channels && ['--channels', channels], - ].flat().filter(Boolean) as string[], - ); + try { + await execa( + 'say', + [ + text, + voice && ['--voice', voice], + rate && ['--rate', rate], + audioDevice && ['--audio-device', audioDevice], + quality && ['--quality', quality], + inputFile && ['--input-file', inputFile], + outputFile && ['--output-file', outputFile], + networkSend && ['--network-send', networkSend], + channels && ['--channels', channels], + ].flat().filter(Boolean) as string[], + ); + } catch (error) { + if (error instanceof ExecaError && error.signal === 'SIGKILL') { + return; + } + + throw error; + } } export { diff --git a/source/utils.ts b/source/utils.ts index d8e5a46..85e6361 100644 --- a/source/utils.ts +++ b/source/utils.ts @@ -67,6 +67,6 @@ export const checkIfSayIsRunning = async () => { export const killRunningSay = async () => { const sayProcess = await checkIfSayIsRunning(); if (sayProcess) { - await fkill(sayProcess.pid, {force: true}); + await fkill(sayProcess.pid, {force: true, silent: true}); } };