ডেটা ফরম্যাট

অ্যান্ড্রয়েড অভ্যন্তরীণভাবে বিভিন্ন ধরনের অডিও ডেটা ফরম্যাট ব্যবহার করে এবং পাবলিক API, ফাইল ফরম্যাট এবং হার্ডওয়্যার অ্যাবস্ট্রাকশন লেয়ার (HAL) এ এগুলোর একটি উপসেট প্রকাশ করে।

বৈশিষ্ট্য

অডিও ডেটা ফর্ম্যাটগুলি তাদের বৈশিষ্ট্য দ্বারা শ্রেণীবদ্ধ করা হয়েছে:

সঙ্কোচন
সংকুচিত , ক্ষতিহীন সংকুচিত , বা ক্ষতিকর সংকুচিত । PCM হল সবচেয়ে সাধারণ আনকম্প্রেসড অডিও ফরম্যাট। FLAC একটি ক্ষতিহীন সংকুচিত বিন্যাস, যখন MP3 এবং AAC হল ক্ষতিকর সংকুচিত বিন্যাস।
একটু গভীর
প্রতি অডিও নমুনা উল্লেখযোগ্য বিট সংখ্যা.
ধারক আকার
একটি নমুনা সংরক্ষণ বা প্রেরণ করতে ব্যবহৃত বিটের সংখ্যা। সাধারণত এটি বিট গভীরতার সমান, তবে কখনও কখনও অতিরিক্ত প্যাডিং বিটগুলি প্রান্তিককরণের জন্য বরাদ্দ করা হয়। উদাহরণস্বরূপ, একটি 24-বিট নমুনা একটি 32-বিট শব্দের মধ্যে থাকতে পারে।
প্রান্তিককরণ
যদি কন্টেইনারের আকার বিট গভীরতার সমান হয়, উপস্থাপনাটিকে প্যাকড বলা হয়। অন্যথায় প্রতিনিধিত্ব আনপ্যাক করা হয়. নমুনার উল্লেখযোগ্য বিটগুলি সাধারণত ধারকটির বামতম (সবচেয়ে গুরুত্বপূর্ণ) বা ডানদিকের (সর্বনিম্ন উল্লেখযোগ্য) বিটের সাথে সংযুক্ত থাকে। প্যাকড এবং আনপ্যাক করা শব্দগুলি শুধুমাত্র তখনই ব্যবহার করা প্রচলিত যখন বিট গভীরতা দুইটির শক্তি না হয়।
স্বাক্ষরতা
নমুনাগুলি স্বাক্ষরিত বা স্বাক্ষরবিহীন কিনা।
প্রতিনিধিত্ব
হয় স্থির বিন্দু বা ভাসমান বিন্দু; নিচে দেখ.

স্থির বিন্দু প্রতিনিধিত্ব

ফিক্সড পয়েন্ট হল আনকম্প্রেসড পিসিএম অডিও ডেটার জন্য সবচেয়ে সাধারণ উপস্থাপনা, বিশেষ করে হার্ডওয়্যার ইন্টারফেসে।

একটি স্থির-বিন্দু নম্বরে রেডিক্স পয়েন্টের আগে এবং পরে একটি নির্দিষ্ট (ধ্রুবক) সংখ্যা থাকে। আমাদের সমস্ত উপস্থাপনা বেস 2 ব্যবহার করে, তাই আমরা অঙ্কের জন্য বিট এবং বাইনারি পয়েন্ট বা রেডিক্স পয়েন্টের জন্য কেবল বিন্দু প্রতিস্থাপন করি। বিন্দুর বাম দিকের বিটগুলি হল পূর্ণসংখ্যার অংশ, এবং বিন্দুর ডানদিকের বিটগুলি হল ভগ্নাংশের অংশ

আমরা পূর্ণসংখ্যা PCM এর কথা বলি, কারণ ফিক্সড-পয়েন্ট মানগুলি সাধারণত পূর্ণসংখ্যার মান হিসাবে সংরক্ষণ করা হয় এবং ম্যানিপুলেট করা হয়। স্থির-বিন্দু হিসাবে ব্যাখ্যা অন্তর্নিহিত।

আমরা সমস্ত স্বাক্ষরিত স্থির-বিন্দু উপস্থাপনের জন্য দুটির পরিপূরক ব্যবহার করি, তাই নিম্নোক্ত ধারণ করে যেখানে সমস্ত মান একটি LSB- এর এককে থাকে:

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

Q এবং U স্বরলিপি

একটি পূর্ণসংখ্যাতে স্থির-বিন্দু প্রতিনিধিত্বের জন্য বিভিন্ন স্বরলিপি রয়েছে। আমরা Q স্বরলিপি ব্যবহার করি : Q mn মানে m পূর্ণসংখ্যা বিট এবং n ভগ্নাংশ বিট। "Q" এক বিট হিসাবে গণনা করা হয়, যদিও মান দুটির পরিপূরক দ্বারা প্রকাশ করা হয়। মোট বিটের সংখ্যা m + n + 1।

উম n স্বাক্ষরবিহীন সংখ্যার জন্য: m পূর্ণসংখ্যা বিট এবং n ভগ্নাংশ বিট, এবং "U" শূন্য বিট হিসাবে গণনা করা হয়। মোট বিটের সংখ্যা হল m + n

পূর্ণসংখ্যার অংশটি চূড়ান্ত ফলাফলে ব্যবহার করা যেতে পারে বা অস্থায়ী হতে পারে। পরবর্তী ক্ষেত্রে, যে বিটগুলি পূর্ণসংখ্যার অংশ তৈরি করে তাদের গার্ড বিট বলা হয়। গার্ড বিটগুলি একটি মধ্যবর্তী গণনাকে ওভারফ্লো করার অনুমতি দেয়, যতক্ষণ না চূড়ান্ত মানটি পরিসরের মধ্যে থাকে বা সীমার মধ্যে থাকতে পারে। লক্ষ্য করুন যে ফিক্সড-পয়েন্ট গার্ড বিটগুলি বাম দিকে থাকে, যখন ফ্লোটিং-পয়েন্ট ইউনিট গার্ড ডিজিটগুলি রাউন্ডঅফ ত্রুটি কমাতে ব্যবহৃত হয় এবং ডানদিকে থাকে।

ফ্লোটিং পয়েন্ট উপস্থাপনা

ফ্লোটিং পয়েন্ট হল স্থির বিন্দুর বিকল্প, যেখানে বিন্দুর অবস্থান পরিবর্তিত হতে পারে। ভাসমান-বিন্দুর প্রাথমিক সুবিধার মধ্যে রয়েছে:

  • বৃহত্তর হেডরুম এবং গতিশীল পরিসীমা ; ফ্লোটিং-পয়েন্ট গাণিতিক মধ্যবর্তী গণনার সময় নামমাত্র সীমা ছাড়িয়ে যাওয়া সহ্য করে এবং শেষে মানগুলিকে আটকে রাখে
  • অসীম এবং NaN এর মতো বিশেষ মানগুলির জন্য সমর্থন
  • অনেক ক্ষেত্রে ব্যবহার করা সহজ

ঐতিহাসিকভাবে, ফ্লোটিং-পয়েন্ট পাটিগণিত পূর্ণসংখ্যা বা স্থির-বিন্দু পাটিগণিতের চেয়ে ধীর ছিল, কিন্তু এখন ভাসমান-বিন্দুর জন্য দ্রুততর হওয়া সাধারণ, যদি নিয়ন্ত্রণ প্রবাহের সিদ্ধান্তগুলি গণনার মানের উপর ভিত্তি করে না হয়।

অডিওর জন্য অ্যান্ড্রয়েড ফরম্যাট

অডিওর জন্য প্রধান অ্যান্ড্রয়েড ফর্ম্যাটগুলি নীচের সারণীতে তালিকাভুক্ত করা হয়েছে:

স্বরলিপি
সম্পত্তি প্রশ্ন০.১৫ Q0.7 1 প্রশ্ন০.২৩ প্রশ্ন ০.৩১ ভাসা
ধারক
বিট
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 বিয়োগ এক LSB। দুটির পরিপূরক প্রতিনিধিত্বের কারণে ধনাত্মক মানের চেয়ে একটি বেশি ঋণাত্মক মান রয়েছে।

পাদটীকা:

  1. উপরে সমস্ত বিন্যাস স্বাক্ষরিত নমুনা মান প্রকাশ করে। 8-বিট বিন্যাসটিকে সাধারণত "আনসাইন করা" বলা হয়, কিন্তু এটি আসলে 0.10000000 এর পক্ষপাত সহ একটি স্বাক্ষরিত মান।
  2. Q0.23 24 বিটে প্যাক করা যেতে পারে (তিনটি 8-বিট বাইট, লিটল-এন্ডিয়ান), বা 32 বিটে আনপ্যাক করা যেতে পারে। আনপ্যাক করা থাকলে, উল্লেখযোগ্য বিটগুলি হয় LSB-এর দিকে ডান-জাস্টিফাই করা হয় MSB (Q8.23) এর দিকে সাইন এক্সটেনশন প্যাডিং সহ, অথবা LSB (Q0.31) এর দিকে শূন্য ফিল সহ MSB-এর দিকে বাম-জাস্টিফাই করা হয়। Q0.31 তাত্ত্বিকভাবে 32টি উল্লেখযোগ্য বিট পর্যন্ত অনুমতি দেয়, কিন্তু Q0.31 গ্রহণ করে এমন হার্ডওয়্যার ইন্টারফেস খুব কমই সমস্ত বিট ব্যবহার করে।
  3. একক-নির্ভুল ফ্লোটিং পয়েন্টে 23টি স্পষ্ট বিট এবং একটি লুকানো বিট এবং সাইন বিট রয়েছে, যার ফলে মোট 25টি উল্লেখযোগ্য বিট রয়েছে। অস্বাভাবিক সংখ্যার কম উল্লেখযোগ্য বিট আছে।
  4. একক-নির্ভুল ফ্লোটিং পয়েন্ট ±1.7e+38 পর্যন্ত মান প্রকাশ করতে পারে, যা বড় হেডরুমকে ব্যাখ্যা করে।
  5. দেখানো গতিশীল পরিসীমা নামমাত্র সর্বোচ্চ মান ±1.0 পর্যন্ত denormals জন্য। মনে রাখবেন যে কিছু আর্কিটেকচার-নির্দিষ্ট ভাসমান পয়েন্ট বাস্তবায়ন যেমন NEON ডিনরমাল সমর্থন করে না।

রূপান্তর

এই বিভাগে বিভিন্ন উপস্থাপনা মধ্যে তথ্য রূপান্তর আলোচনা.

ফ্লোটিং পয়েন্ট রূপান্তর

Q m থেকে একটি মান রূপান্তর করতে। 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 তে রূপান্তরিত হতে পারে বা একটি ত্রুটি হতে পারে৷

স্থির বিন্দু রূপান্তর

বিভিন্ন 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 বা কম উল্লেখযোগ্য বিট সহ স্থির বিন্দু প্রতিনিধিত্ব থেকে ফ্লোটিং পয়েন্টে রূপান্তর ক্ষতিহীন। ফ্লোটিং পয়েন্ট থেকে যেকোনো সাধারণ স্থির বিন্দু প্রতিনিধিত্বে রূপান্তর ক্ষতিকর।