elevenlabs
Unofficial elevenlabs.io (11.ai) voice synthesis client
This library is not affiliated with, nor associated with ElevenLabs in any way.
ElevenLabs' official api documentation, upon which this client has been derived, can be found here.
Purpose
This go client provides an easy interface to create synthesized voices and make TTS (text-to-speech) requests to elevenlabs.io
As a prerequisite, you must already have an account with elevenlabs.io. After creating your account, you can get you API key from here.
Test Program
To test out an example say program, run:
go install github.com/taigrr/elevenlabs/cmd/say@latest
Set the XI_API_KEY environment variable, and pipe it some text to give it a whirl!
Example Code
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. I've opted to go with faiface's beep package, but you can also save the file to an mp3 on-disk.
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
}