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 metoder: att generera tal som en fil, att streama ljudsvaret direkt och att valfritt 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 snabbstarten 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 streaming fungerar som den gör? Så fungerar ljud- streaming förklarar protokollet, buffring och avvägningar kring latens på djupet.

Omvandla text till tal (fil)

För att omvandla text till tal och spara det som en fil använder vi metoden convert i ElevenLabs SDK och sparar det 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")

Omvandla text till tal (streaming)

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

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 hämta 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 ä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 dessa steg 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. Ställ in behörigheter: 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 ge minsta möjliga behörighet, alltså de minimala 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 i din S3-bucket.
Ställ in behörighet för AWS IAM-användare
  1. Granska och skapa användaren: Granska dina inställningar och skapa användaren. När användaren har skapats får du ett åtkomstnyckel-ID och en hemlig åtkomstnyckel. Se till att ladda ner och spara dessa uppgifter på ett säkert sätt; den hemliga åtkomstnyckeln kan inte hämtas igen efter detta steg.
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 behöver du skapa en genom att följa dessa steg:

  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 andra alternativen för bucket vara standardinställda. Den nyligen tillagda bucketen visas i listan.
Ange ett nytt S3-bucket-namn
S3-bucketlista

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 omvandlar text till tal och genererar en signerad URL för att dela ljudfilen. Funktionen öppnar 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 personanpassat utbildningsinnehåll som elever kan komma åt vid behov. Lärare kan omvandla sina lektioner till ljudformat, ladda upp dem till S3 och dela länkarna med eleverna för en mer engagerande inlärningsupplevelse utanför det traditionella klassrummet.

  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 auditiv inlärning.

  3. Automatiserade kundsupportmeddelanden: Skapa automatiserade och personanpassade 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: Omvandla hela böcker eller noveller till ljudformat och ge publiken ett nytt sätt att ta del av litteratur. Författare och förlag kan bredda sitt innehållserbjudande och nå personer som föredrar att lyssna framför att läsa.

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

Nästa steg