डेटा प्रारूप

Android कई तरह के ऑडियो का इस्तेमाल करता है डेटा फ़ॉर्मैट और सार्वजनिक एपीआई में इनका सबसेट दिखाता है. फ़ाइल फ़ॉर्मैट, और हार्डवेयर ऐब्स्ट्रैक्शन लेयर (एचएएल).

प्रॉपर्टी

ऑडियो डेटा फ़ॉर्मैट को उनकी प्रॉपर्टी के हिसाब से अलग-अलग कैटगरी में बांटा जाता है:

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

फ़िक्स्ड पॉइंट निरूपण

फ़िक्स्ड पॉइंट आम तौर पर, बिना कंप्रेस किए गए पीसीएम ऑडियो डेटा के लिए इसका इस्तेमाल किया जाता है. हार्डवेयर इंटरफ़ेस पर.

फ़िक्स्ड पॉइंट नंबर में अंकों की तय (कॉन्सटेंट) संख्या होती है रेडिक्स पॉइंट से पहले और बाद में. हमारे सभी प्रतिनिधित्व बेस 2, इसलिए हम डिजिट की जगह बिट का इस्तेमाल करते हैं, रेडिक्स पॉइंट के लिए बाइनरी पॉइंट या सिर्फ़ पॉइंट. पॉइंट के बाईं ओर मौजूद बिट, पूर्णांक वाला हिस्सा होते हैं. और पॉइंट के दाईं ओर के बिट आंशिक हिस्सा.

हम पूर्णांक PCM की बात करते हैं, क्योंकि तय बिंदु वाली वैल्यू डेटा को आम तौर पर पूर्णांक वैल्यू के रूप में सेव किया जाता है और उनमें बदलाव किया जाता है. फ़िक्स्ड पॉइंट के तौर पर लिखे गए कॉन्टेंट को इंप्लिसिट पॉइंट के तौर पर नहीं समझा जा सकता.

हम दोनों के पूरक का इस्तेमाल करते हैं साइन किए गए सभी तय पॉइंट वाले प्रतिनिधित्व के लिए, इसलिए, नीचे दिए गए होल्ड में सभी वैल्यू एक ही इकाई की होती हैं एलएसबी:

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

Q और U नोटेशन

कई नोटेशन का इस्तेमाल करें. हम क्यू नोटेशन का इस्तेमाल करते हैं: Qm.n का मतलब m पूर्णांक बिट और n फ़्रैक्शनल बिट है. "Q" को एक बिट के रूप में गिना जाता है, जबकि वैल्यू को दो के पूरक के तौर पर दिखाया जाता है. बिट की कुल संख्या m + n + 1 है.

Um.n, साइन नहीं किए गए नंबरों के लिए है: m पूर्णांक बिट और n फ़्रैक्शनल बिट, और "U" शून्य बिट के रूप में गिना जाता है. बिट की कुल संख्या m + n है.

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

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

फ़्लोटिंग पॉइंट एक तय पॉइंट का विकल्प है, जिसमें पॉइंट की जगह अलग-अलग हो सकती है. फ़्लोटिंग-पॉइंट के मुख्य फ़ायदे ये हैं:

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

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

ऑडियो के लिए Android फ़ॉर्मैट

ऑडियो के लिए Android के मुख्य फ़ॉर्मैट, इस टेबल में दिए गए हैं:

नोटेशन
प्रॉपर्टी सवाल: 15 सवाल 0.7 1 सवाल: 23 सवाल: 31 फ़्लोट
कंटेनर
बिट
16 8 24 या 32 2 32 32
चिह्न के साथ
ज़रूरी बिट
16 8 24 24 या 32 2 25 3
हेडरूम
dB में
0 0 0 0 126 4
डाइनैमिक रेंज
dB में
90 42 138 138 से 186 900 5

ऊपर दिए गए सभी फ़िक्स्ड पॉइंट फ़ॉर्मैट में, कम से कम -1.0 से +1.0 की रेंज में से एक LSB को घटाया जाता है. पॉज़िटिव मान की तुलना में एक ज़्यादा नेगेटिव मान है. ऐसा इसलिए है, क्योंकि दो का पूरक प्रतिनिधित्व करते हैं.

फ़ुटनोट:

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

कन्वर्ज़न

इस सेक्शन में, डेटा कन्वर्ज़न के बीच दिखता है.

फ़्लोटिंग पॉइंट कन्वर्ज़न

किसी वैल्यू को Qm.n फ़ॉर्मैट से फ़्लोटिंग पॉइंट में बदलने के लिए:

  1. मान को फ़्लोटिंग पॉइंट में इस तरह बदलें, जैसे कि वह एक पूर्णांक हो (पॉइंट को अनदेखा करके).
  2. 2-n से गुणा करें.

उदाहरण के लिए, Q4.27 इंटरनल वैल्यू को फ़्लोटिंग पॉइंट में बदलने के लिए, इसका इस्तेमाल करें:

float = integer * (2 ^ -27)

फ़्लोटिंग पॉइंट से तय पॉइंट तक कन्वर्ज़न होने पर, इन नियमों का पालन किया जाएगा:

  • एकल-सटीक फ़्लोटिंग पॉइंट की नाममात्र की सीमा ±1.0 है, लेकिन इंटरमीडिएट वैल्यू की पूरी रेंज ±1.7e+38 है. बाहरी प्रज़ेंटेशन के लिए फ़्लोटिंग पॉइंट और तय पॉइंट के बीच कन्वर्ज़न (जैसे कि ऑडियो डिवाइसों पर आउटपुट) सिर्फ़ नाम की रेंज पर विचार करेगा, जिसमें क्लैंपिंग की सुविधा का इस्तेमाल करें. विशेष रूप से, जब +1.0 को रूपांतरित किया जाता है निश्चित-पॉइंट फ़ॉर्मैट में, इसे +1.0 से एक LSB से जोड़ा जाता है.
  • डिनॉर्मल (सबनॉर्मल) और +/- 0.0 दोनों को दिखाने की अनुमति है, लेकिन प्रोसेसिंग के दौरान चुपचाप 0.0 में बदला जा सकता है.
  • अधूरे कामों को या तो ऑपरेशन से गुज़रना होगा या उनके लिए चुपचाप सीमित तौर पर काम किया जाएगा +/- 1.0 तक. आम तौर पर, बाद वाला फ़ॉर्मैट, तय पॉइंट वाले फ़ॉर्मैट में बदलने के लिए होता है.
  • NaN व्यवहार की जानकारी नहीं है: NaN एक जैसे NaN के रूप में लागू हो सकता है डिफ़ॉल्ट NaN में बदला जाता है, और +/- 1.0 तक सीमित रूप से मुश्किल हो सकता है, या चुपचाप 0.0 में बदला जाता है, या कोई गड़बड़ी होती है.

तय पॉइंट वाले कन्वर्ज़न

अलग-अलग Qm.n फ़ॉर्मैट के बीच कन्वर्ज़न इन नियमों का पालन करते हैं:

  • जब m बढ़ाया जाता है, तो बाईं ओर के पूर्णांक वाले हिस्से को बड़ा करें.
  • m को छोटा करने पर, पूर्णांक वाले हिस्से को आपस में जोड़ें.
  • जब n बढ़ाया जाता है, तो शून्य दाईं ओर के आंशिक भाग को बढ़ा देता है.
  • जब n कम हो जाता है, तो दाईं ओर मौजूद अतिरिक्त भिन्नांक बिट को या तो कम, गोल या छोटा करें.

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

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

नुकसान पहुंचाने वाले और नुकसान न पहुंचाने वाले कन्वर्ज़न

अगर ऐसा है, तो कन्वर्ज़न लॉसलेस होता है इन्वर्टिबल: A से B तक का कन्वर्ज़न C के नतीजे A = C में मिलते हैं. ऐसा नहीं करने पर, कन्वर्ज़न लॉसी होगा.

लॉसलेस कन्वर्ज़न परमिट राउंड-ट्रिप फ़ॉर्मैट वाला कन्वर्ज़न.

25 या उससे कम ज़रूरी बिट के साथ फ़्लोटिंग पॉइंट में, तय पॉइंट पर होने वाले कन्वर्ज़न में कोई नुकसान नहीं होता है. फ़्लोटिंग पॉइंट से किसी भी सामान्य तय पॉइंट पर होने वाले कन्वर्ज़न में नुकसान होता है.