2023-04-18 22:23:03 -07:00
2023-04-18 13:18:21 -07:00
2023-04-18 18:52:05 -07:00
2023-04-18 22:16:27 -07:00
2023-04-18 22:09:25 -07:00
2023-04-18 22:09:25 -07:00
2023-04-18 22:23:03 -07:00
2023-04-18 22:23:03 -07:00

elevenlabs

GoDoc Go Report Card 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.

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
}
Languages
Go 100%