Dies ist eine Go-Client-Bibliothek für die Sprachklonungs- und Sprachsyntheseplattform ElevenLabs. Es bietet eine grundlegende Schnittstelle für Go-Programme zur Interaktion mit der ElevenLabs-API.
go get github.com/haguro/elevenlabs-go
Stellen Sie sicher, dass Sie "your-api-key"
in allen Beispielen durch Ihren tatsächlichen API-Schlüssel ersetzen. Weitere Einzelheiten finden Sie in der offiziellen Elevenlabs-API-Dokumentation.
Die vollständige Dokumentation dieser Bibliothek finden Sie hier.
Wenn Sie die Funktion NewClient
verwenden, wird eine neue Client
Instanz zurückgegeben, die die Übergabe eines übergeordneten Kontexts, Ihres API-Schlüssels und einer Zeitüberschreitungsdauer ermöglicht.
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" )
}
Die Bibliothek verfügt über einen Standard-Client, den Sie konfigurieren und mit Proxy-Funktionen verwenden können, die Methodenaufrufe an den Standard-Client umschließen. Der Standard-Client hat ein Standard-Timeout von 30 Sekunden und ist mit context.Background()
als übergeordnetem Kontext konfiguriert. Sie müssen Ihren API-Schlüssel nur auf das Minimum festlegen, wenn Sie den Standard-Client nutzen. Hier ist eine Version des obigen Beispiels, die nur Kurzschriftfunktionen verwendet.
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" )
}
Die Elevenlabs-API ermöglicht das Streamen von Audio, „während es generiert wird“. In Elevenlabs-go möchten Sie einen io.Writer
an die TextToSpeechStream
-Methode übergeben, wohin der Stream kontinuierlich kopiert wird. Beachten Sie, dass Sie das Client-Timeout auf einen ausreichend hohen Wert einstellen müssen, um sicherzustellen, dass die Anfrage nicht mitten im Stream abläuft .
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." )
}
Zum Zeitpunkt des Verfassens dieses Artikels (24. Juni 2023) stellt die Bibliothek Go-Bindungen für 100 % der API-Methoden von Elevenlabs bereit. Ich habe vor, einige weitere Dienstprogrammfunktionen hinzuzufügen, falls Bedarf oder ausreichende Nachfrage dafür besteht.
Laut Elevenlabs gilt die API noch als experimentell und unterliegt und wird sich wahrscheinlich ändern.
Beiträge sind willkommen! Wenn Sie Ideen, Verbesserungen oder Fehlerbehebungen haben, öffnen Sie bitte ein Problem oder senden Sie eine Pull-Anfrage.
Die offizielle Python-Bibliothek von Elevenlabs ist ausgezeichnet und andere Pythonistas werden ermutigt, sie zu verwenden (und auch Go auszuprobieren?)!
Dies ist ein unabhängiges Projekt und steht in keiner Verbindung zu Elevenlabs und wird von Elevenlabs auch nicht unterstützt. Elevenlabs und seine Marken sind Eigentum ihrer jeweiligen Inhaber. Der Zweck dieses Projekts besteht darin, eine Client-Bibliothek bereitzustellen, um den Zugriff auf die öffentliche API von Elevenlabs innerhalb von Go-Programmen zu erleichtern. Jegliche Verwendung der Markenzeichen von Elevenlabs innerhalb dieses Projekts dient ausschließlich Identifikationszwecken und stellt keine Billigung, Förderung oder Zugehörigkeit dar.
Dieses Projekt ist unter der MIT-Lizenz lizenziert.
Diese Codebibliothek wird „wie besehen“ und ohne jegliche Gewährleistung bereitgestellt. Die Nutzung erfolgt auf eigene Gefahr. Weitere Details finden Sie in der LICENSE-Datei.