هذه مكتبة عميل 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 ببث الصوت "أثناء إنشائه". في أحد عشر Labs-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% من أساليب واجهة برمجة التطبيقات الخاصة بـ Elevenlabs. أخطط لإضافة عدد قليل من وظائف نوع الأداة المساعدة إذا كانت هناك حاجة أو طلب كافٍ لها.
وفقًا لـ Elevenlabs، لا تزال واجهة برمجة التطبيقات (API) تعتبر تجريبية وقابلة للتغيير ومن المحتمل أن تتغير.
المساهمات هي موضع ترحيب! إذا كانت لديك أي أفكار أو تحسينات أو إصلاحات للأخطاء، فيرجى فتح مشكلة أو إرسال طلب سحب.
تعد مكتبة Python الرسمية الخاصة بـ Elevenlabs ممتازة ويتم تشجيع زملاء Pythonistas على استخدامها (وأيضًا تجربة Go؟)!
هذا مشروع مستقل ولا ينتمي إلى Elevenlabs أو يدعمه. Elevenlabs وعلاماتها التجارية هي ملك لأصحابها. الغرض من هذا المشروع هو توفير مكتبة عميل لتسهيل الوصول إلى واجهة برمجة التطبيقات العامة المقدمة من Elevenlabs ضمن برامج Go. أي استخدام للعلامات التجارية الخاصة بـ Elevenlabs ضمن هذا المشروع هو لأغراض التعريف فقط ولا يعني التأييد أو الرعاية أو الانتساب.
هذا المشروع مرخص بموجب ترخيص MIT.
يتم توفير مكتبة الرموز هذه "كما هي" وبدون أي ضمانات على الإطلاق. استخدم على مسؤوليتك الخاصة. مزيد من التفاصيل في ملف الترخيص.