htgo-tts for Go
Szövegből beszéd Go-ban: a programod felolvashatja a szöveget, de a hangot fájlba is mentheti, vagy streamként továbbadhatja. A hangot cserélhető motor adja: az ingyenes, API-kulcs nélküli Google Translate, az OpenAI, az Azure, a Google Cloud és az ElevenLabs prémium hangjai, vagy offline a gép saját beszédprogramja.
$ go get github.com/hegedustibor/htgo-tts/v2
import (
htgotts "github.com/hegedustibor/htgo-tts/v2"
"github.com/hegedustibor/htgo-tts/v2/engine/google"
"github.com/hegedustibor/htgo-tts/v2/voices"
)
tts, err := htgotts.New(
google.New(voices.Hungarian),
htgotts.WithFolder("audio"), // a sentence is downloaded only once
)
if err != nil {
log.Fatal(err)
}
ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second)
defer cancel()
err = tts.Speak(ctx, "Szia, világ!")
- Legújabb verzió
- v2.1.0
- 2026. október 20.
- Követelmények
- Go 1.25+
- cgo nélkül fordul
- Licenc
- MIT
- üzleti célra is szabadon
- Csillagok
- 219
- GitHub, összesen
Mire jó?
Hang a Go-programodnak, a motort te választod
Indulj ingyen, és válts prémium vagy offline hangra, amikor kell. A programod többi része ugyanaz marad.
-
Ingyenes indulás, 60 nyelven
A Google Translate-motorhoz nem kell API-kulcs, és 60 nyelven beszél, köztük magyarul. Kérésre lassabban, tagoltabban is felolvas.
Így működik:
google.New(voices.Hungarian) -
Prémium hang egy sor cseréjével
Az OpenAI, az Azure Speech, a Google Cloud és az ElevenLabs motorjánál hangot és tempót, motortól függően hangmagasságot vagy beszédstílust is választhatsz. A gpt-4o-mini-tts modellnek szóban is leírhatod, hogyan beszéljen.
Így működik:
openai.WithVoice(openai.VoiceNova) -
Offline is megszólal
A command motor a gépre telepített beszédprogramot futtatja, például a macOS say parancsát, az espeak-ng-t vagy a pipert, így hálózat és API-kulcs nélkül is beszél.
Így működik:
command.Say("Samantha") -
Saját motor három metódussal
Motor lehet bármely típus, amely megvalósítja a Synthesize, a Format és a Fingerprint metódust, így saját beszédszerver is beköthető, ugyanazzal a gyorsítótárral és lejátszással.
Így működik:
engine.Engine -
Lejátszás külső program nélkül is
Az alapértelmezett mplayer és az ffplay mellett a beépített lejátszó a programon belül szólaltatja meg az MP3-at. Ha a hangot csak menti vagy továbbadja a programod, lejátszó sem kell hozzá.
Így működik:
native.New() -
Gyorsítótár, ami nem romlik el
A gyorsítótár-mappában a hang a motor beállításai és a szöveg alapján kap fájlnevet, így ugyanaz a mondat más hangon külön fájlba kerül. Félbeszakadt letöltés vagy hibaoldal sosem marad hangfájlként.
Így működik:
htgotts.WithFolder("audio")
Hat motor, egy felület:
-
Google Translate
engine/googleIngyenes, nem hivatalos végponton -
OpenAI
engine/openaiKompatibilis szerverrel és Azure OpenAI-jal is -
Azure Speech
engine/azureNeurális hangok, beszédstílusok -
Google Cloud
engine/googlecloudWaveNet-, Neural2- és Studio-hangok -
ElevenLabs
engine/elevenlabsSaját, klónozott és tervezett hangok -
Saját gép
engine/commandsay, espeak-ng, piper vagy bármely program
Így működik
A szöveg útja a hangszóróig
-
1
Hívás
Felolvasás, mentés, memória vagy stream: egyetlen hívás, időkorláttal vagy megszakítással.
tts.Speak(ctx, text) -
2
Gyorsítótár
Gyorsítótár-mappával a már elhangzott szöveg hangja fájlból jön, a motor meg sem szólal.
hu_<md5>.mp3 -
3
Szintézis
A motor a szolgáltatás korlátja szerint, mondat- és tagmondathatáron darabolja a szöveget, és darabonként kéri le a hangot.
Synthesize(ctx, text) -
4
Stream
A darabok hangja egymás után folyik tovább, így a lejátszás már az első darabnál elindul.
io.ReadCloser -
5
Hang
Megszólal a lejátszón, vagy fájlként, memóriában, HTTP-válaszban megy tovább.
player.Player
A hibák típusosak: az errors.Is és az errors.As szétválasztja az üres szöveget, a hiányzó lejátszót, a beszédszolgáltatás váratlan válaszát (*engine.HTTPError) és a lejárt időkorlátot.
Kódpéldák
Néhány sor, és megszólal
e := openai.New(
openai.WithModel(openai.ModelGPT4oMiniTTS),
openai.WithVoice(openai.VoiceNova),
openai.WithInstructions("Speak in a calm, friendly tone."),
) // the API key comes from OPENAI_API_KEY
tts, err := htgotts.New(e)
if err != nil {
log.Fatal(err)
}
err = tts.Speak(ctx, "Your order has been shipped.")
Minőség
Tesztelve, verziózva, dokumentálva
Kompatibilitás
Minden változtatás után mind a két párosításon lefut a tesztcsomag (GitHub Actions).
| Go | Linux | macOS |
|---|---|---|
| 1.25 |
Amire számíthatsz
- 193 automatizált teszt (go test)
- A tesztek hálózat, hangkártya és API-kulcs nélkül, race detectorral futnak
-
gofmt,go vetésstaticcheckminden változásnál - Futtatható példaprogram minden motorhoz
- MIT-licenc: üzleti projektben is szabadon használható
Verziótörténet
Teljes CHANGELOG (új lapon nyílik)-
v2.1.0
Négy új motor: Azure Speech, Google Cloud Text-to-Speech, ElevenLabs és a gépen futó beszédprogram (say, espeak-ng, piper) offline használatra; a 2.0.0 API-ja nem változott.
-
v2.0.0
Újraírás új importútvonalon és Go 1.25-tel: cserélhető motor (Google Translate, OpenAI), időkorlát és megszakítás minden hívásban, kimenet memóriába, streambe vagy fájlba, opcionális gyorsítótár és cgo nélküli natív lejátszó.
-
v1.6
A memóriába kért hang hosszabb szövegnél darabolva készül; a v1 API utolsó kiadása.
-
v1.5
Letöltés proxyn keresztül.
-
v1.4
Natív MP3-lejátszó, külső program nélkül.
Hegedűs Tibor 2017 decemberében indította a csomagot, az első címkézett kiadás 2020. június 6-án jelent meg, eddig összesen 9 kiadás készült. A v1 a v1.6.0 címkéről továbbra is telepíthető, a váltást leírja a MIGRATION.md (új lapon nyílik)
Élesben
A Go-közösségben, 2017 óta
A pkg.go.dev több tucat nyilvános Go-csomagot ismer, amely a htgo-tts-t importálja. A v2 a felhasználók visszajelzéseiből készült: a CHANGELOG 15 GitHub-issue-ra hivatkozik, a hosszú szövegtől a hangválasztáson át a Dockerben való fordításig.
Az importálók a pkg.go.dev-en (új lapon nyílik)</Hang>
Felolvasó vagy hangos értesítő kellene a rendszeretekbe?
Beépítjük: felolvasás, hangos értesítések vagy akadálymentes hangkimenet, a feladathoz illő hangszolgáltatással, a ti rendszeretekbe.
Beszéljünk a projektedrőlNem szükséges kész specifikáció. Elég, ha leírod, mit szeretnétek megoldani.
Van egy jó ötleted?
Írd meg pár sorban, és jelentkezünk. Egy személyes vagy online találkozón közösen megnézzük, hogyan lesz belőle működő megoldás.
Ügyfeleink mondták rólunk
Büszkék vagyunk arra, hogy ügyfeleink hosszú távon is elégedettek a közös munkával. Íme néhány visszajelzés, ami igazán számít.
5,0 átlag az 5-ből, 8 Google-értékelés- Megbízható partner Valódi eredmények, hosszú távú együttműködések
- Szakértő csapat Komplex projektek, átlátható folyamatok
- Ügyfélközpontú szemlélet Mindig a közös célokra fókuszálunk
Az alábbi vélemények ügyfeleinktől származó, valós visszajelzések. Ez csak egy kis ízelítő, a teljes listát Google-értékeléseinknél találod.