diff --git a/lib/synth-audio.js b/lib/synth-audio.js index 101a8c4..213c4b1 100644 --- a/lib/synth-audio.js +++ b/lib/synth-audio.js @@ -210,6 +210,10 @@ async function synthAudio(client, logger, stats, { account_sid, } break; case 'whisper': + audioBuffer = await synthWhisper(logger, {credentials, stats, voice, text, renderForCaching}); + if (typeof audioBuffer === 'object' && audioBuffer.filePath) { + return audioBuffer; + } audioBuffer = await synthWhisper(logger, {credentials, stats, voice, text}); break; case 'deepgram': @@ -608,11 +612,11 @@ const synthCustomVendor = async(logger, {credentials, stats, language, voice, te }; const synthElevenlabs = async(logger, {credentials, options, stats, language, voice, text, renderForCaching}) => { - const {api_key, model_id, options: credOpts} = credentials; + const {api_key, model_id, options: credOpts, use_streaming} = credentials; const opts = !!options && Object.keys(options).length !== 0 ? options : JSON.parse(credOpts || '{}'); /* if the env is set to stream then bag out, unless we are specifically rendering to generate a cache file */ - if (process.env.JAMBONES_ELEVENLABS_STREAMING && !renderForCaching) { + if (use_streaming && !renderForCaching) { let params = ''; params += `{api_key=${api_key}`; params += `,model_id=${model_id}`; @@ -656,8 +660,24 @@ const synthElevenlabs = async(logger, {credentials, options, stats, language, vo } }; -const synthWhisper = async(logger, {credentials, stats, voice, text}) => { - const {api_key, model_id, baseURL, timeout} = credentials; +const synthWhisper = async(logger, {credentials, stats, voice, text, renderForCaching}) => { + const {api_key, model_id, baseURL, timeout, use_streaming, speed} = credentials; + /* if the env is set to stream then bag out, unless we are specifically rendering to generate a cache file */ + if (use_streaming && !renderForCaching) { + let params = ''; + params += `{api_key=${api_key}`; + params += `,model_id=${model_id}`; + params += `,voice=${voice}`; + params += ',write_cache_file=1'; + if (speed) params += `,speed=${speed}`; + params += '}'; + + return { + filePath: `say:${params}${text.replace(/\n/g, ' ')}`, + servedFromCache: false, + rtt: 0 + }; + } try { const openai = new OpenAI.OpenAI({ apiKey: api_key,