diff --git a/client/client.go b/client/client.go index 841b827..2cbac4b 100644 --- a/client/client.go +++ b/client/client.go @@ -1,6 +1,8 @@ package client -import "errors" +import ( + "errors" +) const apiEndpoint = "https://api.elevenlabs.io" diff --git a/client/tts.go b/client/tts.go index 4bbb041..1c8739c 100644 --- a/client/tts.go +++ b/client/tts.go @@ -14,6 +14,7 @@ import ( ) func (c Client) TTSWriter(ctx context.Context, w io.Writer, text, voiceID string, options types.SynthesisOptions) error { + options.Clamp() url := fmt.Sprintf(c.endpoint+"/v1/text-to-speech/%s", voiceID) opts := types.TTS{ Text: text, @@ -55,7 +56,8 @@ func (c Client) TTSWriter(ctx context.Context, w io.Writer, text, voiceID string } } -func (c Client) TTS(ctx context.Context, w io.Writer, text, voiceID string, options types.SynthesisOptions) ([]byte, error) { +func (c Client) TTS(ctx context.Context, text, voiceID 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{ @@ -101,6 +103,7 @@ func (c Client) TTS(ctx context.Context, w io.Writer, text, voiceID string, opti } func (c Client) TTSStream(ctx context.Context, w io.Writer, text, voiceID string, options types.SynthesisOptions) error { + options.Clamp() url := fmt.Sprintf(c.endpoint+"/v1/text-to-speech/%s/stream", voiceID) opts := types.TTS{ Text: text, diff --git a/client/types/types.go b/client/types/types.go index 2ed8e89..802477e 100644 --- a/client/types/types.go +++ b/client/types/types.go @@ -23,6 +23,15 @@ type TTS struct { VoiceSettings SynthesisOptions `json:"voice_settings,omitempty"` // Voice settings are applied only on the given TTS request. } +func (so *SynthesisOptions) Clamp() { + if so.Stability > 1 || so.Stability < 0 { + so.Stability = 0.75 + } + if so.SimilarityBoost > 1 || so.SimilarityBoost < 0 { + so.SimilarityBoost = 0.75 + } +} + type SynthesisOptions struct { Stability float64 `json:"stability"` SimilarityBoost float64 `json:"similarity_boost"` diff --git a/cmd/say/.gitignore b/cmd/say/.gitignore new file mode 100644 index 0000000..72c77cd --- /dev/null +++ b/cmd/say/.gitignore @@ -0,0 +1,2 @@ +*.mp3 +main diff --git a/cmd/say/main.go b/cmd/say/main.go index da29a2c..1c2bd7c 100644 --- a/cmd/say/main.go +++ b/cmd/say/main.go @@ -1,4 +1,27 @@ package main +import ( + "context" + "os" + + "github.com/taigrr/elevenlabs/client" + "github.com/taigrr/elevenlabs/client/types" +) + func main() { + ctx := context.Background() + client := client.New(os.Getenv("XI_API_KEY")) + ids, err := client.GetVoiceIDs(ctx) + if err != nil { + panic(err) + } + saveFile, err := os.Create("sample.mp3") + if err != nil { + panic(err) + } + defer saveFile.Close() + err = client.TTSWriter(ctx, saveFile, "hello, golang", ids[0], types.SynthesisOptions{Stability: 0.75, SimilarityBoost: 0.75}) + if err != nil { + panic(err) + } }