Android के लिए Telegram बीटा संस्करण 13.0.3 (बिल्ड 7179) में, रिकॉर्ड किए गए वॉयस मैसेज को टेक्स्ट के रूप में भेजा जा सकता था: पॉज़ बटन के बगल में "Aa" बटन भेजने से पहले ही रिकॉर्डिंग को ट्रांसक्राइब कर देता था, और उपयोगकर्ता चुन सकता था कि प्राप्तकर्ता को क्या भेजा जाए — टेक्स्ट या ऑडियो ही। इस सुविधा को केवल Premium के साथ उपलब्ध के रूप में चिह्नित किया गया था। बाद में, बीटा से ट्रांसक्रिप्शन को हटा दिया गया क्योंकि यह एक डेवलपर का अस्थायी प्रयोग था; उसी बिल्ड का दूसरा नवाचार बना रहा — RNNoise न्यूरल नेटवर्क पर नॉइज़ सप्रेशन के साथ वॉयस मैसेज की प्रायोगिक रिकॉर्डिंग। यह उन लोगों पर लागू होता है जो बीटा इंस्टॉल करते हैं: स्थिर संस्करण 13.0.2 में न तो यह है और न ही वह।
बीटा में यह कैसा दिखता था
"Aa" बटन लॉक रिकॉर्डिंग मोड में दिखाई देता था — जब रिकॉर्डिंग के दौरान उंगली को माइक्रोफ़ोन आइकन से ऊपर की ओर स्वाइप किया जाता था और रिकॉर्डिंग बिना पकड़े जारी रहती थी। "Aa" पर टैप करने से ट्रांसक्रिप्शन दिखाई देता था, फिर यह चुनना बाकी रहता था कि क्या भेजना है। यदि वॉयस मैसेज को आगे रिकॉर्ड किया गया या ट्रिम किया गया, तो बीटा इसे फिर से ट्रांसक्राइब करने की पेशकश करता था।
नॉइज़ सप्रेशन के साथ रिकॉर्डिंग बीटा की प्रायोगिक सेटिंग्स में चालू की जाती है। ध्वनि को Opus में कंप्रेस करने से पहले नॉइज़ हटा दिया जाता है — वह फॉर्मेट जिसमें Telegram वॉयस मैसेज को स्टोर और फॉरवर्ड करता है। उसी बिल्ड से एक चेतावनी: नॉइज़ सप्रेशन संगीत और बहुत धीमी आवाज़ की रिकॉर्डिंग को खराब कर सकता है। इस मोड के साथ वॉयस मैसेज में कोई धुन गाना एक बुरा विचार है: नेटवर्क के लिए संगीत नॉइज़ जैसा दिखता है, जिसका कारण नीचे बताया गया है।
भेजने से पहले ट्रांसक्रिप्शन एक नई कार्यप्रणाली क्यों है
Telegram में वॉयस मैसेज का ट्रांसक्रिप्शन लंबे समय से है, लेकिन केवल उन मैसेज के लिए जो पहले से ही चैट में हैं। इसे सर्वर द्वारा किया जाता है: क्लाइंट messages.transcribeAudio मेथड को कॉल करता है, और इस मेथड के दो पैरामीटर होते हैं — चैट और उसमें मैसेज नंबर। जवाब ट्रांसक्रिप्शन आईडी और टेक्स्ट के साथ आता है; एक लंबी रिकॉर्डिंग "प्रगति में" के निशान के साथ वापस आ सकती है, और फिर टेक्स्ट को अलग updateTranscribedAudio अपडेट द्वारा जोड़ा जाता है।
एक बिना भेजे गए रिकॉर्डिंग का कोई मैसेज नंबर नहीं होता है, इसलिए यह मेथड उस पर लागू नहीं होता है। एक ऐसा मेथड जो स्वयं फ़ाइल को स्वीकार करता हो, न तो सार्वजनिक API स्कीम (TDLib 8 अक्टूबर तक) में है और न ही Android के स्रोत कोड 13.0.2 में लेयर 231 के साथ। Android का सिस्टम स्पीच रिकॉग्नाइज़र (android.speech) भी 13.0.2 के कोड में उपयोग नहीं किया जाता है।
बीटा ने इस सीमा को कैसे पार किया, यह खुले आर्टिफैक्ट्स से स्पष्ट नहीं है: बिल्ड 13.0.3 का स्रोत कोड प्रकाशित नहीं किया गया है, रिपॉजिटरी 13 अक्टूबर को जारी किए गए 13.0.2 (7175) पर समाप्त होती है। नए बटन की कोई लाइन अनुवाद प्लेटफॉर्म पर भी नहीं है — यह व्यक्तिगत प्रयोग के संस्करण के साथ मेल खाता है जो स्थानीयकरण तक नहीं पहुंचा। कोड से तथ्य के बजाय एक परिकल्पना: पहचान या तो एक सर्वर मेथड के माध्यम से की गई थी जो अभी तक सार्वजनिक स्कीम में नहीं है, या डिवाइस पर ही।
ट्रांसक्रिप्शन अभी किसे उपलब्ध है
प्राप्त वॉयस मैसेज के लिए नियम क्लाइंट कोड में दिखाई देते हैं। ट्रांसक्रिप्शन बिना किसी प्रतिबंध के Premium में शामिल है — सदस्यता के विवरण में यह लाइन किसी भी इनकमिंग वॉयस मैसेज के ट्रांसक्रिप्शन के बारे में है। Premium के बिना, सर्वर परीक्षण ट्रांसक्रिप्शन प्रदान करता है: उनकी साप्ताहिक संख्या और अधिकतम रिकॉर्डिंग अवधि क्लाइंट सर्वर कॉन्फ़िगरेशन से पढ़ता है, कुंजी transcribe_audio_trial_weekly_number और transcribe_audio_trial_duration_max हैं। अक्टूबर के कॉन्फ़िगरेशन स्नैपशॉट में अवधि की सीमा 300 सेकंड है, साप्ताहिक परीक्षणों की संख्या 0 और 2 के बीच बदलती रहती है। जब परीक्षण समाप्त हो जाते हैं, तो क्लाइंट उस तारीख को दिखाता है जब तक इंतजार करना है, या Premium का सुझाव देता है।
RNNoise कैसे काम करता है
RNNoise Xiph.Org द्वारा BSD लाइसेंस के तहत एक ओपन-सोर्स नॉइज़ सप्रेशन लाइब्रेरी है। लेखक जीन-मार्क वालिन हैं, जो Opus कोडेक के सह-निर्माताओं में से एक हैं; डिवाइस का वर्णन उनके 2017 के लेख में किया गया है।
दृष्टिकोण हाइब्रिड है। क्लासिक सिग्नल प्रोसेसिंग ध्वनि को 10 मिलीसेकंड (48 kHz पर 480 सैंपल) के फ्रेम में काटती है और प्रत्येक फ्रेम के स्पेक्ट्रम को 22 बैंड में विभाजित करती है, जो आवृत्तियों को सुनने की क्षमता के करीब होती है। एक छोटा रिकरेंट नेटवर्क — जो पिछले फ्रेम को याद रखता है — बैंड की विशेषताओं को देखता है और प्रत्येक के लिए 0 से 1 तक का गुणांक देता है: इस बैंड में कितनी ऊर्जा छोड़नी है। एक अलग पिच फिल्टर आवाज के हार्मोनिक्स के बीच के नॉइज़ को साफ करता है। साथ ही, नेटवर्क यह संभावना देता है कि फ्रेम में वास्तव में भाषण है।
नेटवर्क सैकड़ों आवृत्ति सैंपलों के बजाय 22 गुणांकों को नियंत्रित करता है, इसलिए यह छोटा है और फोन के प्रोसेसर पर वास्तविक समय में काम करता है। इसका दूसरा पहलू यह है कि इसे भाषण को नॉइज़ से अलग करने के लिए प्रशिक्षित किया गया था, और जो कुछ भी भाषण जैसा नहीं दिखता है, उसे यह नॉइज़ मानता है। इसलिए संगीत के बारे में चेतावनी; धीमी आवाज उसी कारण से खो जाती है — बैंड में इसकी विशेषताएं पृष्ठभूमि के करीब होती हैं।
RNNoise पहले से ही ऐप में था
लाइब्रेरी को जोड़ने की आवश्यकता नहीं थी। स्रोत कोड Android क्लाइंट के रिपॉजिटरी में jni/voip/rnnoise में स्थित हैं, एक स्टैटिक लाइब्रेरी में संकलित होते हैं और ऐप की मुख्य नेटिव लाइब्रेरी में एम्बेड किए जाते हैं। यह अब तक वीडियो चैट में काम कर रहा था: कॉल मॉड्यूल माइक्रोफ़ोन से प्रत्येक फ्रेम को RNNoise के माध्यम से पास करता है, बोलने वाले के संकेतक के लिए भाषण का अनुमान लेता है और जब वीडियो चैट सेटिंग्स में "नॉइज़ सप्रेशन" चालू होता है तो ध्वनि को साफ किए गए से बदल देता है।
क्लाइंट वॉयस मैसेज को माइक्रोफ़ोन से 48 kHz पर मोनो में रिकॉर्ड करता है और इसे Opus कोडर के साथ वॉयस मोड में कंप्रेस करता है। रिकॉर्डिंग आवृत्ति RNNoise के काम करने वाली आवृत्ति से मेल खाती है, इसलिए बीटा का प्रयोग माइक्रोफ़ोन और कोडर के बीच एक ही कड़ी तक सीमित है — वही जो वीडियो चैट में लंबे समय से है।




