Ini adalah perpustakaan klien Go untuk platform kloning suara dan sintesis ucapan ElevenLabs. Ini menyediakan antarmuka dasar bagi program Go untuk berinteraksi dengan API ElevenLabs.
go get github.com/haguro/elevenlabs-go
Pastikan untuk mengganti "your-api-key"
di semua contoh dengan kunci API Anda yang sebenarnya. Lihat dokumentasi resmi Elevenlabs API untuk rincian lebih lanjut.
Dokumentasi lengkap perpustakaan ini tersedia di sini.
Menggunakan fungsi NewClient
mengembalikan instance Client
baru yang memungkinkan untuk meneruskan konteks induk, kunci API Anda, dan durasi batas waktu.
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" )
}
Pustaka memiliki klien default yang dapat Anda konfigurasi dan gunakan dengan fungsi proksi yang menggabungkan panggilan metode ke klien default. Klien default memiliki batas waktu default yang disetel ke 30 detik dan dikonfigurasi dengan context.Background()
sebagai konteks induk. Anda hanya perlu menyetel kunci API Anda ke tingkat minimum saat memanfaatkan klien default. Berikut versi contoh di atas yang hanya menggunakan fungsi steno.
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" )
}
Elevenlabs API memungkinkan streaming audio "saat sedang dihasilkan". Di Elevenlabs-go, Anda dapat meneruskan io.Writer
ke metode TextToSpeechStream
tempat streaming akan terus disalin. Perhatikan bahwa Anda perlu menyetel waktu tunggu klien ke nilai yang cukup tinggi untuk memastikan bahwa waktu tunggu permintaan tidak habis di tengah-tengah streaming .
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." )
}
Pada saat penulisan artikel ini (24 Juni 2023), perpustakaan menyediakan binding Go untuk 100% metode API Elevenlabs. Saya berencana untuk menambahkan beberapa fungsi jenis utilitas lagi jika ada kebutuhan atau permintaan yang cukup untuk itu.
Menurut Elevenlabs, API tersebut masih dianggap eksperimental dan dapat serta kemungkinan berubah.
Kontribusi dipersilahkan! Jika Anda mempunyai ide, perbaikan, atau perbaikan bug, silakan buka masalah atau kirimkan permintaan penarikan.
Pustaka Python resmi Elevenlabs sangat bagus dan sesama Pythonista didorong untuk menggunakannya (dan juga mencoba Go?)!
Ini adalah proyek independen dan tidak berafiliasi atau didukung oleh Elevenlabs. Elevenlabs dan merek dagangnya adalah milik dari pemiliknya masing-masing. Tujuan dari proyek ini adalah untuk menyediakan perpustakaan klien untuk memfasilitasi akses ke API publik yang disediakan Elevenlabs dalam program Go. Segala penggunaan merek dagang Elevenlabs dalam proyek ini hanya untuk tujuan identifikasi dan tidak menyiratkan dukungan, sponsor, atau afiliasi.
Proyek ini dilisensikan di bawah Lisensi MIT.
Pustaka kode ini disediakan "apa adanya" dan tanpa jaminan apa pun. Gunakan dengan risiko Anda sendiri. Detail selengkapnya ada di file LISENSI.