Compare commits

..
6 Commits
Author SHA1 Message Date
Dave Horton 04080cc5ec 0.2.4 2025-03-19 21:48:31 -04:00
Dave Horton 3e5ab4af27 Merge pull request #107 from jambonz/update-deps
update undici
2025-03-19 21:48:02 -04:00
Dave Horton f06dddd2f7 update undici 2025-03-19 21:46:21 -04:00
Dave Horton 7b4a71f55d 0.2.3 2025-02-07 07:20:12 -05:00
Dave Horton d552b65618 Merge pull request #106 from jambonz/feat/rimelabs_voices
rimelabs support multiple model and languages
2025-02-07 07:19:47 -05:00
Quan HL f701b50244 rimelabs support multiple model and languages 2025-02-07 14:20:52 +07:00
4 changed files with 362 additions and 573 deletions
+3 -1
View File
@@ -926,7 +926,7 @@ const synthPlayHT = async(client, logger, {
}; };
const synthRimelabs = async(logger, { const synthRimelabs = async(logger, {
credentials, options, stats, voice, text, renderForCaching, disableTtsStreaming credentials, options, stats, language, voice, text, renderForCaching, disableTtsStreaming
}) => { }) => {
const {api_key, model_id, options: credOpts} = credentials; const {api_key, model_id, options: credOpts} = credentials;
const opts = !!options && Object.keys(options).length !== 0 ? options : JSON.parse(credOpts || '{}'); const opts = !!options && Object.keys(options).length !== 0 ? options : JSON.parse(credOpts || '{}');
@@ -937,6 +937,7 @@ const synthRimelabs = async(logger, {
params += `{api_key=${api_key}`; params += `{api_key=${api_key}`;
params += `,model_id=${model_id}`; params += `,model_id=${model_id}`;
params += ',vendor=rimelabs'; params += ',vendor=rimelabs';
params += `,language=${language}`;
params += `,voice=${voice}`; params += `,voice=${voice}`;
params += ',write_cache_file=1'; params += ',write_cache_file=1';
if (opts.speedAlpha) params += `,speed_alpha=${opts.speedAlpha}`; if (opts.speedAlpha) params += `,speed_alpha=${opts.speedAlpha}`;
@@ -962,6 +963,7 @@ const synthRimelabs = async(logger, {
text, text,
modelId: model_id, modelId: model_id,
samplingRate: sampleRate, samplingRate: sampleRate,
lang: language,
...opts ...opts
}); });
return { return {
+320 -567
View File
File diff suppressed because it is too large Load Diff
+2 -2
View File
@@ -1,6 +1,6 @@
{ {
"name": "@jambonz/speech-utils", "name": "@jambonz/speech-utils",
"version": "0.2.2", "version": "0.2.4",
"description": "TTS-related speech utilities for jambonz", "description": "TTS-related speech utilities for jambonz",
"main": "index.js", "main": "index.js",
"author": "Dave Horton", "author": "Dave Horton",
@@ -39,7 +39,7 @@
"ibm-watson": "^8.0.0", "ibm-watson": "^8.0.0",
"microsoft-cognitiveservices-speech-sdk": "1.38.0", "microsoft-cognitiveservices-speech-sdk": "1.38.0",
"openai": "^4.25.0", "openai": "^4.25.0",
"undici": "^6.4.0" "undici": "^7.5.0"
}, },
"devDependencies": { "devDependencies": {
"config": "^3.3.11", "config": "^3.3.11",
+37 -3
View File
@@ -720,7 +720,7 @@ test('Cartesia speech synth tests', async(t) => {
client.quit(); client.quit();
}); });
test('rimelabs speech synth tests', async(t) => { test('rimelabs speech synth tests mist', async(t) => {
const fn = require('..'); const fn = require('..');
const {synthAudio, client} = fn(opts, logger); const {synthAudio, client} = fn(opts, logger);
@@ -730,7 +730,7 @@ test('rimelabs speech synth tests', async(t) => {
} }
const text = 'Hi there and welcome to jambones!'; const text = 'Hi there and welcome to jambones!';
try { try {
let opts = await synthAudio(stats, { const opts = await synthAudio(stats, {
vendor: 'rimelabs', vendor: 'rimelabs',
credentials: { credentials: {
api_key: process.env.RIMELABS_API_KEY, api_key: process.env.RIMELABS_API_KEY,
@@ -740,7 +740,7 @@ test('rimelabs speech synth tests', async(t) => {
reduceLatency: false reduceLatency: false
}) })
}, },
language: 'en-US', language: 'eng',
voice: 'amber', voice: 'amber',
text, text,
renderForCaching: true renderForCaching: true
@@ -754,6 +754,40 @@ test('rimelabs speech synth tests', async(t) => {
client.quit(); client.quit();
}); });
test('rimelabs speech synth tests mistv2', async(t) => {
const fn = require('..');
const {synthAudio, client} = fn(opts, logger);
if (!process.env.RIMELABS_API_KEY) {
t.pass('skipping rimelabs speech synth tests since RIMELABS_API_KEY is not provided');
return t.end();
}
const text = 'Hi there and welcome to jambones!';
try {
const opts = await synthAudio(stats, {
vendor: 'rimelabs',
credentials: {
api_key: process.env.RIMELABS_API_KEY,
model_id: 'mistv2',
options: JSON.stringify({
speedAlpha: 1.0,
reduceLatency: false
})
},
language: 'spa',
voice: 'pablo',
text,
renderForCaching: true
});
t.ok(!opts.servedFromCache, `successfully synthesized rimelabs mistv2 audio to ${opts.filePath}`);
} catch (err) {
console.error(JSON.stringify(err));
t.end(err);
}
client.quit();
});
test('whisper speech synth tests', async(t) => { test('whisper speech synth tests', async(t) => {
const fn = require('..'); const fn = require('..');
const {synthAudio, client} = fn(opts, logger); const {synthAudio, client} = fn(opts, logger);