Android 5.0 (Lollipop) থেকে, অডিও রিস্যাম্পলার এখন সম্পূর্ণভাবে কাইজার উইন্ডোড-সিঙ্ক ফাংশন থেকে প্রাপ্ত FIR ফিল্টারের উপর ভিত্তি করে তৈরি। Kaiser windowed-sinc নিম্নলিখিত প্রপার্টি অফার করে:
- এর ডিজাইন প্যারামিটার (স্টপব্যান্ড রিপল, ট্রানজিশন ব্যান্ডউইথ, কাটঅফ ফ্রিকোয়েন্সি, ফিল্টার দৈর্ঘ্য) গণনা করা সহজ।
- সামগ্রিক শক্তির তুলনায় স্টপব্যান্ড শক্তি কমানোর জন্য এটি প্রায় সর্বোত্তম।
কাইজার উইন্ডো এবং এর অপ্টিমালিটি এবং প্রোলেট স্ফেরয়েডাল উইন্ডোর সাথে সম্পর্ক নিয়ে আলোচনার জন্য পি.পি. বৈদ্যনাথন, মাল্টিরেট সিস্টেম এবং ফিল্টার ব্যাঙ্ক, পৃ. ৫০ দেখুন।
অভ্যন্তরীণ কোয়ালিটি নির্ধারণ ও স্যাম্পেলিং অনুপাতের ভিত্তিতে ডিজাইনের প্যারামিটার অটোমেটিক গণনা করা হয়। ডিজাইন প্যারামিটারের উপর ভিত্তি করে, উইন্ডো করা সিঙ্ক ফিল্টার তৈরি করা হয়। মিউজিকের ক্ষেত্রে, ৪৪.১ থেকে ৪৮ কিলোহার্ৎজ এবং এর উল্টোটার জন্য রিস্যাম্পলার, যেকোনও ফ্রিকোয়েন্সি কনভার্সনের থেকে আরও ভাল কোয়ালিটিতে তৈরি করা হয়।
অডিও রিস্যাম্পলার আরও ভালো কোয়ালিটি প্রদান করে, সেইসাথে সেই কোয়ালিটি অর্জন করার জন্য স্পিডও প্রদান করে। কিন্তু রিস্যাম্পলার অল্প পরিমাণে পাসব্যান্ড রিপল এবং অ্যালিয়াসিং হারমোনিক নয়েজ যোগ করতে পারে এবং এর ফলে ট্রানজিশন ব্যান্ডে হাই ফ্রিকোয়েন্সি লস হতে পারে, তাই অপ্রয়োজনে এগুলি ব্যবহার করবেন না।
স্যাম্পেলিং ও রিস্যাম্পেলিংয়ের পেশাদার পদ্ধতি
স্যাম্পলিং রেট সংক্রান্ত সমস্যা এড়াতে আপনাকে সাহায্য করার জন্য এই বিভাগে কিছু পেশাদার পদ্ধতি বর্ণনা করা হয়েছে।
ডিভাইসের সাথে মানানসই স্যাম্পলিং রেট বেছে নিন
সাধারণত, ডিভাইসের সাথে মানানসই স্যাম্পলিং রেট বেছে নেওয়া সবচেয়ে ভালো, সাধারণত ৪৪.১ kHz বা ৪৮ kHz। ৪৮ kHz-এর বেশি স্যাম্পেল রেট ব্যবহার করলে সাধারণত কোয়ালিটি কমে যায় কারণ ফাইলটি প্লেব্যাক করার জন্য রিস্যাম্পলার ব্যবহার করতে হয়।
সহজ রিস্যাম্পলিং অনুপাত ব্যবহার করুন (স্থির বনাম ইন্টারপোলেট করা পলিফেজ)
রিস্যাম্পলার নিম্নলিখিত মোডগুলির মধ্যে একটিতে কাজ করে:
- ফিক্সড পলিফেজ মোড। প্রতিটি পলিফেজের জন্য ফিল্টার কোএফিসিয়েন্ট আগে থেকেই গণনা করা হয়।
- ইন্টারপোলেটেড পলিফেজ মোড। প্রতিটি পলিফেজের জন্য ফিল্টার কোএফিসিয়েন্ট অবশ্যই নিকটবর্তী দুটি প্রিকম্পিউটেড পলিফেজ থেকে ইন্টারপোলেট করতে হবে।
রিস্যাম্পলার ফিক্সড পলিফেজ মোডে সবচেয়ে দ্রুত কাজ করে, যখন আউটপুট রেট L/M-এর (সবচেয়ে বড় সাধারণ ভাজক বাদ দিয়ে) তুলনায় ইনপুট রেটের অনুপাত M-এর মান ২৫৬-এর কম হয়। যেমন, ৪৪,১০০ থেকে ৪৮,০০০ কনভার্সনের জন্য, L = ১৪৭, M = ১৬০।
ফিক্সড পলিফেজ মোডে, স্যাম্পলিং রেট লক করা থাকে এবং পরিবর্তন হয় না। ইন্টারপোলেট করা পলিফেজ মোডে, স্যাম্পলিং রেট আনুমানিক। ৪৮-kHz ডিভাইসে চালানোর সময় স্যাম্পলিং রেট ড্রিফ্ট সাধারণত কয়েক ঘণ্টা ধরে একটি স্যাম্পেল হয়। এটি সাধারণত কোনও উদ্বেগের বিষয় নয় কারণ আনুমানিক ত্রুটি ইন্টার্নাল কোয়ার্টজ অসিলেটর, থার্মাল ড্রিফ্ট বা জিটার (সাধারণত কয়েক ডজন পিপিএম) দ্বারা অবদান রাখা ফ্রিকোয়েন্সি ত্রুটির চেয়ে অনেক কম।
৪৮-kHz ডিভাইসে প্লেব্যাক করার সময় ২৪ kHz (১:২) এবং ৩২ kHz (২:৩)-এর মতো সহজ-অনুপাতের স্যাম্পলিং রেট বেছে নিন, যদিও AudioTrack-এর মাধ্যমে অন্যান্য স্যাম্পলিং রেট এবং অনুপাত অনুমোদিত হতে পারে।
স্যাম্পেল রেট পরিবর্তন করতে ডাউনস্যাম্পলিংয়ের পরিবর্তে আপস্যাম্পলিং ব্যবহার করুন
স্যাম্পলিং রেট চটপট পরিবর্তন করা যায়। এই ধরনের পরিবর্তনের গ্র্যানুলারিটি ইন্টার্নাল বাফারিংয়ের (সাধারণত কয়েকশো স্যাম্পেল) উপর নির্ভর করে, স্যাম্পেল-বাই-স্যাম্পেল ভিত্তিতে নয়। এটি এফেক্টের জন্য ব্যবহার করা যেতে পারে।
ডাউনস্যাম্পলিং করার সময় স্যাম্পলিং রেট ডায়নামিকভাবে পরিবর্তন করবেন না। অডিও ট্র্যাক তৈরি করার পরে স্যাম্পেল রেট পরিবর্তন করার সময়, আসল রেটের থেকে ৫ থেকে ১০ শতাংশের মতো পার্থক্য থাকলে, ডাউনস্যাম্পলিংয়ের সময় (এলিয়াসিং সঠিকভাবে দমন করার জন্য) ফিল্টার রিকম্পিউটেশন ট্রিগার হতে পারে। এটি কম্পিউটিং রিসোর্স ব্যবহার করতে পারে এবং রিয়েল টাইমে ফিল্টারটি পরিবর্তন করা হলে একটি ক্লিক করার শব্দ হতে পারে।
ডাউনস্যাম্পলিং ৬:১-এর বেশি নয়
হার্ডওয়্যার ডিভাইসের প্রয়োজনীয়তার কারণে সাধারণত ডাউনস্যাম্পলিং ট্রিগার করা হয়। ডাউনস্যাম্পলিংয়ের জন্য স্যাম্পেল রেট কনভার্টার ব্যবহার করা হলে, ভালো অ্যালাইজিং সাপ্রেশনের জন্য ডাউনস্যাম্পলিং অনুপাত ৬:১-এর বেশি না রাখার চেষ্টা করুন (যেমন, ৪৮,০০০ থেকে ৮,০০০-এর বেশি ডাউনস্যাম্পল নয়)। ডাউনস্যাম্পলিং অনুপাতের সাথে ম্যাচ করার জন্য ফিল্টারের দৈর্ঘ্য অ্যাডজাস্ট করা হয়, তবে ফিল্টারের দৈর্ঘ্য অত্যধিক বৃদ্ধি এড়াতে আপনি উচ্চতর ডাউনস্যাম্পলিং অনুপাতে আরও ট্রানজিশন ব্যান্ডউইথ স্যাক্রিফাইস করেন। আপস্যাম্পলিংয়ের জন্য একই ধরনের অ্যালিয়াসিং সংক্রান্ত সমস্যা নেই। মনে রাখবেন যে অডিও পাইপলাইনের কিছু অংশ ২:১-এর বেশি ডাউনস্যাম্পলিং আটকাতে পারে।
আপনি লেটেন্সি নিয়ে চিন্তিত হলে, রিস্যাম্পেল করবেন না
রিস্যাম্পলিং করলে ট্র্যাক FastMixer পাথে প্লেস করা যায় না, যার অর্থ হল সাধারণ Mixer পাথে অতিরিক্ত, বড় বাফারের কারণে উল্লেখযোগ্যভাবে বেশি লেটেন্সি হয়। এছাড়াও, রিস্যাম্পলারের ফিল্টার দৈর্ঘ্যের কারণে একটি অন্তর্নিহিত বিলম্ব হয়, যদিও এটি সাধারণত এক মিলিসেকেন্ড বা তার কম হয়, যা সাধারণ মিক্সার পাথের জন্য অতিরিক্ত বাফারিংয়ের মতো বড় নয় (সাধারণত ২০ মিলিসেকেন্ড)।
ফ্লোটিং-পয়েন্ট অডিওর ব্যবহার
অডিও ডেটা দেখানোর জন্য ফ্লোটিং-পয়েন্ট নম্বর ব্যবহার করলে, হাই-পারফর্ম্যান্স অডিও অ্যাপ্লিকেশনে অডিও কোয়ালিটি উল্লেখযোগ্যভাবে উন্নত হতে পারে। ফ্লোটিং পয়েন্টের নিম্নলিখিত সুবিধা রয়েছে:
- আরও বড় ডায়নামিক রেঞ্জ।
- ডায়নামিক রেঞ্জ জুড়ে ধারাবাহিক নির্ভুলতা।
- ইন্টারমিডিয়েট ক্যালকুলেশন ও ট্রানজিয়েন্টের সময় ক্লিপিং এড়াতে আরও হেডরুম।
ফ্লোটিং-পয়েন্ট অডিও কোয়ালিটি উন্নত করতে পারলেও, এর কিছু অসুবিধাও রয়েছে:
- ফ্লোটিং-পয়েন্ট নম্বর আরও বেশি মেমরি ব্যবহার করে।
- ফ্লোটিং-পয়েন্ট অপারেশন অপ্রত্যাশিত প্রপার্টি ব্যবহার করে, যেমন, যোগফল অ্যাসোসিয়েটিভ নয়।
- পূর্ণ সংখ্যায় রাখার জন্য বা সংখ্যাগতভাবে অস্থির অ্যালগরিদমের কারণে ফ্লোটিং-পয়েন্ট গণনা কখনও কখনও পাটিগণিতিক নির্ভুলতা হারাতে পারে।
- ফ্লোটিং-পয়েন্ট কার্যকরভাবে ব্যবহার করার জন্য সঠিক এবং পুনরুৎপাদনযোগ্য ফলাফল অর্জনের জন্য আরও বেশি বোঝার প্রয়োজন।
আগে, ফ্লোটিং-পয়েন্ট উপলভ্য না থাকা বা স্লো হওয়ার জন্য কুখ্যাত ছিল। লো-এন্ড ও এম্বেড করা প্রসেসরের ক্ষেত্রে এখনও এটি প্রযোজ্য। কিন্তু আধুনিক মোবাইল ডিভাইসের প্রসেসরে এখন হার্ডওয়্যার ফ্লোটিং-পয়েন্ট থাকে যার পারফর্ম্যান্স ইন্টিজারের মতোই (বা কিছু ক্ষেত্রে আরও দ্রুত)। আধুনিক সিপিইউ(CPU) SIMD (সিঙ্গেল ইনস্ট্রাকশন, মাল্টিপল ডেটা) সাপোর্ট করে, যা পারফর্ম্যান্স আরও উন্নত করতে পারে।
ফ্লোটিং-পয়েন্ট অডিওর জন্য পেশাদার পদ্ধতি
নিম্নলিখিত পেশাদার পদ্ধতিগুলি আপনাকে ফ্লোটিং-পয়েন্ট ক্যালকুলেশন সংক্রান্ত সমস্যা এড়াতে সাহায্য করে:
- কম ঘন ঘন গণনার জন্য ডবল প্রিসিশন ফ্লোটিং-পয়েন্ট ব্যবহার করুন, যেমন ফিল্টার সহগ গণনা করা।
- কাজগুলির ক্রমের দিকে মনোযোগ দাও।
- অন্তর্বর্তী ভ্যালুর জন্য এক্সপ্লিসিট ভেরিয়েবল ঘোষণা করুন।
- অবাধভাবে বন্ধনী ব্যবহার করুন।
- আপনি যদি NaN বা ইনফিনিটি ফলাফল পান, তাহলে বাইনারি সার্চ ব্যবহার করে দেখুন এটি কোথায় চালু করা হয়েছে।
ফ্লোটিং-পয়েন্ট অডিওর ক্ষেত্রে, অডিও ফর্ম্যাট এনকোডিং
AudioFormat.ENCODING_PCM_FLOAT, ENCODING_PCM_16_BIT বা ENCODING_PCM_8_BIT-এর মতোই ব্যবহার করা হয়
AudioTrack ডেটা
ফর্ম্যাট নির্দিষ্ট করার জন্য। সংশ্লিষ্ট ওভারলোড করা পদ্ধতি AudioTrack.write()
ডেটা ডেলিভার করার জন্য ফ্লোট অ্যারে গ্রহণ করে।
Kotlin
fun write( audioData: FloatArray, offsetInFloats: Int, sizeInFloats: Int, writeMode: Int ): Int
জাভা
public int write(float[] audioData, int offsetInFloats, int sizeInFloats, int writeMode)
আরও তথ্যের জন্য
এই বিভাগে স্যাম্পলিং ও ফ্লোটিং-পয়েন্ট সম্পর্কে কিছু অতিরিক্ত রিসোর্স তালিকাভুক্ত করা হয়েছে।
স্যাম্পলিং
স্যাম্পেল রেট
- স্যাম্পলিং (সিগন্যাল প্রসেসিং) Wikipedia-তে।
রিস্যাম্পেলিং
- Sample-rate conversion at Wikipedia.
- Sample Rate Conversion at source.android.com.
হাই বিট-ডেপথ ও হাই kHz বিতর্ক
- D/A এবং A/D | ডিজিটাল শো এবং বলা Xiph.Org-এর ক্রিস্টোফার "মন্টি" মন্টগোমেরির ভিডিও।
- স্যাম্পেল রেটের বিজ্ঞান (কখন বেশি হলে ভালো - এবং কখন নয়)।
- অডিও মিথ ও DAW যুদ্ধ
- ১৯২kHz/২৪বিট বনাম ৯৬kHz/২৪বিট "বিতর্ক"- আকর্ষণীয় তথ্য
ফ্লোটিং পয়েন্ট
ফ্লোটিং-পয়েন্ট অডিও বুঝতে নিম্নলিখিত Wikipedia পৃষ্ঠাগুলি সহায়ক:
- অডিও বিট ডেপথ
- ফ্লোটিং-পয়েন্ট অ্যারিথমেটিক
- IEEE 754 ফ্লোটিং-পয়েন্ট
- গুরুত্ব হারানো (ক্যাটাস্ট্রফিক ক্যানসেলেশন)
- নিউমেরিক্যাল স্টেবিলিটি
নিম্নলিখিত নিবন্ধে ফ্লোটিং-পয়েন্টের সেইসব দিক সম্পর্কে তথ্য দেওয়া হয়েছে যেগুলি কম্পিউটার সিস্টেমের ডিজাইনারদের উপর সরাসরি প্রভাব ফেলে:
- What every computer scientist should know about floating-point arithmetic ডেভিড গোল্ডবার্গ, Xerox PARC (এডিট করা রিপ্রিন্ট)।