support deepgram (#369)

* support deepgram

* wip
This commit is contained in:
Hoan Luu Huu
2023-12-26 19:53:13 +07:00
committed by GitHub
parent eae674b992
commit 2f2e58e180
5 changed files with 58 additions and 10 deletions
@@ -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 && (
<>
<label htmlFor="synthesis_lang">Model</label>
<Selector
id="synthesis_voice"
name="synthesis_voice"
value={synthVoice}
options={ttsModels[synthVendor]}
onChange={(e) => setSynthVoice(e.target.value)}
/>
</>
)}
{synthVendor &&
!synthVendor.toString().startsWith(VENDOR_CUSTOM) &&
synthVendor !== VENDOR_DEEPGRAM &&
synthLang && (
<>
<label htmlFor="synthesis_lang">Language</label>
@@ -639,8 +639,7 @@ export const SpeechServiceForm = ({ credential }: SpeechServiceFormProps) => {
</fieldset>
{vendor && (
<fieldset>
{vendor !== VENDOR_DEEPGRAM &&
vendor !== VENDOR_ASSEMBLYAI &&
{vendor !== VENDOR_ASSEMBLYAI &&
vendor !== VENDOR_COBALT &&
vendor !== VENDOR_SONIOX &&
vendor != VENDOR_CUSTOM && (
+17 -7
View File
@@ -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,
+13
View File
@@ -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;
+2
View File
@@ -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 {