एंड्रॉइड आंतरिक रूप से विभिन्न प्रकार के ऑडियो डेटा प्रारूपों का उपयोग करता है, और सार्वजनिक एपीआई, फ़ाइल प्रारूपों और हार्डवेयर एब्स्ट्रैक्शन लेयर (एचएएल) में इनके एक सबसेट को उजागर करता है।
गुण
ऑडियो डेटा प्रारूपों को उनके गुणों के आधार पर वर्गीकृत किया गया है:
- दबाव
- असम्पीडित , दोषरहित संपीड़ित , या हानिरहित संपीड़ित । पीसीएम सबसे आम असम्पीडित ऑडियो प्रारूप है। FLAC एक दोषरहित संपीड़ित प्रारूप है, जबकि MP3 और AAC हानिरहित संपीड़ित प्रारूप हैं।
- थोड़ी गहराई
- प्रति ऑडियो नमूना महत्वपूर्ण बिट्स की संख्या.
- कंटेनर का आकार
- किसी नमूने को संग्रहीत या संचारित करने के लिए उपयोग की जाने वाली बिट्स की संख्या। आमतौर पर यह बिट गहराई के समान होता है, लेकिन कभी-कभी संरेखण के लिए अतिरिक्त पैडिंग बिट्स आवंटित किए जाते हैं। उदाहरण के लिए, एक 24-बिट नमूना 32-बिट शब्द में समाहित किया जा सकता है।
- संरेखण
- यदि कंटेनर का आकार बिट गहराई के बिल्कुल बराबर है, तो प्रतिनिधित्व को पैक्ड कहा जाता है। अन्यथा प्रतिनिधित्व अनपैक्ड है. नमूने के महत्वपूर्ण बिट्स आमतौर पर कंटेनर के सबसे बाएं (सबसे महत्वपूर्ण) या सबसे दाएं (कम से कम महत्वपूर्ण) बिट के साथ संरेखित होते हैं। पैक्ड और अनपैक्ड शब्दों का उपयोग केवल तभी करना पारंपरिक है जब बिट गहराई दो की शक्ति न हो।
- हस्ताक्षर
- चाहे नमूने हस्ताक्षरित हों या अहस्ताक्षरित।
- प्रतिनिधित्व
- या तो निश्चित बिंदु या फ़्लोटिंग बिंदु; नीचे देखें।
निश्चित बिंदु प्रतिनिधित्व
निश्चित बिंदु असम्पीडित पीसीएम ऑडियो डेटा के लिए सबसे आम प्रतिनिधित्व है, खासकर हार्डवेयर इंटरफेस पर।
एक निश्चित-बिंदु संख्या में मूलांक बिंदु से पहले और बाद में अंकों की एक निश्चित (स्थिर) संख्या होती है। हमारे सभी प्रस्तुतीकरण आधार 2 का उपयोग करते हैं, इसलिए हम अंक के स्थान पर बिट और मूलांक बिंदु के स्थान पर बाइनरी बिंदु या बस बिंदु का उपयोग करते हैं। बिंदु के बाईं ओर के बिट्स पूर्णांक भाग हैं, और बिंदु के दाईं ओर के बिट्स भिन्नात्मक भाग हैं।
हम पूर्णांक पीसीएम की बात करते हैं, क्योंकि निश्चित-बिंदु मान आमतौर पर पूर्णांक मान के रूप में संग्रहीत और हेरफेर किए जाते हैं। नियत-बिन्दु के रूप में व्याख्या अन्तर्निहित है।
हम सभी हस्ताक्षरित निश्चित-बिंदु अभ्यावेदन के लिए दो के पूरक का उपयोग करते हैं, इसलिए निम्नलिखित में सभी मान एक एलएसबी की इकाइयों में हैं:
|largest negative value| = |largest positive value| + 1
क्यू और यू संकेतन
पूर्णांक में निश्चित-बिंदु प्रतिनिधित्व के लिए विभिन्न संकेतन हैं। हम Q संकेतन का उपयोग करते हैं: Q m । n का अर्थ है m पूर्णांक बिट्स और n भिन्नात्मक बिट्स। "क्यू" को एक बिट के रूप में गिना जाता है, हालांकि मान दो के पूरक में व्यक्त किया जाता है। बिट्स की कुल संख्या m + n + 1 है।
उ म . n अहस्ताक्षरित संख्याओं के लिए है: m पूर्णांक बिट्स और n भिन्नात्मक बिट्स, और "U" को शून्य बिट्स के रूप में गिना जाता है। बिट्स की कुल संख्या m + n है।
पूर्णांक भाग का उपयोग अंतिम परिणाम में किया जा सकता है, या अस्थायी हो सकता है। बाद वाले मामले में, पूर्णांक भाग बनाने वाले बिट्स को गार्ड बिट्स कहा जाता है। गार्ड बिट्स एक मध्यवर्ती गणना को अतिप्रवाह की अनुमति देते हैं, जब तक कि अंतिम मान सीमा के भीतर है या सीमा के भीतर होने के लिए क्लैंप किया जा सकता है। ध्यान दें कि फिक्स्ड-पॉइंट गार्ड बिट्स बाईं ओर हैं, जबकि फ्लोटिंग-पॉइंट यूनिट गार्ड अंक राउंडऑफ़ त्रुटि को कम करने के लिए उपयोग किए जाते हैं और दाईं ओर हैं।
फ़्लोटिंग पॉइंट प्रतिनिधित्व
फ्लोटिंग पॉइंट निश्चित बिंदु का एक विकल्प है, जिसमें बिंदु का स्थान भिन्न-भिन्न हो सकता है। फ़्लोटिंग-पॉइंट के प्राथमिक लाभों में शामिल हैं:
- अधिक हेडरूम और गतिशील रेंज ; फ़्लोटिंग-पॉइंट अंकगणित मध्यवर्ती गणना के दौरान नाममात्र सीमाओं से अधिक को सहन करता है, और अंत में केवल मानों को दबाता है
- अनंतता और NaN जैसे विशेष मानों के लिए समर्थन
- कई मामलों में उपयोग में आसान
ऐतिहासिक रूप से, फ़्लोटिंग-पॉइंट अंकगणित पूर्णांक या निश्चित-बिंदु अंकगणित की तुलना में धीमा था, लेकिन अब फ़्लोटिंग-पॉइंट का तेज़ होना आम बात है, बशर्ते नियंत्रण प्रवाह निर्णय गणना के मूल्य पर आधारित न हों।
ऑडियो के लिए Android प्रारूप
ऑडियो के लिए प्रमुख Android प्रारूप नीचे दी गई तालिका में सूचीबद्ध हैं:
संपत्ति | प्र0.15 | प्र0.7 1 | प्र0.23 | प्र0.31 | तैरना | |
---|---|---|---|---|---|---|
पात्र बिट्स | 16 | 8 | 24 या 32 2 | 32 | 32 | |
महत्वपूर्ण अंश संकेत सहित | 16 | 8 | 24 | 24 या 32 2 | 25 3 | |
हेडरूम डीबी में | 0 | 0 | 0 | 0 | 126 4 | |
डानामिक रेंज डीबी में | 90 | 42 | 138 | 138 से 186 | 900 5 |
उपरोक्त सभी निश्चित-बिंदु प्रारूपों की नाममात्र सीमा -1.0 से +1.0 शून्य से एक एलएसबी है। दोनों के पूरक प्रतिनिधित्व के कारण सकारात्मक मूल्य की तुलना में एक अधिक नकारात्मक मूल्य है।
फ़ुटनोट:
- उपरोक्त सभी प्रारूप हस्ताक्षरित नमूना मान व्यक्त करते हैं। 8-बिट प्रारूप को आमतौर पर "अहस्ताक्षरित" कहा जाता है, लेकिन यह वास्तव में
0.10000000
के पूर्वाग्रह के साथ एक हस्ताक्षरित मान है। - Q0.23 को 24 बिट्स (तीन 8-बिट बाइट्स, लिटिल-एंडियन) में पैक किया जा सकता है, या 32 बिट्स में अनपैक किया जा सकता है। यदि अनपैक किया जाता है, तो महत्वपूर्ण बिट्स या तो एमएसबी (क्यू8.23) की ओर साइन एक्सटेंशन पैडिंग के साथ एलएसबी की ओर दाएं-उचित हैं, या एलएसबी (क्यू0.31) की ओर शून्य भरण के साथ एमएसबी की ओर बाएं-उचित हैं। Q0.31 सैद्धांतिक रूप से 32 महत्वपूर्ण बिट्स तक की अनुमति देता है, लेकिन Q0.31 को स्वीकार करने वाले हार्डवेयर इंटरफ़ेस शायद ही सभी बिट्स का उपयोग करते हैं।
- एकल-सटीक फ़्लोटिंग पॉइंट में 23 स्पष्ट बिट्स और एक छिपा हुआ बिट और साइन बिट होता है, जिसके परिणामस्वरूप कुल 25 महत्वपूर्ण बिट्स होते हैं। असामान्य संख्याओं में कम महत्वपूर्ण बिट्स होते हैं।
- एकल-परिशुद्धता फ़्लोटिंग पॉइंट ±1.7e+38 तक मान व्यक्त कर सकता है, जो बड़े हेडरूम की व्याख्या करता है।
- दिखाई गई गतिशील रेंज नाममात्र अधिकतम मान ±1.0 तक के असामान्यताओं के लिए है। ध्यान दें कि कुछ आर्किटेक्चर-विशिष्ट फ़्लोटिंग पॉइंट कार्यान्वयन जैसे NEON असामान्यताओं का समर्थन नहीं करते हैं।
रूपांतरण
यह अनुभाग विभिन्न अभ्यावेदन के बीच डेटा रूपांतरण पर चर्चा करता है।
फ़्लोटिंग पॉइंट रूपांतरण
Q m से किसी मान को परिवर्तित करने के लिए। n फ़्लोटिंग पॉइंट पर प्रारूप:
- मान को फ़्लोटिंग पॉइंट में कनवर्ट करें जैसे कि यह एक पूर्णांक था (बिंदु को अनदेखा करके)।
- 2 - n से गुणा करें।
उदाहरण के लिए, Q4.27 आंतरिक मान को फ़्लोटिंग पॉइंट में बदलने के लिए, इसका उपयोग करें:
float = integer * (2 ^ -27)
फ़्लोटिंग पॉइंट से निश्चित पॉइंट तक रूपांतरण इन नियमों का पालन करते हैं:
- एकल-परिशुद्धता फ़्लोटिंग पॉइंट की नाममात्र सीमा ±1.0 है, लेकिन मध्यवर्ती मानों के लिए पूर्ण सीमा ±1.7e+38 है। बाहरी प्रतिनिधित्व (जैसे ऑडियो उपकरणों के लिए आउटपुट) के लिए फ़्लोटिंग पॉइंट और निश्चित बिंदु के बीच रूपांतरण केवल नाममात्र सीमा पर विचार करेगा, उस सीमा से अधिक मानों के लिए क्लैंपिंग के साथ। विशेष रूप से, जब +1.0 को एक निश्चित-बिंदु प्रारूप में परिवर्तित किया जाता है, तो इसे +1.0 माइनस एक एलएसबी पर क्लैंप किया जाता है।
- प्रतिनिधित्व में असामान्य (असामान्य) और दोनों +/- 0.0 की अनुमति है, लेकिन प्रसंस्करण के दौरान इसे चुपचाप 0.0 में परिवर्तित किया जा सकता है।
- इन्फिनिटीज़ या तो ऑपरेशन से गुजरेंगी या चुपचाप +/- 1.0 तक सीमित हो जाएंगी। आम तौर पर उत्तरार्द्ध एक निश्चित-बिंदु प्रारूप में रूपांतरण के लिए होता है।
- NaN व्यवहार अपरिभाषित है: एक NaN एक समान NaN के रूप में प्रचारित हो सकता है, या डिफ़ॉल्ट NaN में परिवर्तित हो सकता है, चुपचाप +/- 1.0 तक सीमित हो सकता है, या चुपचाप 0.0 में परिवर्तित हो सकता है, या परिणामस्वरूप त्रुटि हो सकती है।
निश्चित बिंदु रूपांतरण
विभिन्न Q m के बीच रूपांतरण। n प्रारूप इन नियमों का पालन करते हैं:
- जब m बढ़ाया जाता है, तो बाईं ओर पूर्णांक भाग को विस्तारित करने का चिह्न लगाएं।
- जब m कम हो जाए, तो पूर्णांक भाग को दबाएँ।
- जब n बढ़ाया जाता है, तो शून्य दाईं ओर भिन्नात्मक भाग का विस्तार करता है।
- जब n कम हो जाता है, तो दाहिनी ओर अतिरिक्त भिन्नात्मक बिट्स को या तो घुमाएँ, गोल करें, या छोटा करें।
उदाहरण के लिए, Q4.27 मान को Q0.15 में परिवर्तित करने के लिए (बिना घुमाए या गोल किए), Q4.27 मान को 12 बिट्स द्वारा राइट शिफ्ट करें, और 16-बिट हस्ताक्षरित सीमा से अधिक किसी भी परिणाम को क्लैंप करें। यह Q प्रतिनिधित्व के बिंदु को संरेखित करता है।
Q7.24 को Q7.23 में परिवर्तित करने के लिए, 2 से हस्ताक्षरित विभाजन करें, या समकक्ष रूप से Q7.24 पूर्णांक मात्रा में साइन बिट जोड़ें, और फिर 1 से हस्ताक्षरित दायां शिफ्ट करें। ध्यान दें कि एक साधारण हस्ताक्षरित दायां शिफ्ट इसके बराबर नहीं है 2 से हस्ताक्षरित विभाजन।
हानिपूर्ण और दोषरहित रूपांतरण
यदि कोई रूपांतरण उलटा हो तो वह हानि रहित होता है: A
से B
से C
में रूपांतरण का परिणाम A = C
होता है। अन्यथा रूपांतरण हानिप्रद है.
दोषरहित रूपांतरण राउंड-ट्रिप प्रारूप रूपांतरण की अनुमति देता है।
25 या उससे कम महत्वपूर्ण बिट्स के साथ निश्चित बिंदु प्रतिनिधित्व से फ़्लोटिंग पॉइंट में रूपांतरण दोषरहित हैं। फ़्लोटिंग पॉइंट से किसी भी सामान्य निश्चित बिंदु प्रतिनिधित्व में रूपांतरण हानिपूर्ण है।