diff --git a/src/containers/internal/views/applications/speech-selection.tsx b/src/containers/internal/views/applications/speech-selection.tsx index caf88b9..50d32ac 100644 --- a/src/containers/internal/views/applications/speech-selection.tsx +++ b/src/containers/internal/views/applications/speech-selection.tsx @@ -25,6 +25,7 @@ import { VENDOR_SONIOX, VENDOR_WELLSAID, VENDOR_WHISPER, + useTtsModels, } from "src/vendor"; import { LabelOptions, @@ -92,11 +93,16 @@ export const SpeechProviderSelection = ({ const currentVendor = useRef(synthVendor); + const ttsModels = useTtsModels(); + useEffect(() => { currentVendor.current = synthVendor; if (!synthesis || synthVendor.startsWith("custom:")) { return; } + if (synthVendor === VENDOR_DEEPGRAM) { + return; + } const voiceOpts = synthesis[synthVendor as keyof SynthesisVendors] .filter((lang: VoiceLanguage) => { // ELEVENLABS has same voice for all lange, take voices from the 1st language @@ -206,7 +212,6 @@ export const SpeechProviderSelection = ({ value={synthVendor} options={ttsVendorOptions.filter( (vendor) => - vendor.value != VENDOR_DEEPGRAM && vendor.value != VENDOR_ASSEMBLYAI && vendor.value != VENDOR_SONIOX && vendor.value !== VENDOR_CUSTOM && @@ -223,6 +228,12 @@ export const SpeechProviderSelection = ({ return; } + /** DEEPGRAM only support voice */ + if (vendor.toString().startsWith(VENDOR_DEEPGRAM)) { + setSynthVoice(""); + return; + } + /** When using Google and en-US, ensure "Standard-C" is used as default */ if ( e.target.value === VENDOR_GOOGLE && @@ -282,8 +293,21 @@ export const SpeechProviderSelection = ({ /> )} + {ttsModels && synthVendor === VENDOR_DEEPGRAM && ( + <> + + setSynthVoice(e.target.value)} + /> + + )} {synthVendor && !synthVendor.toString().startsWith(VENDOR_CUSTOM) && + synthVendor !== VENDOR_DEEPGRAM && synthLang && ( <> diff --git a/src/containers/internal/views/speech-services/form.tsx b/src/containers/internal/views/speech-services/form.tsx index a0e56a3..3fcadc8 100644 --- a/src/containers/internal/views/speech-services/form.tsx +++ b/src/containers/internal/views/speech-services/form.tsx @@ -639,8 +639,7 @@ export const SpeechServiceForm = ({ credential }: SpeechServiceFormProps) => { {vendor && (
- {vendor !== VENDOR_DEEPGRAM && - vendor !== VENDOR_ASSEMBLYAI && + {vendor !== VENDOR_ASSEMBLYAI && vendor !== VENDOR_COBALT && vendor !== VENDOR_SONIOX && vendor != VENDOR_CUSTOM && ( diff --git a/src/vendor/index.tsx b/src/vendor/index.tsx index 2165187..cc45d22 100644 --- a/src/vendor/index.tsx +++ b/src/vendor/index.tsx @@ -94,14 +94,22 @@ export const useTtsModels = () => { Promise.all([ import("./speech-synthsis-models/elevenlabs-models"), import("./speech-synthsis-models/whisper-models"), - ]).then(([{ default: elevenlabs }, { default: whisper }]) => { - if (!ignore) { - setModels({ - elevenlabs, - whisper, - }); + import("./speech-synthsis-models/deepgram-models"), + ]).then( + ([ + { default: elevenlabs }, + { default: whisper }, + { default: deepgram }, + ]) => { + if (!ignore) { + setModels({ + elevenlabs, + whisper, + deepgram, + }); + } } - }); + ); return function cleanup() { ignore = true; }; @@ -207,6 +215,8 @@ export const useSpeechVendors = () => { nvidia: nvidiaynthesis, elevenlabs: elevenLabsSynthesis, whisper: whisperSynthesis, + // Deepgram just have model which includes language, voice + deepgram: [], }, recognizers: { aws: awsRecognizer, diff --git a/src/vendor/speech-synthsis-models/deepgram-models.ts b/src/vendor/speech-synthsis-models/deepgram-models.ts new file mode 100644 index 0000000..70131b9 --- /dev/null +++ b/src/vendor/speech-synthsis-models/deepgram-models.ts @@ -0,0 +1,13 @@ +import type { Model } from "../types"; + +export const models: Model[] = [ + { name: "Aurora English (US) Female", value: "alpha-aurora-en-v2" }, + { name: "Asteria English (US) Female", value: "alpha-asteria-en-v2" }, + { name: "Artemis English (UK) Female", value: "alpha-artemis-en-v3" }, + { name: "Andromeda English (US) Female", value: "alpha-andromeda-en-v3" }, + { name: "Stella English (UK) Female", value: "alpha-stella-en-v2" }, + { name: "Orion English (US) Male", value: "alpha-orion-en-v2" }, + { name: "Atlas English (US) Male", value: "alpha-atlas-en-v3" }, +]; + +export default models; diff --git a/src/vendor/types.ts b/src/vendor/types.ts index 1a8831f..693c1e4 100644 --- a/src/vendor/types.ts +++ b/src/vendor/types.ts @@ -73,6 +73,7 @@ export interface RegionVendors { export interface TtsModels { elevenlabs: Model[]; whisper: Model[]; + deepgram: Model[]; } export interface RecognizerVendors { @@ -98,6 +99,7 @@ export interface SynthesisVendors { nvidia: VoiceLanguage[]; elevenlabs: VoiceLanguage[]; whisper: VoiceLanguage[]; + deepgram: VoiceLanguage[]; } export interface MSRawSpeech {