นี่คือไลบรารีไคลเอนต์ Go สำหรับแพลตฟอร์มการโคลนเสียงและการสังเคราะห์เสียงพูดของ ElevenLabs มีอินเทอร์เฟซพื้นฐานสำหรับโปรแกรม 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 คุณจะต้องส่ง 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 Binding สำหรับวิธี API ของ Elevenlabs 100% ฉันวางแผนที่จะเพิ่มฟังก์ชั่นประเภทยูทิลิตี้อีกสองสามอย่างหากมีความต้องการหรือคำขอที่เพียงพอ
จากข้อมูลของ Elevenlabs นั้น API ยังถือว่าเป็นการทดลองและอาจมีการเปลี่ยนแปลงและมีแนวโน้มที่จะเปลี่ยนแปลง
ยินดีบริจาค! หากคุณมีแนวคิด การปรับปรุง หรือแก้ไขข้อบกพร่อง โปรดเปิดปัญหาหรือส่งคำขอดึงข้อมูล
ห้องสมุด Python อย่างเป็นทางการของ Elevenlabs นั้นยอดเยี่ยมมาก และเพื่อน ๆ ชาว Pythonistas ก็ได้รับการสนับสนุนให้ใช้มัน (และยังให้ Go ไปเลยด้วย ?)!
นี่เป็นโครงการอิสระและไม่มีส่วนเกี่ยวข้องหรือรับรองโดย Elevenlabs Elevenlabs และเครื่องหมายการค้าเป็นทรัพย์สินของเจ้าของที่เกี่ยวข้อง วัตถุประสงค์ของโปรเจ็กต์นี้คือ เพื่อจัดเตรียมไลบรารี่ไคลเอ็นต์เพื่ออำนวยความสะดวกในการเข้าถึง API สาธารณะที่ Elevenlabs มอบให้ภายในโปรแกรม Go การใช้เครื่องหมายการค้าของ Elevenlabs ภายในโครงการนี้มีจุดประสงค์เพื่อการระบุตัวตนเท่านั้น และไม่ได้หมายความถึงการรับรอง การสนับสนุน หรือความเกี่ยวข้อง
โครงการนี้ได้รับอนุญาตภายใต้ใบอนุญาต MIT
ไลบรารีโค้ดนี้มีให้ "ตามสภาพ" และไม่มีการรับประกันใดๆ ใช้ความเสี่ยงของคุณเอง รายละเอียดเพิ่มเติมในไฟล์ LICENSE