Это клиентская библиотека Go для платформы клонирования и синтеза речи ElevenLabs. Он предоставляет базовый интерфейс для программ Go для взаимодействия с API ElevenLabs.
go get github.com/haguro/elevenlabs-go
Обязательно замените "your-api-key"
во всех примерах своим фактическим ключом API. Дополнительную информацию можно найти в официальной документации Elevenlabs API.
Полная документация этой библиотеки доступна здесь.
Использование функции NewClient
возвращает новый экземпляр Client
, который позволит передать родительский контекст, ваш ключ API и продолжительность тайм-аута.
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" )
}
В библиотеке есть клиент по умолчанию, который вы можете настроить и использовать с прокси-функциями, которые переносят вызовы методов в клиент по умолчанию. Клиент по умолчанию имеет тайм-аут по умолчанию, равный 30 секундам, и настраивается с помощью context.Background()
в качестве родительского контекста. Вам нужно будет установить минимальный ключ API только при использовании клиента по умолчанию. Вот версия приведенного выше примера, использующая только сокращенные функции.
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" )
}
API Elevenlabs позволяет осуществлять потоковую передачу аудио «по мере его создания». В одиннадцатилабах-go вам понадобится передать io.Writer
в метод TextToSpeechStream
, куда будет непрерывно копироваться поток. Обратите внимание, что вам нужно будет установить для тайм-аута клиента достаточно большое значение, чтобы гарантировать, что запрос не истечет в середине потока .
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." )
}
На момент написания статьи (24 июня 2023 г.) библиотека предоставляет привязки Go для 100% методов API Elevenlabs. Я планирую добавить еще несколько функций служебного типа, если возникнет необходимость или достаточный запрос на них.
По данным Elevenlabs, API по-прежнему считается экспериментальным и может быть изменен.
Вклады приветствуются! Если у вас есть какие-либо идеи, улучшения или исправления ошибок, откройте проблему или отправьте запрос на включение.
Официальная библиотека Python от Elevenlabs великолепна, и всем питонистам рекомендуется ее использовать (а также попробовать Go?)!
Это независимый проект, не связанный с Elevenlabs и не одобренный им. Elevenlabs и ее товарные знаки являются собственностью соответствующих владельцев. Цель этого проекта — предоставить клиентскую библиотеку для облегчения доступа к общедоступному API, предоставляемому Elevenlabs, в программах Go. Любое использование товарных знаков Elevenlabs в рамках этого проекта предназначено только для целей идентификации и не подразумевает одобрения, спонсорства или аффилированности.
Этот проект лицензируется по лицензии MIT.
Эта библиотека кода предоставляется «как есть» и без каких-либо гарантий. Используйте на свой страх и риск. Более подробная информация в файле LICENSE.