mirror of
https://github.com/jambonz/speech-utils.git
synced 2025-12-19 03:37:49 +00:00
fixed custom vendor cache audio stores file extension
This commit is contained in:
@@ -170,6 +170,8 @@ async function synthAudio(client, createHash, retrieveHash, logger, stats, { acc
|
||||
renderForCaching
|
||||
});
|
||||
let filePath;
|
||||
// used only for custom vendor
|
||||
let fileExtension;
|
||||
filePath = makeFilePath({vendor, voice, key, salt, renderForCaching});
|
||||
debug(`synth key is ${key}`);
|
||||
let cached;
|
||||
@@ -201,7 +203,17 @@ async function synthAudio(client, createHash, retrieveHash, logger, stats, { acc
|
||||
debug('result WAS found in cache');
|
||||
servedFromCache = true;
|
||||
stats.increment('tts.cache.requests', ['found:yes']);
|
||||
audioBuffer = Buffer.from(cached, 'base64');
|
||||
if (vendor.startsWith('custom')) {
|
||||
// custom vendors support multiple mime types such as: mp3, wav, r8, r16 ...etc,
|
||||
// mime type/file extension is available when http response has header Content-type.
|
||||
// In cache, file extension is store together with audiBuffer in a json.
|
||||
// Normal cache audio will be base64 string
|
||||
const payload = JSON.parse(cached);
|
||||
filePath = filePath.replace(/\.[^\.]*$/g, payload.fileExtension);
|
||||
audioBuffer = Buffer.from(payload.audioBuffer, 'base64');
|
||||
} else {
|
||||
audioBuffer = Buffer.from(cached, 'base64');
|
||||
}
|
||||
client.expire(key, EXPIRES).catch((err) => logger.info(err, 'Error setting expires'));
|
||||
}
|
||||
if (!cached) {
|
||||
@@ -268,7 +280,7 @@ async function synthAudio(client, createHash, retrieveHash, logger, stats, { acc
|
||||
renderForCaching, disableTtsStreaming});
|
||||
break;
|
||||
case vendor.startsWith('custom') ? vendor : 'cant_match_value':
|
||||
({ audioBuffer, filePath } = await synthCustomVendor(logger,
|
||||
({ audioBuffer, filePath, fileExtension } = await synthCustomVendor(logger,
|
||||
{credentials, stats, language, voice, text, filePath}));
|
||||
break;
|
||||
default:
|
||||
@@ -282,7 +294,14 @@ async function synthAudio(client, createHash, retrieveHash, logger, stats, { acc
|
||||
debug(`tts rtt time for ${text.length} chars on ${vendorLabel}: ${rtt}`);
|
||||
logger.info(`tts rtt time for ${text.length} chars on ${vendorLabel}: ${rtt}`);
|
||||
|
||||
client.setex(key, EXPIRES, audioBuffer.toString('base64'))
|
||||
const base64Audio = audioBuffer.toString('base64');
|
||||
const cacheContent = vendor.startsWith('custom') ?
|
||||
JSON.stringify({
|
||||
audioBuffer: base64Audio,
|
||||
fileExtension
|
||||
}) : base64Audio;
|
||||
|
||||
client.setex(key, EXPIRES, cacheContent)
|
||||
.catch((err) => logger.error(err, `error calling setex on key ${key}`));
|
||||
}
|
||||
|
||||
@@ -729,9 +748,11 @@ const synthCustomVendor = async(logger, {credentials, stats, language, voice, te
|
||||
const regex = /\.[^\.]*$/g;
|
||||
const mime = response.headers['content-type'];
|
||||
const buffer = await response.arrayBuffer();
|
||||
const fileExtension = getFileExtFromMime(mime);
|
||||
return {
|
||||
audioBuffer: buffer,
|
||||
filePath: filePath.replace(regex, getFileExtFromMime(mime))
|
||||
filePath: filePath.replace(regex, fileExtension),
|
||||
fileExtension
|
||||
};
|
||||
} catch (err) {
|
||||
logger.info({err}, `Vendor ${vendor} returned error`);
|
||||
|
||||
Reference in New Issue
Block a user