diff --git a/client/tts.go b/client/tts.go index 28c33ec..aa44e4b 100644 --- a/client/tts.go +++ b/client/tts.go @@ -13,11 +13,12 @@ import ( "github.com/taigrr/elevenlabs/client/types" ) -func (c Client) TTSWriter(ctx context.Context, w io.Writer, text, voiceID string, options types.SynthesisOptions) error { +func (c Client) TTSWriter(ctx context.Context, w io.Writer, text, modelID, voiceID string, options types.SynthesisOptions) error { options.Clamp() url := fmt.Sprintf(c.endpoint+"/v1/text-to-speech/%s", voiceID) opts := types.TTS{ Text: text, + ModelID: modelID, VoiceSettings: options, } b, _ := json.Marshal(opts) @@ -56,12 +57,13 @@ func (c Client) TTSWriter(ctx context.Context, w io.Writer, text, voiceID string } } -func (c Client) TTS(ctx context.Context, text, voiceID string, options types.SynthesisOptions) ([]byte, error) { +func (c Client) TTS(ctx context.Context, text, voiceID, modelID string, options types.SynthesisOptions) ([]byte, error) { options.Clamp() url := fmt.Sprintf(c.endpoint+"/v1/text-to-speech/%s", voiceID) client := &http.Client{} opts := types.TTS{ Text: text, + ModelID: modelID, VoiceSettings: options, } b, _ := json.Marshal(opts) diff --git a/client/types/types.go b/client/types/types.go index 802477e..85e90ac 100644 --- a/client/types/types.go +++ b/client/types/types.go @@ -19,6 +19,7 @@ type Voice struct { Labels string `json:"labels,omitempty"` // Serialized labels dictionary for the voice. } type TTS struct { + ModelID string `json:"model_id"` Text string `json:"text"` // The text that will get converted into speech. Currently only English text is supported. VoiceSettings SynthesisOptions `json:"voice_settings,omitempty"` // Voice settings are applied only on the given TTS request. } @@ -103,6 +104,22 @@ type LanguageResponseModel struct { IsoCode string `json:"iso_code"` DisplayName string `json:"display_name"` } + +type Language struct { + LanguageID string `json:"language_id"` + Name string `json:"name"` +} + +type ModelResponseModel struct { + ModelID string `json:"model_id"` + Name string `json:"name"` + Description string `json:"description"` + CanBeFinetuned bool `json:"can_be_finetuned"` + CanDoTextToSpeech bool `json:"can_do_text_to_speech"` + CanDoVoiceConversion bool `json:"can_do_voice_conversion"` + TokenCostFactor float64 `json:"token_cost_factor"` + Languages []Language `json:"languages"` +} type RecordingResponseModel struct { RecordingID string `json:"recording_id"` MimeType string `json:"mime_type"`