これは、イレブンラボの音声クローン作成および音声合成プラットフォーム用の Go クライアント ライブラリです。 Go プログラムが Celebrities API と対話するための基本的なインターフェイスを提供します。
go get github.com/haguro/elevenlabs-go
すべての例の"your-api-key"
実際の API キーに置き換えてください。詳細については、イレブンラボの公式 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 では、ストリームが継続的にコピーされる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 日) では、このライブラリは Celebrities の API メソッドの 100% に Go バインディングを提供しています。必要または十分なリクエストがあれば、ユーティリティ タイプの関数をさらにいくつか追加する予定です。
イレブンラボによると、この API はまだ実験段階であり、変更される可能性があり、変更される可能性が高いとのことです。
貢献は大歓迎です!アイデア、改善、バグ修正がある場合は、問題を開くか、プル リクエストを送信してください。
イレブンラボの公式 Python ライブラリは優れているので、Pythonista 仲間はそれを使用することをお勧めします (Go も試してみませんか?)。
これは独立したプロジェクトであり、イレブンラボと提携または承認されていません。イレブンラボとその商標は、それぞれの所有者の財産です。このプロジェクトの目的は、Go プログラム内で イレブンラボが提供するパブリック API へのアクセスを容易にするクライアント ライブラリを提供することです。このプロジェクト内での イレブンラボの商標の使用は、識別のみを目的としており、承認、後援、または提携を意味するものではありません。
このプロジェクトは MIT ライセンスに基づいてライセンスされています。
このコード ライブラリは「現状のまま」提供され、いかなる保証もありません。ご自身の責任でご使用ください。詳細については、LICENSE ファイルを参照してください。