Hoppa till navigering

Streama text till tal

Den här guiden visar hur du streamar text till tal och valfritt laddar upp ljud till AWS S3.

Den här guiden beskriver tre sätt: att generera tal som en fil, strömma ljudsvaret direkt och, om du vill, ladda upp genererat ljud till en AWS S3-bucket för delning via en signerad URL.

Den här guiden förutsätter att du har konfigurerat din API-nyckel och SDK. Slutför snabbstartsguiden först om du inte redan har gjort det. Det valfria avsnittet om S3-uppladdning kräver också ett AWS-konto med åtkomst till S3.

Undrar du varför strömning fungerar som den gör? Förstå ljudströmning förklarar protokollet, buffring och avvägningar kring fördröjning på djupet.

Konvertera text till tal (fil)

För att konvertera text till tal och spara det som en fil använder vi convert-metoden i ElevenLabs SDK och sparar den sedan lokalt som en .mp3-fil.

import os
import uuid
from dotenv import load_dotenv
from elevenlabs import VoiceSettings
from elevenlabs.client import ElevenLabs
load_dotenv()
ELEVENLABS_API_KEY = os.getenv("ELEVENLABS_API_KEY")
elevenlabs = ElevenLabs(
api_key=ELEVENLABS_API_KEY,
)
def text_to_speech_file(text: str) -> str:
# Calling the text_to_speech conversion API with detailed parameters
response = elevenlabs.text_to_speech.convert(
voice_id="pNInz6obpgDQGcFmaJgB", # Adam pre-made voice
output_format="mp3_22050_32",
text=text,
model_id="eleven_flash_v2_5", # use the flash model for low latency
# Optional voice settings that allow you to customize the output
voice_settings=VoiceSettings(
stability=0.0,
similarity_boost=1.0,
style=0.0,
use_speaker_boost=True,
speed=1.0,
),
)
# uncomment the line below to play the audio back
# play(response)
# Generating a unique file name for the output MP3 file
save_file_path = f"{uuid.uuid4()}.mp3"
# Writing the audio to a file
with open(save_file_path, "wb") as f:
for chunk in response:
if chunk:
f.write(chunk)
print(f"{save_file_path}: A new audio file was saved successfully!")
# Return the path of the saved audio file
return save_file_path

Du kan sedan köra funktionen med:

text_to_speech_file("Hello World")

Konvertera text till tal (strömning)

Om du föredrar att strömma ljudet direkt utan att spara det som en fil kan du använda vår strömningsfunktion.

import os
from typing import IO
from io import BytesIO
from dotenv import load_dotenv
from elevenlabs import VoiceSettings
from elevenlabs.client import ElevenLabs
load_dotenv()
ELEVENLABS_API_KEY = os.getenv("ELEVENLABS_API_KEY")
elevenlabs = ElevenLabs(
api_key=ELEVENLABS_API_KEY,
)
def text_to_speech_stream(text: str) -> IO[bytes]:
# Perform the text-to-speech conversion
response = elevenlabs.text_to_speech.stream(
voice_id="pNInz6obpgDQGcFmaJgB", # Adam pre-made voice
output_format="mp3_22050_32",
text=text,
model_id="eleven_multilingual_v2",
# Optional voice settings that allow you to customize the output
voice_settings=VoiceSettings(
stability=0.0,
similarity_boost=1.0,
style=0.0,
use_speaker_boost=True,
speed=1.0,
),
)
# Create a BytesIO object to hold the audio data in memory
audio_stream = BytesIO()
# Write each chunk of audio data to the stream
for chunk in response:
if chunk:
audio_stream.write(chunk)
# Reset stream position to the beginning
audio_stream.seek(0)
# Return the stream for further use
return audio_stream

Du kan sedan köra funktionen med:

text_to_speech_stream("This is James")

Bonus – Ladda upp till AWS S3 och få en säker delningslänk

När dina ljuddata har skapats som antingen en fil eller en ström kanske du vill dela dem med dina användare. Ett sätt att göra det är att ladda upp dem till en AWS S3-bucket och generera en säker delningslänk.

För att ladda upp data till S3 behöver du lägga till ditt AWS-åtkomstnyckel-ID, din hemliga åtkomstnyckel och AWS-regionens namn i din .env-fil. Följ de här stegen för att hitta autentiseringsuppgifterna:

  1. Logga in på AWS Management Console: Gå till AWS startsida och logga in med ditt konto.
Inloggning i AWS Console
  1. Öppna IAM-instrumentpanelen (Identity and Access Management): Du hittar IAM under “Security, Identity, & Compliance” i tjänstemenyn. IAM-instrumentpanelen hanterar åtkomst till dina AWS-tjänster på ett säkert sätt.
AWS IAM-instrumentpanel
  1. Skapa en ny användare (vid behov): Välj “Users” och sedan “Add user” på IAM-instrumentpanelen. Ange ett användarnamn.
Lägg till AWS IAM-användare
  1. Ange behörigheterna: koppla policyer direkt till användaren utifrån den åtkomstnivå du vill ge. För S3-uppladdningar kan du använda policyn AmazonS3FullAccess. Bästa praxis är dock att tillämpa minsta möjliga behörighet, alltså de minsta behörigheter som krävs för att utföra en uppgift. Du kanske vill skapa en anpassad policy som endast tillåter nödvändiga åtgärder för din S3-bucket.
Ange behörighet för AWS IAM-användare
  1. Granska och skapa användaren: Granska dina inställningar och skapa användaren. När den har skapats får du ett åtkomstnyckel-ID och en hemlig åtkomstnyckel. Ladda ner och spara dessa autentiseringsuppgifter säkert; den hemliga åtkomstnyckeln kan inte hämtas igen efter det här steget.
AWS hemliga åtkomstnyckel
  1. Hämta AWS-regionens namn: t.ex. us-east-1
AWS-regionens namn

Om du inte har en AWS S3-bucket måste du skapa en genom att följa de här stegen:

  1. Öppna S3-instrumentpanelen: Du hittar S3 under “Storage” i tjänstemenyn.
AWS S3-instrumentpanel
  1. Skapa en ny bucket: Klicka på knappen “Create bucket” på S3-instrumentpanelen.
Klicka på knappen Create Bucket
  1. Ange ett bucket-namn och klicka på knappen “Create bucket”. Du kan låta de övriga bucket-alternativen vara standard. Den nyligen tillagda bucketen visas i listan.
Ange ett nytt S3-bucket-namn
S3-bucket-lista

Installera boto3 för att interagera med AWS-tjänster med pip och npm.

pip install boto3

Lägg sedan till miljövariablerna i .env-filen så här:

AWS_ACCESS_KEY_ID=your_aws_access_key_id_here
AWS_SECRET_ACCESS_KEY=your_aws_secret_access_key_here
AWS_REGION_NAME=your_aws_region_name_here
AWS_S3_BUCKET_NAME=your_s3_bucket_name_here

Lägg till följande funktioner för att ladda upp ljudströmmen till S3 och generera en signerad URL.

import os
import boto3
import uuid
AWS_ACCESS_KEY_ID = os.getenv("AWS_ACCESS_KEY_ID")
AWS_SECRET_ACCESS_KEY = os.getenv("AWS_SECRET_ACCESS_KEY")
AWS_REGION_NAME = os.getenv("AWS_REGION_NAME")
AWS_S3_BUCKET_NAME = os.getenv("AWS_S3_BUCKET_NAME")
session = boto3.Session(
aws_access_key_id=AWS_ACCESS_KEY_ID,
aws_secret_access_key=AWS_SECRET_ACCESS_KEY,
region_name=AWS_REGION_NAME,
)
s3 = session.client("s3")
def generate_presigned_url(s3_file_name: str) -> str:
signed_url = s3.generate_presigned_url(
"get_object",
Params={"Bucket": AWS_S3_BUCKET_NAME, "Key": s3_file_name},
ExpiresIn=3600,
) # URL expires in 1 hour
return signed_url
def upload_audiostream_to_s3(audio_stream) -> str:
s3_file_name = f"{uuid.uuid4()}.mp3" # Generates a unique file name using UUID
s3.upload_fileobj(audio_stream, AWS_S3_BUCKET_NAME, s3_file_name)
return s3_file_name

Du kan sedan anropa uppladdningsfunktionen med ljudströmmen från texten.

s3_file_name = upload_audiostream_to_s3(audio_stream)

När du har laddat upp ljudfilen till S3 genererar du en signerad URL för att dela åtkomst till filen. Den här URL:en är tidsbegränsad, vilket innebär att den upphör att gälla efter en viss tid och därför är säker för tillfällig delning.

Du kan nu generera en URL från en fil med:

signed_url = generate_presigned_url(s3_file_name)
print(f"Signed URL to access the file: {signed_url}")

Om du vill använda filen flera gånger bör du lagra S3-filsökvägen i din databas och sedan generera den signerade URL:en på nytt varje gång du behöver den, i stället för att spara den signerade URL:en direkt eftersom den upphör att gälla.

För att sätta ihop allt kan du använda följande skript:

import os
from dotenv import load_dotenv
load_dotenv()
from text_to_speech_stream import text_to_speech_stream
from s3_uploader import upload_audiostream_to_s3, generate_presigned_url
def main():
text = "This is James"
audio_stream = text_to_speech_stream(text)
s3_file_name = upload_audiostream_to_s3(audio_stream)
signed_url = generate_presigned_url(s3_file_name)
print(f"Signed URL to access the file: {signed_url}")
if __name__ == "__main__":
main()

Slutsats

Du vet nu hur du konverterar text till tal och genererar en signerad URL för att dela ljudfilen. Funktionen ger många möjligheter att skapa och dela innehåll dynamiskt.

Här är några exempel på vad du kan bygga med detta.

  1. Utbildningspodcastar: Skapa personligt utbildningsinnehåll som elever kan komma åt vid behov. Lärare kan konvertera sina lektioner till ljudformat, ladda upp dem till S3 och dela länkarna med eleverna för en mer engagerande lärandeupplevelse utanför den traditionella klassrumsmiljön.

  2. Tillgänglighetsfunktioner för webbplatser: Förbättra webbplatsers tillgänglighet genom att erbjuda textinnehåll i ljudformat. Det kan göra information på webbplatser mer tillgänglig för personer med synnedsättning eller för dem som föredrar att lära sig genom att lyssna.

  3. Automatiska kundsupportmeddelanden: Skapa automatiska och personliga ljudmeddelanden för kundsupport, till exempel vanliga frågor eller orderuppdateringar. Det kan ge en mer engagerande kundupplevelse jämfört med traditionella e-postmeddelanden i textformat.

  4. Ljudböcker och berättarröst: Konvertera hela böcker eller korta berättelser till ljudformat och ge publiken ett nytt sätt att ta del av litteratur. Författare och förlag kan bredda sitt innehållsutbud och nå personer som hellre lyssnar än läser.

  5. Språkinlärningsverktyg: Utveckla hjälpmedel för språkinlärning som ger elever ljudlektioner och övningar. Det gör det möjligt att öva uttal och hörförståelse på ett målinriktat sätt.

Nästa steg