From 8a27f7df64051e77baae6bb95480ec35b32eb9cf Mon Sep 17 00:00:00 2001 From: Tai Groot Date: Tue, 18 Apr 2023 22:19:04 -0700 Subject: [PATCH] add example usage to readme --- README.md | 51 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) diff --git a/README.md b/README.md index 40784be..b6801d3 100644 --- a/README.md +++ b/README.md @@ -16,3 +16,54 @@ After creating your account, you can get you API key [from here](https://help.el To use this library, create a new client and send a TTS request to a voice. +The following code block illustrates how one might replicate the say/espeak +command, using the streaming endpoint. +```go +package main + +import ( + "bufio" + "context" + "io" + "log" + "os" + "time" + + "github.com/faiface/beep" + "github.com/faiface/beep/mp3" + "github.com/faiface/beep/speaker" + + "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) + } + pipeReader, pipeWriter := io.Pipe() + reader := bufio.NewReader(os.Stdin) + text, _ := reader.ReadString('\n') + go func() { + err = client.TTSStream(ctx, pipeWriter, text, ids[0], types.SynthesisOptions{Stability: 0.75, SimilarityBoost: 0.75}) + if err != nil { + panic(err) + } + pipeWriter.Close() + }() + streamer, format, err := mp3.Decode(pipeReader) + if err != nil { + log.Fatal(err) + } + defer streamer.Close() + speaker.Init(format.SampleRate, format.SampleRate.N(time.Second/10)) + done := make(chan bool) + speaker.Play(beep.Seq(streamer, beep.Callback(func() { + done <- true + }))) + <-done +} +```