Künstliche Intelligenz

ElevenLabs: KI-Sprachsynthese via API nutzen

Text-to-Speech in der KI-Version klingt tatsächlich natürlich!

ElevenLabs bietet ein wunderbares KI-Spielzeug, das keinen Vergleich mit ChatGPT oder DALL-E scheuen muss. Der Service wandelt schlicht Text in Sprache um. Sprachsynthese/TTS ist an sich nichts Neues, aber die Qualität von ElevenLabs durchaus. Die Sprachausgabe hört sich fast durchgehend natürlich an. Damit kann man sich tatsächlich mal eine Webseite, News oder ein paar Mails vorlesen lassen.

Sprachsynthese und Stimmgen-Generator

Bei ElevenLabs findet Ihr im Grunde zwei Werkzeuge: Zum einen die Sprachsynthese, zum anderen einen Stimmen-Generator. Über den Generator könnt Ihr eigene Stimmprofile anlegen: Ihr legt Alter, Geschlecht und Akzent fest, dann wird eine zufällige, einzigartige Stimme erzeugt. Alternativ gibt es auch einige vorgefertigte Profile, die sich einfach so einsetzen lassen.

Die Sprachsynthese könnt Ihr dann auf zwei Arten nutzen: Entweder direkt im Browser, wo ein simples Eingabefeld auf Euch wartet, plus Stimmauswahl und Download. Oder per API, zum Beispiel via Python oder direkt im Terminal mit curl. Standardmäßig bekommt ElevenLabs dabei einen Text und gibt eine Audiodatei aus. Interessanter: Text kann auch direkt als Audiostream ausgegeben werden! Damit könnt Ihr Euch zum Beispiel Webseiten oder RSS Feeds oder Social-Media-Schlagzeilen vorlesen lassen. Oder gelegentliche Vorkommnisse in Logdateien auf die Lautsprecher bekommen. Oder E-Books. Oder eine Sprachausgabe für Spiele zaubern.

Kleine Einschränkung: Die kostenlose Version ist auf rund 12 Minuten, 3 eigene Stimmen und private Nutzung beschränkt. Ab 5 Euro monatlich dürfen die Werke auch kommerziell genutzt werden.

gui von elevenlabs im browser.
TTS im Browser mit MP3-Download

Nutzung per API und curl

Zunächst mal benötigt Ihr einen API-Schlüssel: ElevenLabs macht es einfach, denn in Eurem Profil ist dieser direkt abgelegt - kopiert ihn.

api-schlüssel-dialog.
Schon da, der API-Key

Dann braucht Ihr eine Voice-ID: Welche IDs zur Verfügung stehen, zeigt ebenfalls eine curl-Abfrage:

curl -X 'GET' \
'https://api.elevenlabs.io/v1/voices' \
--header 'accept: application/json' \
--header 'xi-api-key: 123456ABCDEFG' \
| python -m json.tool | grep -b1 myvoice

Über Euren API-Schlüssel bekommt Ihr die Stimmen, die für Euch zur Verfügung stehen. Der curl-Output ist leider ein großer Klumpen JSON-Code, daher die letzte Zeile: python macht die Ausgabe hübsch und grep sucht hier meine selbst angelegte Stimme namens myvoice. Das ist aber natürlich optional. Hier die Ausgabe:

7858-            "voice_id": "ZDFARDJKLÖ1234567890",
7907:            "name": "myvoice",
7939-            "samples": null,

Kopiert hier nun die voice_id der gewünschten Stimme.

Und nun zunächst die Text-nach-Audiodatei-Variante als kleines Bash-Skript ki_audio.sh:

#!/bin/bash

curl -o myaudiofile.mp3 -X 'POST' \
  'https://api.elevenlabs.io/v1/text-to-speech/ZDFARDJKLÖ1234567890' \
  --header 'accept: audio/mpeg' \
  --header 'xi-api-key: 123456ABCDEFG' \
  --header 'Content-Type: application/json' \
  --data '{
    "text": "'"$1"'",
    "voice_settings": {
      "stability": 0,
      "similarity_boost": 0
    }
  }'

Oben in der URL müsst Ihr die Voice-ID eintragen und bei xi-api-key den API-Schlüssel. Der eigentliche Text wird dem Skript übergeben und findet sich hier als $1 wieder. Der Aufruf:

./ki_audio.sh "Hello World."
oder
echo '"Hello World."' | xargs.exe ./ki_audio.sh

xargs sorgt einfach dafür, dass das Skript den echo-Text als Argument bekommt. Das Ergebnis ist dann die MP3-Datei myaudiofile.mp3 (über die Option "-o").

Interessanter ist aber die Stream-Variante, nun als ki_audio_stream.sh:

#!/bin/bash

curl -X 'POST' \
  'https://api.elevenlabs.io/v1/text-to-speech/ZDFARDJKLÖ1234567890/stream' \
  --header 'accept: audio/mpeg' \
  --header 'xi-api-key: 123456ABCDEFG' \
  --header 'Content-Type: application/json' \
  --data '{
    "text": "'"$1"'",
    "voice_settings": {
      "stability": 0,
      "similarity_boost": 0
    }
  }'

Hier wird lediglich auf die Output-Option (-o) verzichtet und stream an die URL gehängt. Nun kann der Terminal natürlich noch nichts mit einem Audiostream anfangen - es muss an einen Streamplayer weitergeleitet werden. Das funktioniert wunderbar mit mpg123:

echo '"wonderful world"' | \
xargs.exe ./ki_audio_stream.sh | \
/d/Downloads/mpg123-1.31.3-x86-64/mpg123.exe -

Der Output wird also einfach nochmals weitergeleitet - hier an mpg123.exe. Der Text wird dann direkt live im Terminal vorgelesen. Oft ist es aber interessanter, Online-Textquellen anzuzapfen. Hier mal ein Aufruf als Inspiration:

curl https://example-files.online-convert.com/document/txt/example.txt | \
head | \
sed ' 1,9d ; s/\(.*\)/""/ ' | \
xargs.exe ./ki_audio_stream.sh | \
/d/Downloads/mpg123-1.31.3-x86-64/mpg123.exe -

Hier besorgt curl eine reine Textdatei, head gibt davon die ersten 10 Zeilen aus, sed löscht die Zeilen 1 bis 9 und setzt die verbleibende Zeile in Anführungszeichen - die sind wichtig, damit das Skript nicht nur das erste Wort als Argument versteht.

Soll einfach heißen: Mit curl bekommt Ihr aus dem Netz so ziemlich alles, dann muss der Content ein wenig aufbereitet werden und kann anschließend an das Skript weitergereicht werden. In diesem Zusammenhang super hilfreich: html2text - wandelt von curl geholte Webseiten in sauberen Text um, der dann wieder für sed, awk & Co. zur Verfügung steht. Die Aufbereitung der Inhalte kann durchaus mal etwas komplizierter werden, aber dafür sind die Möglichkeiten auch gigantisch.

Ihr könntet zum Beispiel relativ problemlos Nachrichten aus Telegram-Chats vorlesen lassen. Wie Ihr damit per API interagiert, zeigen wir hier.

Mehr zum Thema KI.

Mirco Lang

Freier Journalist, Exil-Sauerländer, (ziemlich alter) Skateboarder, Dipl.-Inf.-Wirt, Einzelhandelskaufmann, Open-Source-Nerd, Checkmk-Handbuchschreiber. Ex-Saturn'ler, Ex-Data-Becker'ler, Ex-BSI'ler. Computer-Erstkontakt: ca. 1982 - der C64 des großen Bruders eines Freunds. Wenn Ihr hier mehr über Open Source, Linux und Bastelkram lesen und Tutonaut unterstützen möchtet: Über Kaffeesponsoring via Paypal.freue ich mich immer. Schon mal im Voraus: Danke! Nicht verpassen: cli.help und VoltAmpereWatt.de. Neu: Mastodon

4 Kommentare

    1. Im Grunde recht einfach, aber das relativ oben war nicht umsonst kursiv ;)

      Im oben erwähnten Artikel zur Telegram-API wird im ersten Teil gezeigt, wie man Nachrichten per API an Telegram sendet, im zweiten, wie man welche abruft. Und die abgerufenen Nachrichten könnten dann wie oben gezeigt an ElevenLabs weitergereicht und zurück gestreamt werden. Sobald der Bot läuft, sollte es mit einem Dutzend Zeilen Skript erledigt sein. Als Minimallösung natürlich.

      Vielleicht hat aber auch einer der vielen API-Verbinder (IFTTT & Co.) schon was Fertiges im Angebot, auch irgendwelche Bots oder Apps würde ich nicht ausschließen. Aber Selbstgemachtes ist ja auch schön.

  1. Guten Morgen, und wie bringe ich dem Dingen Jetzt noch deutsch bei? So ist das völlig uninteressant und nicht zu gebrauchen.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Schaltfläche "Zurück zum Anfang"