Esta es una biblioteca cliente Go para la plataforma de síntesis de voz y clonación de voz de ElevenLabs. Proporciona una interfaz básica para que los programas Go interactúen con la API de ElevenLabs.
go get github.com/haguro/elevenlabs-go
Asegúrese de reemplazar "your-api-key"
en todos los ejemplos con su clave API real. Consulta la documentación oficial de la API de Elevenlabs para obtener más detalles.
La documentación completa de esta biblioteca está disponible aquí.
El uso de la función NewClient
devuelve una nueva instancia Client
que permitirá pasar un contexto principal, su clave API y una duración de tiempo de espera.
package main
import (
"context"
"log"
"os"
"time"
"github.com/haguro/elevenlabs-go"
)
func main () {
// Create a new client
client := elevenlabs . NewClient ( context . Background (), "your-api-key" , 30 * time . Second )
// Create a TextToSpeechRequest
ttsReq := elevenlabs. TextToSpeechRequest {
Text : "Hello, world! My name is Adam, nice to meet you!" ,
ModelID : "eleven_monolingual_v1" ,
}
// Call the TextToSpeech method on the client, using the "Adam"'s voice ID.
audio , err := client . TextToSpeech ( "pNInz6obpgDQGcFmaJgB" , ttsReq )
if err != nil {
log . Fatal ( err )
}
// Write the audio file bytes to disk
if err := os . WriteFile ( "adam.mp3" , audio , 0644 ); err != nil {
log . Fatal ( err )
}
log . Println ( "Successfully generated audio file" )
}
La biblioteca tiene un cliente predeterminado que puede configurar y usar con funciones de proxy que envuelven llamadas a métodos al cliente predeterminado. El cliente predeterminado tiene un tiempo de espera predeterminado establecido en 30 segundos y está configurado con context.Background()
como contexto principal. Solo necesitará configurar su clave API al mínimo cuando aproveche el cliente predeterminado. Aquí está una versión del ejemplo anterior que usa funciones abreviadas únicamente.
package main
import (
"log"
"os"
"time"
el "github.com/haguro/elevenlabs-go"
)
func main () {
// Set your API key
el . SetAPIKey ( "your-api-key" )
// Set a different timeout (optional)
el . SetTimeout ( 15 * time . Second )
// Call the TextToSpeech method on the client, using the "Adam"'s voice ID.
audio , err := el . TextToSpeech ( "pNInz6obpgDQGcFmaJgB" , el. TextToSpeechRequest {
Text : "Hello, world! My name is Adam, nice to meet you!" ,
ModelID : "eleven_monolingual_v1" ,
})
if err != nil {
log . Fatal ( err )
}
// Write the audio file bytes to disk
if err := os . WriteFile ( "adam.mp3" , audio , 0644 ); err != nil {
log . Fatal ( err )
}
log . Println ( "Successfully generated audio file" )
}
La API de Elevenlabs permite la transmisión de audio "a medida que se genera". En elevenlabs-go, querrás pasar un io.Writer
al método TextToSpeechStream
donde se copiará continuamente la secuencia. Tenga en cuenta que deberá configurar el tiempo de espera del cliente en un valor lo suficientemente alto para garantizar que la solicitud no expire a mitad de camino .
package main
import (
"context"
"log"
"os/exec"
"time"
"github.com/haguro/elevenlabs-go"
)
func main () {
message := `The concept of "flushing" typically applies to I/O buffers in many programming
languages, which store data temporarily in memory before writing it to a more permanent location
like a file or a network connection. Flushing the buffer means writing all the buffered data
immediately, even if the buffer isn't full.`
// Set your API key
elevenlabs . SetAPIKey ( "your-api-key" )
// Set a large enough timeout to ensure the stream is not interrupted.
elevenlabs . SetTimeout ( 1 * time . Minute )
// We'll use mpv to play the audio from the stream piped to standard input
cmd := exec . CommandContext ( context . Background (), "mpv" , "--no-cache" , "--no-terminal" , "--" , "fd://0" )
// Get a pipe connected to the mpv's standard input
pipe , err := cmd . StdinPipe ()
if err != nil {
log . Fatal ( err )
}
// Attempt to run the command in a separate process
if err := cmd . Start (); err != nil {
log . Fatal ( err )
}
// Stream the audio to the pipe connected to mpv's standard input
if err := elevenlabs . TextToSpeechStream (
pipe ,
"pNInz6obpgDQGcFmaJgB" ,
elevenlabs. TextToSpeechRequest {
Text : message ,
ModelID : "eleven_multilingual_v1" ,
}); err != nil {
log . Fatalf ( "Got %T error: %q n " , err , err )
}
// Close the pipe when all stream has been copied to the pipe
if err := pipe . Close (); err != nil {
log . Fatalf ( "Could not close pipe: %s" , err )
}
log . Print ( "Streaming finished." )
// Wait for mpv to exit. With the pipe closed, it will do that as
// soon as it finishes playing
if err := cmd . Wait (); err != nil {
log . Fatal ( err )
}
log . Print ( "All done." )
}
Al momento de escribir este artículo (24 de junio de 2023), la biblioteca proporciona enlaces Go para el 100% de los métodos API de Elevenlabs. Planeo agregar algunas funciones más de tipo utilidad en caso de que haya alguna necesidad o solicitud suficiente para ellas.
Según Elevenlabs, la API todavía se considera experimental y está sujeta a cambios y es probable que cambien.
¡Las contribuciones son bienvenidas! Si tiene alguna idea, mejora o corrección de errores, abra un problema o envíe una solicitud de extracción.
La biblioteca oficial de Python de Elevenlabs es excelente y se anima a los compañeros Pythonistas a usarla (¡y también a probar Go, una oportunidad?).
Este es un proyecto independiente y no está afiliado ni respaldado por Elevenlabs. Elevenlabs y sus marcas comerciales son propiedad de sus respectivos dueños. El propósito de este proyecto es proporcionar una biblioteca cliente para facilitar el acceso a la API pública proporcionada por Elevenlabs dentro de los programas Go. Cualquier uso de las marcas comerciales de Elevenlabs dentro de este proyecto es solo para fines de identificación y no implica respaldo, patrocinio o afiliación.
Este proyecto está bajo la licencia MIT.
Esta biblioteca de códigos se proporciona "tal cual" y sin garantía alguna. Úselo bajo su propio riesgo. Más detalles en la ficha LICENCIA.