डेटा प्रारूप

संग्रह की मदद से व्यवस्थित रहें अपनी प्राथमिकताओं के आधार पर, कॉन्टेंट को सेव करें और कैटगरी में बांटें.

एंड्रॉइड आंतरिक रूप से विभिन्न प्रकार के ऑडियो डेटा प्रारूपों का उपयोग करता है, और सार्वजनिक एपीआई, फ़ाइल स्वरूपों और हार्डवेयर एब्स्ट्रक्शन लेयर (एचएएल) में इनमें से एक सबसेट को उजागर करता है।

गुण

ऑडियो डेटा स्वरूपों को उनके गुणों द्वारा वर्गीकृत किया जाता है:

दबाव
असम्पीडित , दोषरहित संपीडित , या हानिपूर्ण संपीडित . पीसीएम सबसे आम असंपीड़ित ऑडियो प्रारूप है। FLAC एक दोषरहित संपीड़ित प्रारूप है, जबकि MP3 और AAC हानिपूर्ण संपीड़ित प्रारूप हैं।
थोड़ी गहराई
प्रति ऑडियो नमूने में महत्वपूर्ण बिट्स की संख्या।
कंटेनर का आकार
नमूने को स्टोर या ट्रांसमिट करने के लिए उपयोग किए जाने वाले बिट्स की संख्या। आमतौर पर यह बिट गहराई के समान होता है, लेकिन कभी-कभी संरेखण के लिए अतिरिक्त पैडिंग बिट्स आवंटित किए जाते हैं। उदाहरण के लिए, 32-बिट शब्द के भीतर 24-बिट नमूना समाहित किया जा सकता है।
संरेखण
यदि कंटेनर का आकार बिट गहराई के बिल्कुल बराबर है, तो प्रतिनिधित्व को पैक्ड कहा जाता है। अन्यथा प्रतिनिधित्व अनपैक्ड है। नमूने के महत्वपूर्ण बिट्स को आमतौर पर कंटेनर के सबसे बाएं (सबसे महत्वपूर्ण) या सबसे दाहिने (सबसे कम महत्वपूर्ण) बिट के साथ संरेखित किया जाता है। पैक्ड और अनपैक्ड शब्दों का उपयोग केवल तभी किया जाता है जब बिट गहराई दो की शक्ति न हो।
हस्ताक्षर
क्या नमूने हस्ताक्षरित या अहस्ताक्षरित हैं।
प्रतिनिधित्व
या तो निश्चित बिंदु या फ़्लोटिंग पॉइंट; नीचे देखें।

निश्चित बिंदु प्रतिनिधित्व

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

एक निश्चित-बिंदु संख्या में मूलांक बिंदु से पहले और बाद में अंकों की एक निश्चित (स्थिर) संख्या होती है। हमारे सभी अभ्यावेदन आधार 2 का उपयोग करते हैं, इसलिए हम अंक के लिए बिट को स्थानापन्न करते हैं, और बाइनरी बिंदु या मूलांक बिंदु के लिए बस बिंदु बिंदु के बाईं ओर के बिट्स पूर्णांक भाग होते हैं, और बिंदु के दाईं ओर के बिट्स भिन्नात्मक भाग होते हैं।

हम पूर्णांक PCM की बात करते हैं, क्योंकि निश्चित-बिंदु मान आमतौर पर पूर्णांक मानों के रूप में संग्रहीत और हेरफेर किए जाते हैं। निश्चित-बिंदु के रूप में व्याख्या निहित है।

हम सभी हस्ताक्षरित निश्चित-बिंदु अभ्यावेदन के लिए दो के पूरक का उपयोग करते हैं, इसलिए निम्नलिखित में सभी मान एक एलएसबी की इकाइयों में हैं:

|largest negative value| = |largest positive value| + 1

क्यू और यू नोटेशन

एक पूर्णांक में निश्चित-बिंदु प्रतिनिधित्व के लिए विभिन्न संकेतन हैं। हम क्यू संकेतन का उपयोग करते हैं: क्यू एमn का अर्थ है m पूर्णांक बिट्स और n भिन्नात्मक बिट्स। "क्यू" एक बिट के रूप में गिना जाता है, हालांकि मूल्य दो के पूरक में व्यक्त किया जाता है। बिट्स की कुल संख्या m + n + 1 है।

यू एमn अहस्ताक्षरित संख्याओं के लिए है: m पूर्णांक बिट्स और n भिन्नात्मक बिट्स, और "U" शून्य बिट्स के रूप में गिना जाता है। बिट्स की कुल संख्या m + n है।

पूर्णांक भाग का उपयोग अंतिम परिणाम में किया जा सकता है, या अस्थायी हो सकता है। बाद के मामले में, पूर्णांक भाग बनाने वाले बिट्स को गार्ड बिट्स कहा जाता है। गार्ड बिट्स एक मध्यवर्ती गणना को अतिप्रवाह की अनुमति देते हैं, जब तक कि अंतिम मान सीमा के भीतर है या सीमा के भीतर होने के लिए क्लैंप किया जा सकता है। ध्यान दें कि फिक्स्ड-पॉइंट गार्ड बिट्स बाईं ओर हैं, जबकि फ्लोटिंग-पॉइंट यूनिट गार्ड अंक राउंडऑफ़ त्रुटि को कम करने के लिए उपयोग किए जाते हैं और दाईं ओर होते हैं।

फ़्लोटिंग पॉइंट प्रतिनिधित्व

फ़्लोटिंग पॉइंट निश्चित बिंदु का एक विकल्प है, जिसमें बिंदु का स्थान भिन्न हो सकता है। फ़्लोटिंग-पॉइंट के प्राथमिक लाभों में शामिल हैं:

  • ग्रेटर हेडरूम और डायनेमिक रेंज ; फ़्लोटिंग-पॉइंट अंकगणित मध्यवर्ती गणना के दौरान नाममात्र सीमाओं से अधिक सहन करता है, और अंत में केवल क्लैंप मान होता है
  • विशेष मूल्यों के लिए समर्थन जैसे कि अनंत और NaN
  • कई मामलों में उपयोग में आसान

ऐतिहासिक रूप से, फ़्लोटिंग-पॉइंट अंकगणित पूर्णांक या निश्चित-बिंदु अंकगणित से धीमा था, लेकिन अब फ़्लोटिंग-पॉइंट के लिए तेज़ होना आम बात है, बशर्ते नियंत्रण प्रवाह निर्णय गणना के मूल्य पर आधारित न हों।

ऑडियो के लिए Android प्रारूप

ऑडियो के लिए प्रमुख Android प्रारूप नीचे दी गई तालिका में सूचीबद्ध हैं:

नोटेशन
संपत्ति क्यू0.15 प्रश्न 0.7 1 Q0.23 Q0.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 घटा एक एलएसबी है। दो के पूरक प्रतिनिधित्व के कारण सकारात्मक मूल्य से एक और नकारात्मक मूल्य है।

फुटनोट:

  1. उपरोक्त सभी प्रारूप हस्ताक्षरित नमूना मान व्यक्त करते हैं। 8-बिट प्रारूप को आमतौर पर "अहस्ताक्षरित" कहा जाता है, लेकिन यह वास्तव में 0.10000000 के पूर्वाग्रह के साथ एक हस्ताक्षरित मान है।
  2. Q0.23 को 24 बिट्स (तीन 8-बिट बाइट्स, लिटिल-एंडियन) में पैक किया जा सकता है, या 32 बिट्स में अनपैक किया जा सकता है। यदि अनपैक किया जाता है, तो महत्वपूर्ण बिट्स या तो एमएसबी (क्यू 8.23) की ओर साइन एक्सटेंशन पैडिंग के साथ एलएसबी की ओर दाएं-औचित्य होते हैं, या एमएसबी की ओर बाएं-औचित्य एलएसबी (क्यू 0.31) की ओर शून्य भरते हैं। Q0.31 सैद्धांतिक रूप से 32 महत्वपूर्ण बिट्स तक की अनुमति देता है, लेकिन Q0.31 स्वीकार करने वाले हार्डवेयर इंटरफेस शायद ही कभी सभी बिट्स का उपयोग करते हैं।
  3. एकल-सटीक फ़्लोटिंग पॉइंट में 23 स्पष्ट बिट्स और एक छिपी हुई बिट और साइन बिट है, जिसके परिणामस्वरूप कुल 25 महत्वपूर्ण बिट्स हैं। असामान्य संख्याओं में कम महत्वपूर्ण बिट्स होते हैं।
  4. एकल-सटीक फ़्लोटिंग पॉइंट ±1.7e+38 तक मान व्यक्त कर सकता है, जो बड़े हेडरूम की व्याख्या करता है।
  5. दिखाया गया गतिशील रेंज नाममात्र अधिकतम मूल्य ±1.0 तक denormals के लिए है। ध्यान दें कि कुछ आर्किटेक्चर-विशिष्ट फ़्लोटिंग पॉइंट कार्यान्वयन जैसे नीयन असामान्यताओं का समर्थन नहीं करते हैं।

रूपांतरण

यह खंड विभिन्न अभ्यावेदन के बीच डेटा रूपांतरण पर चर्चा करता है।

फ़्लोटिंग पॉइंट रूपांतरण

Q m से किसी मान को बदलने के लिए। फ्लोटिंग पॉइंट के लिए n प्रारूप:

  1. मान को फ़्लोटिंग पॉइंट में कनवर्ट करें जैसे कि यह एक पूर्णांक था (बिंदु को अनदेखा करके)।
  2. 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 में परिवर्तित हो सकता है, या एक त्रुटि हो सकती है।

निश्चित बिंदु रूपांतरण

विभिन्न क्यू एम के बीच रूपांतरण। n प्रारूप इन नियमों का पालन करते हैं:

  • जब m बढ़ा दिया जाता है, तो चिह्न बाईं ओर पूर्णांक भाग को बढ़ा देता है।
  • जब m घटाया जाता है, तो पूर्णांक भाग को जकड़ें।
  • जब n बढ़ा दिया जाता है, तो शून्य भिन्नात्मक भाग को दाईं ओर बढ़ा देता है।
  • जब n घटाया जाता है, तो दाईं ओर अतिरिक्त भिन्नात्मक बिट्स को या तो नीचे, गोल, या काट-छाँट करें।

उदाहरण के लिए, Q4.27 मान को Q0.15 (बिना या गोल किए) में बदलने के लिए, Q4.27 मान को 12 बिट्स से दाईं ओर शिफ्ट करें, और 16-बिट हस्ताक्षरित सीमा से अधिक के किसी भी परिणाम को क्लैंप करें। यह क्यू प्रतिनिधित्व के बिंदु को संरेखित करता है।

Q7.24 को Q7.23 में कनवर्ट करने के लिए, 2 से हस्ताक्षरित डिवाइड करें, या समान रूप से साइन बिट को Q7.24 पूर्णांक मात्रा में जोड़ें, और फिर 1 से राइट शिफ्ट पर हस्ताक्षर करें। ध्यान दें कि एक साधारण हस्ताक्षरित राइट शिफ्ट के बराबर नहीं है 2 से एक हस्ताक्षरित विभाजन।

हानिपूर्ण और दोषरहित रूपांतरण

एक रूपांतरण दोषरहित है यदि यह उलटा है: A से B से C में रूपांतरण का परिणाम A = C । अन्यथा रूपांतरण हानिपूर्ण है।

दोषरहित रूपांतरण राउंड-ट्रिप प्रारूप रूपांतरण की अनुमति देते हैं।

25 या उससे कम महत्वपूर्ण बिट्स के साथ निश्चित बिंदु प्रतिनिधित्व से फ़्लोटिंग पॉइंट में रूपांतरण दोषरहित हैं। फ़्लोटिंग पॉइंट से किसी भी सामान्य निश्चित बिंदु प्रतिनिधित्व में रूपांतरण हानिपूर्ण है।