रीयल-टाइम में ऑडियो जनरेट करें
रीयल-टाइम में ऑडियो जनरेट करें
यह गाइड दिखाती है कि WebSocket कनेक्शन के ज़रिए रीयल-टाइम में ऑडियो कैसे जनरेट करें।
WebSocket स्ट्रीमिंग एक ही, लंबे समय तक चलने वाले कनेक्शन पर डेटा भेजने और प्राप्त करने का तरीका है। यह तरीका रीयल-टाइम ऐप्लिकेशन के लिए उपयोगी है, जहाँ उपलब्ध होते ही आपको ऑडियो डेटा स्ट्रीम करना होता है।
अगर आप ElevenLabs टेक्स्ट टू स्पीच API के WebSocket कनेक्शन की लेटेंसी (पहला बाइट मिलने का समय) जल्दी से टेस्ट करना चाहते हैं, तो आप npm के ज़रिए elevenlabs-latency इंस्टॉल कर सकते हैं और यहाँ दिए निर्देशों का पालन कर सकते हैं।
WebSockets टेक्स्ट टू स्पीच और Agents Platform के लिए उपलब्ध हैं। यह गाइड टेक्स्ट
टू स्पीच WebSocket (/v1/text-to-speech/{voice_id}/stream-input) के बारे में है। यह endpoint नहीं
eleven_v3 या eleven_v4 मॉडल सपोर्ट करता है। WebSocket पर Eleven v3 या Eleven v4 डायलॉग के लिए,
रीयलटाइम टेक्स्ट टू डायलॉग
और टेक्स्ट टू स्पीच बनाम टेक्स्ट टू डायलॉग
WebSockets देखें।
आवश्यकताएँ
- API key वाला ElevenLabs अकाउंट (अपनी API key कैसे ढूँढें, यहाँ जानें)।
- आपकी मशीन पर Python या Node.js (या कोई अन्य JavaScript runtime) इंस्टॉल होना चाहिए
सेटअप
ज़रूरी dependencies इंस्टॉल करें:
अब अपनी प्रोजेक्ट डायरेक्टरी में .env फ़ाइल बनाएँ और अपनी API key जोड़ें:
WebSocket कनेक्शन शुरू करें
वॉइस लाइब्रेरी से वॉइस और इस्तेमाल करने के लिए टेक्स्ट टू स्पीच मॉडल चुनने के बाद, टेक्स्ट टू स्पीच API से WebSocket कनेक्शन शुरू करें।
इनपुट टेक्स्ट भेजें
WebSocket कनेक्शन खुलने के बाद, पहले वॉइस सेटिंग्स सेट करें। फिर API को टेक्स्ट मैसेज भेजें।
ऑडियो को फ़ाइल में सेव करें
WebSocket कनेक्शन से आने वाले मैसेज को पढ़ें और ऑडियो चंक्स को लोकल फ़ाइल में लिखें।
स्क्रिप्ट चलाएँ
टर्मिनल में नीचे दिया कमांड चलाकर आप स्क्रिप्ट चला सकते हैं। output डायरेक्टरी में एक mp3 ऑडियो फ़ाइल सेव हो जाएगी।
एडवांस्ड कॉन्फ़िगरेशन
WebSockets के साथ कुछ एडवांस्ड सेटिंग्स मिलती हैं, जिनसे आप अपनी रीयल-टाइम ऑडियो जनरेशन को बेहतर ढंग से ट्यून कर सकते हैं।
बफ़रिंग
रीयल-टाइम ऑडियो जनरेट करते समय, दो अहम कॉन्सेप्ट ध्यान में रखने चाहिए: Time To First Byte (TTFB) और बफ़रिंग। उच्च-गुणवत्ता ऑडियो बनाने और संदर्भ समझने के लिए मॉडल को एक निश्चित मात्रा में इनपुट टेक्स्ट चाहिए। WebSocket कनेक्शन में जितना अधिक टेक्स्ट भेजा जाता है, ऑडियो क्वालिटी उतनी ही बेहतर होती है। अगर यह सीमा पूरी नहीं होती, तो मॉडल टेक्स्ट को बफ़र में जोड़ देता है और बफ़र भरने पर ऑडियो जनरेट करता है।
लेटेंसी के संदर्भ में, TTFB वह समय है जो ऑडियो का पहला बाइट क्लाइंट तक भेजने में लगता है। यह अहम है क्योंकि इससे ऑडियो की महसूस होने वाली लेटेंसी प्रभावित होती है। इसलिए, क्वालिटी और लेटेंसी के बीच संतुलन बनाने के लिए आप बफ़र साइज़ नियंत्रित करना चाह सकते हैं।
इसे मैनेज करने के लिए, WebSocket कनेक्शन शुरू करते समय या टेक्स्ट भेजते समय आप chunk_length_schedule पैरामीटर इस्तेमाल कर सकते हैं। यह पैरामीटर integers की एक array है, जो ऑडियो जनरेट करने से पहले मॉडल को भेजे जाने वाले अक्षरों की संख्या बताती है। उदाहरण के लिए, अगर आप chunk_length_schedule को [120, 160, 250, 290] पर सेट करते हैं, तो मॉडल क्रमशः 120, 160, 250 और 290 अक्षर भेजे जाने के बाद ऑडियो जनरेट करेगा।
यहाँ chunk_length_schedule की डिफ़ॉल्ट सेटिंग्स के साथ इसका एक उदाहरण है:
ऊपर दिए डायग्राम में, सर्वर को दूसरा मैसेज भेजने के बाद ही ऑडियो जनरेट होता है। ऐसा इसलिए है क्योंकि पहला मैसेज 120 अक्षरों की सीमा से कम है, जबकि दूसरा मैसेज कुल अक्षरों की संख्या को सीमा से ऊपर ले जाता है। तीसरा मैसेज 160 अक्षरों की सीमा से अधिक है, इसलिए ऑडियो तुरंत जनरेट होकर क्लाइंट को भेज दिया जाता है।
WebSocket कनेक्शन शुरू करते समय या टेक्स्ट भेजते समय आप chunk_length_schedule के लिए कस्टम वैल्यू दे सकते हैं।
अगर आप ऑडियो को तुरंत वापस पाना चाहते हैं, तो बफ़र साफ़ करने और बफ़र किए गए किसी भी टेक्स्ट का ऑडियो तुरंत जनरेट करने के लिए flush: true इस्तेमाल कर सकते हैं। उदाहरण के लिए, जब आप किसी दस्तावेज़ के अंत तक पहुँच जाएँ और अंतिम सेक्शन का ऑडियो जनरेट करना चाहें, तब यह उपयोगी हो सकता है।
मैसेज में flush: true सेट करके इसे हर मैसेज के लिए अलग-अलग निर्दिष्ट किया जा सकता है।
इसके अलावा, websocket बंद करने पर बफ़र किया गया कोई भी टेक्स्ट अपने-आप जनरेट हो जाएगा।
वॉइस सेटिंग्स
WebSocket कनेक्शन शुरू करते समय, आप बाद की जनरेशन के लिए वॉइस सेटिंग्स तय कर सकते हैं। इससे आप जनरेट किए गए ऑडियो की स्पीड, स्थिरता और वॉइस की अन्य विशेषताओं को नियंत्रित कर सकते हैं।
मैसेज में अलग voice_settings देकर इसे हर मैसेज के लिए ओवरराइड किया जा सकता है।
उच्चारण डिक्शनरी
आप खास शब्दों या वाक्यांशों के उच्चारण को नियंत्रित करने के लिए उच्चारण डिक्शनरी इस्तेमाल कर सकते हैं। यह सुनिश्चित करने के लिए उपयोगी है कि कुछ शब्दों का सही उच्चारण हो या कुछ शब्दों अथवा वाक्यांशों पर ज़ोर दिया जाए।
voice_settings और generation_config के विपरीत, उच्चारण डिक्शनरी को “Initialize Connection” मैसेज में देना ज़रूरी है। अधिक जानकारी के लिए API रेफरेंस देखें।
WebSockets के साथ phoneme-आधारित उच्चारण डिक्शनरी इस्तेमाल करते समय, आपको WebSocket URI में query parameter के रूप में enable_ssml_parsing=true जोड़ना होगा। उदाहरण:
सर्वोत्तम तरीका
- हम
generation_configमेंchunk_length_scheduleकी डिफ़ॉल्ट सेटिंग इस्तेमाल करने का सुझाव देते हैं। - रीयल-टाइम कन्वर्सेशनल एजेंट ऐप्लिकेशन बनाते समय, समय पर ऑडियो जनरेशन सुनिश्चित करने के लिए बातचीत के टर्न के अंत में टेक्स्ट के साथ
flush: trueइस्तेमाल करें। - अगर डिफ़ॉल्ट सेटिंग आपके उपयोग के लिए सबसे अच्छी लेटेंसी नहीं देती है, तो आप
chunk_length_scheduleबदल सकते हैं। हालाँकि, ध्यान रखें कि इस बदलाव से लेटेंसी कम करने पर क्वालिटी प्रभावित हो सकती है।
सुझाव
- निष्क्रियता के 20 सेकंड बाद WebSocket कनेक्शन अपने-आप बंद हो जाएगा। कनेक्शन खुला रखने के लिए, आप एक single space character
" "भेज सकते हैं। ध्यान रखें कि इस स्ट्रिंग में space शामिल होना चाहिए, क्योंकि पूरी तरह खाली स्ट्रिंग,"", भेजने से WebSocket बंद हो जाएगा। - आखिरी टेक्स्ट मैसेज भेजने के बाद WebSocket कनेक्शन बंद करने के लिए एक खाली स्ट्रिंग भेजें।
- टेक्स्ट के हर शब्द के लिए शब्द-स्तरीय timestamps पाने के लिए आप
alignmentइस्तेमाल कर सकते हैं। यह वीडियो में ऑडियो को टेक्स्ट के साथ संरेखित करने या सटीक टाइमिंग वाले अन्य ऐप्लिकेशन के लिए उपयोगी हो सकता है। अधिक जानकारी के लिए API रेफरेंस देखें।