이것은 ElevenLabs 음성 복제 및 음성 합성 플랫폼용 Go 클라이언트 라이브러리입니다. Go 프로그램이 ElevenLabs API와 상호 작용할 수 있는 기본 인터페이스를 제공합니다.
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" )
}
Elevenlabs API를 사용하면 "생성되는 동안" 오디오 스트리밍이 가능합니다. Elevenlabs-go에서는 스트림이 계속 복사될 TextToSpeechStream
메서드에 io.Writer
를 전달하려고 합니다. 요청이 스트림 중간에 시간 초과되지 않도록 하려면 클라이언트 시간 초과를 충분히 높은 값으로 설정해야 합니다 .
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." )
}
작성 시점(2023년 6월 24일)을 기준으로 라이브러리는 Elevenlabs의 API 메소드 100%에 대해 Go 바인딩을 제공합니다. 필요하거나 요청이 충분할 경우 유틸리티 유형 기능을 몇 가지 더 추가할 계획입니다.
Elevenlabs에 따르면 API는 여전히 실험적인 것으로 간주되며 변경될 가능성이 높습니다.
기여를 환영합니다! 아이디어, 개선 사항 또는 버그 수정 사항이 있는 경우 문제를 공개하거나 풀 요청을 제출해 주세요.
Elevenlabs의 공식 Python 라이브러리는 훌륭하므로 동료 Pythonista들이 이 라이브러리를 사용하도록 권장됩니다(또한 Go를 시도해 보세요?)!
이것은 독립적인 프로젝트이며 Elevenlabs와 제휴하거나 승인하지 않습니다. Elevenlabs 및 해당 상표는 해당 소유자의 자산입니다. 이 프로젝트의 목적은 Go 프로그램 내에서 Elevenlabs가 제공하는 공개 API에 대한 액세스를 용이하게 하기 위해 클라이언트 라이브러리를 제공하는 것입니다. 이 프로젝트 내에서 Elevenlabs의 상표는 식별 목적으로만 사용되며 보증, 후원 또는 제휴를 의미하지 않습니다.
이 프로젝트는 MIT 라이선스에 따라 라이선스가 부여됩니다.
이 코드 라이브러리는 "있는 그대로" 제공되며 어떠한 보증도 제공되지 않습니다. 자신의 책임하에 사용하십시오. 자세한 내용은 LICENSE 파일을 참조하세요.