नेविगेशन पर जाएँ

स्ट्रीमिंग टेक्स्ट टू स्पीच

यह गाइड दिखाती है कि टेक्स्ट टू स्पीच को कैसे स्ट्रीम करें और चाहें तो ऑडियो को AWS S3 पर अपलोड करें।

इस गाइड में तीन तरीके बताए गए हैं: फ़ाइल के रूप में स्पीच जनरेट करना, ऑडियो रिस्पॉन्स को सीधे स्ट्रीम करना, और वैकल्पिक रूप से जनरेट किए गए ऑडियो को साइन किए गए URL से साझा करने के लिए AWS S3 बकेट में अपलोड करना।

इस गाइड में माना गया है कि आपने अपनी API key और SDK सेट अप कर ली है। अगर आपने अभी तक नहीं किया है, तो पहले क्विकस्टार्ट पूरा करें। वैकल्पिक S3 अपलोड सेक्शन के लिए S3 एक्सेस वाले AWS अकाउंट की भी ज़रूरत होती है।

जानना चाहते हैं कि स्ट्रीमिंग इस तरह क्यों काम करती है? ऑडियो स्ट्रीमिंग को समझें में प्रोटोकॉल, बफ़रिंग और लेटेंसी के बीच के संतुलन को विस्तार से समझाया गया है।

टेक्स्ट को स्पीच में बदलें (फ़ाइल)

टेक्स्ट को स्पीच में बदलकर फ़ाइल के रूप में सेव करने के लिए, हम ElevenLabs SDK के convert मेथड का इस्तेमाल करेंगे और फिर उसे लोकली .mp3 फ़ाइल के रूप में सेव करेंगे।

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

फिर आप इस फ़ंक्शन को इस तरह चला सकते हैं:

text_to_speech_file("Hello World")

टेक्स्ट को स्पीच में बदलें (स्ट्रीमिंग)

अगर आप ऑडियो को फ़ाइल में सेव किए बिना सीधे स्ट्रीम करना चाहते हैं, तो हमारी स्ट्रीमिंग सुविधा का इस्तेमाल कर सकते हैं।

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

फिर आप इस फ़ंक्शन को इस तरह चला सकते हैं:

text_to_speech_stream("This is James")

बोनस - AWS S3 पर अपलोड करना और सुरक्षित शेयरिंग लिंक पाना

ऑडियो डेटा फ़ाइल या स्ट्रीम के रूप में बन जाने के बाद, हो सकता है कि आप इसे अपने यूज़र्स के साथ साझा करना चाहें। ऐसा करने का एक तरीका इसे AWS S3 बकेट में अपलोड करके सुरक्षित शेयरिंग लिंक जनरेट करना है।

डेटा को S3 पर अपलोड करने के लिए, आपको अपनी AWS access key ID, secret access key और AWS region का नाम अपनी .env फ़ाइल में जोड़ना होगा। क्रेडेंशियल्स पाने के लिए ये चरण अपनाएं:

  1. अपने AWS Management Console में लॉग इन करें: AWS होम पेज पर जाएं और अपने अकाउंट से साइन इन करें।
AWS कंसोल लॉगिन
  1. IAM (Identity and Access Management) डैशबोर्ड खोलें: सर्विसेज़ मेनू में आपको IAM, “Security, Identity, & Compliance” के अंतर्गत मिलेगा। IAM डैशबोर्ड आपके AWS सर्विसेज़ का एक्सेस सुरक्षित ढंग से मैनेज करता है।
AWS IAM डैशबोर्ड
  1. नया यूज़र बनाएं (अगर ज़रूरी हो): IAM डैशबोर्ड पर “Users” और फिर “Add user” चुनें। यूज़र नाम दर्ज करें।
AWS IAM यूज़र जोड़ें
  1. परमिशन सेट करें: जिस स्तर का एक्सेस देना चाहते हैं, उसके अनुसार पॉलिसीज़ सीधे यूज़र से अटैच करें। S3 अपलोड के लिए आप AmazonS3FullAccess पॉलिसी इस्तेमाल कर सकते हैं। हालांकि, न्यूनतम विशेषाधिकार देना सबसे अच्छा तरीका है, यानी काम पूरा करने के लिए ज़रूरी न्यूनतम परमिशन। आप एक कस्टम पॉलिसी बनाना चाह सकते हैं जो आपके S3 बकेट पर सिर्फ़ ज़रूरी कार्रवाइयों की अनुमति दे।
AWS IAM यूज़र के लिए परमिशन सेट करें
  1. यूज़र की समीक्षा करें और बनाएं: अपनी सेटिंग्स की समीक्षा करके यूज़र बनाएं। बन जाने पर आपको एक access key ID और secret access key मिलेगी। इन क्रेडेंशियल्स को डाउनलोड करके सुरक्षित रूप से सेव करना न भूलें; इस चरण के बाद secret access key दोबारा प्राप्त नहीं की जा सकती।
AWS एक्सेस सीक्रेट की
  1. AWS region का नाम पाएं: उदाहरण के लिए, us-east-1
AWS region का नाम

अगर आपके पास AWS S3 बकेट नहीं है, तो इन चरणों का पालन करके नया बकेट बनाना होगा:

  1. S3 डैशबोर्ड खोलें: सर्विसेज़ मेनू में आपको S3, “Storage” के अंतर्गत मिलेगा।
AWS S3 डैशबोर्ड
  1. नया बकेट बनाएं: S3 डैशबोर्ड पर “Create bucket” बटन पर क्लिक करें।
Create Bucket बटन पर क्लिक करें
  1. बकेट का नाम दर्ज करें और “Create bucket” बटन पर क्लिक करें। अन्य बकेट विकल्पों को डिफ़ॉल्ट ही रहने दे सकते हैं। नया जोड़ा गया बकेट सूची में दिखाई देगा।
नया S3 बकेट नाम दर्ज करें
S3 बकेट सूची

pip और npm का इस्तेमाल करके AWS सर्विसेज़ के साथ इंटरैक्ट करने के लिए boto3 इंस्टॉल करें।

pip install boto3

फिर एनवायरनमेंट वेरिएबल्स को .env फ़ाइल में इस तरह जोड़ें:

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

ऑडियो स्ट्रीम को S3 पर अपलोड करने और साइन किया हुआ 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

फिर आप टेक्स्ट से मिली ऑडियो स्ट्रीम के साथ अपलोडिंग फ़ंक्शन को कॉल कर सकते हैं।

s3_file_name = upload_audiostream_to_s3(audio_stream)

ऑडियो फ़ाइल को S3 पर अपलोड करने के बाद, फ़ाइल का एक्सेस साझा करने के लिए साइन किया हुआ URL जनरेट करें। यह URL समय-सीमित होगा, यानी कुछ समय बाद इसकी समय-सीमा समाप्त हो जाएगी, इसलिए यह अस्थायी शेयरिंग के लिए सुरक्षित है।

अब आप किसी फ़ाइल से URL इस तरह जनरेट कर सकते हैं:

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

अगर आप फ़ाइल को कई बार इस्तेमाल करना चाहते हैं, तो अपने डेटाबेस में s3 फ़ाइल पाथ सेव करें और ज़रूरत पड़ने पर हर बार साइन किया हुआ URL फिर से जनरेट करें। साइन किए हुए URL को सीधे सेव न करें, क्योंकि उसकी समय-सीमा समाप्त हो जाएगी।

सब कुछ एक साथ जोड़ने के लिए, आप इस स्क्रिप्ट का इस्तेमाल कर सकते हैं:

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()

निष्कर्ष

अब आप जानते हैं कि टेक्स्ट को स्पीच में कैसे बदलना है और ऑडियो फ़ाइल साझा करने के लिए साइन किया हुआ URL कैसे जनरेट करना है। यह सुविधा डायनामिक रूप से कंटेंट बनाने और साझा करने के कई अवसर खोलती है।

इससे आप क्या बना सकते हैं, इसके कुछ उदाहरण यहां दिए गए हैं।

  1. शैक्षणिक पॉडकास्ट: व्यक्तिगत शैक्षणिक कंटेंट बनाएं, जिसे छात्र मांग पर एक्सेस कर सकें। शिक्षक अपने पाठों को ऑडियो फ़ॉर्मैट में बदलकर S3 पर अपलोड कर सकते हैं और पारंपरिक कक्षा के बाहर अधिक रोचक सीखने के अनुभव के लिए लिंक छात्रों के साथ साझा कर सकते हैं।

  2. वेबसाइट्स के लिए एक्सेसिबिलिटी सुविधाएं: टेक्स्ट कंटेंट को ऑडियो फ़ॉर्मैट में देकर वेबसाइट की एक्सेसिबिलिटी बेहतर बनाएं। इससे वेबसाइट की जानकारी दृष्टिबाधित लोगों या सुनकर सीखना पसंद करने वालों के लिए अधिक सुलभ हो सकती है।

  3. ऑटोमेटेड कस्टमर सपोर्ट मैसेज: कस्टमर सपोर्ट के लिए ऑटोमेटेड और व्यक्तिगत ऑडियो मैसेज बनाएं, जैसे FAQ या ऑर्डर अपडेट। यह पारंपरिक टेक्स्ट ईमेल की तुलना में ग्राहक अनुभव को अधिक रोचक बना सकता है।

  4. ऑडियोबुक और नैरेशन: पूरी किताबों या छोटी कहानियों को ऑडियो फ़ॉर्मैट में बदलें, जिससे दर्शक साहित्य का आनंद नए तरीके से ले सकें। लेखक और प्रकाशक अपने कंटेंट की पेशकश में विविधता ला सकते हैं और पढ़ने के बजाय सुनना पसंद करने वाले दर्शकों तक पहुंच सकते हैं।

  5. भाषा सीखने के टूल्स: ऐसे भाषा-शिक्षण सहायक बनाएं जो सीखने वालों को ऑडियो लेसन और अभ्यास दें। इससे उच्चारण और सुनने की क्षमता का लक्षित अभ्यास संभव होता है।

अगले चरण