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

চিত্র ১. বর্তমান নীতিমালা।
নিম্নলিখিত সারণিতে সমস্ত উপলব্ধ হ্যাপটিক্স এপিআই-এর তালিকা দেওয়া হলো:
| এপিআই | পদ্ধতি এবং ধ্রুবক | বছর যোগ করা হয়েছে |
|---|---|---|
android.view.HapticFeedbackConstants |
| ২০১৬ সালের আগে |
| ২০১৭ (অ্যান্ড্রয়েড ৮) | |
| ২০২০ (অ্যান্ড্রয়েড ১১) | |
android.View |
| ২০১৬ সালের আগে |
android.os.Vibrator |
| ২০১৬ সালের আগে |
| ২০১৭ (অ্যান্ড্রয়েড ৮) | |
| ২০২০ (অ্যান্ড্রয়েড ১১) | |
android.os.VibrationEffect |
| ২০১৭ (অ্যান্ড্রয়েড ৮) |
| ২০১৯ (অ্যান্ড্রয়েড ১০) | |
android.os.VibrationEffect.Composition |
| ২০২০ (অ্যান্ড্রয়েড ১১) |
android.media.AudioAttributes.Builder |
| ২০১৯ (অ্যান্ড্রয়েড ১০) |
গুঞ্জন কম্পন
পেজার এবং ফিচার ফোনের সময় থেকে, সাইলেন্ট মোডে শ্রাব্য রিংটোনের বিকল্প হিসেবে নিম্নমানের কিন্তু শক্তি-সাশ্রয়ী এক্সেন্ট্রিক রোটেটিং মাস (ERM) বাজার-ভিত্তিক কম্পন ব্যবহৃত হয়ে আসছে। পুরোনো হার্ডওয়্যার উপাদানগুলো, যেগুলো উচ্চ ও অপ্রীতিকর শ্রাব্য শব্দ তৈরি করে, সেগুলো নিম্নমানের অনুভূতি (যেমন, একটি সস্তা, ভাঙা ফোন) দিয়ে হ্যাপটিক ইউএক্স-এর ক্ষতি করতে পারে।
স্পষ্ট স্পর্শানুভূতি
ক্লিয়ার হ্যাপটিক্স বিচ্ছিন্ন অবস্থা পরিবর্তনের অনুভূতিকে সমর্থন করে (উদাহরণস্বরূপ, পাওয়ার চালু এবং বন্ধ করার প্রক্রিয়ার সময় বাইনারি পরিবর্তন)। বিচ্ছিন্ন অ্যাফোর্ডেন্সের প্রকৃতির কারণে, ক্লিয়ার হ্যাপটিক্স একটি একক সত্তা হিসাবে তৈরি হয় (উদাহরণস্বরূপ, প্রতিটি ইনপুট ইভেন্টের জন্য একটি হ্যাপটিক প্রভাব)।
অ্যান্ড্রয়েডের লক্ষ্য হলো গুঞ্জনময় বা অস্পষ্ট অনুভূতির পরিবর্তে শক্তিশালী অথচ তীক্ষ্ণ সংবেদনের মাধ্যমে স্পষ্ট হ্যাপটিক্স প্রদান করা।
স্পষ্ট হ্যাপটিক্স সমর্থন করার জন্য তৈরি পূর্বনির্ধারিত হ্যাপটিক কনস্ট্যান্টগুলোতে নিম্নলিখিত উপাদানগুলো অন্তর্ভুক্ত থাকে।
-
CLOCK_TICK -
CONFIRM -
CONTEXT_CLICK -
GESTURE_END -
GESTURE_START -
KEYBOARD_PRESS -
KEYBOARD_RELEASE -
KEYBOARD_TAP -
LONG_PRESS -
REJECT -
TEXT_HANDLE_MOVE -
VIRTUAL_KEY -
VIRTUAL_KEY_RELEASE
-
EFFECT_CLICK -
EFFECT_DOUBLE_CLICK -
EFFECT_HEAVY_CLICK -
EFFECT_TICK
অ্যান্ড্রয়েড ইকোসিস্টেমে হ্যাপটিক্সের সামগ্রিক মান উন্নত করার জন্য ডিভাইস নির্মাতা এবং ডেভেলপারদের মধ্যে অভিন্ন জ্ঞান তৈরি করা অপরিহার্য। হ্যাপটিক্স বাস্তবায়ন সম্পর্কে আরও জানতে বেসিক চেকলিস্ট , হার্ডওয়্যার অ্যাসেসমেন্ট এবং সিডিডি ব্যবহার করুন।

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

চিত্র ৩. স্লাইডিং টেক্সচার সহ সমৃদ্ধ হ্যাপটিক্স।

চিত্র ৪। ড্র্যাগিং এবং সোয়াইপিং।
ব্যবহারের ক্ষেত্র ১: স্লাইডিং টেক্সচার
যদি কোনো টাচ সারফেসের উপর আঙুল স্লাইড করার সময় (যেমন, ড্র্যাগ করা, সোয়াইপ করা, বা ফ্যান্টম হ্যাপটিক টেক্সচার দিয়ে সারফেসটি এক্সপ্লোর করার সময়) কোনো হ্যাপটিক ইফেক্টের পুনরাবৃত্তি ঘটে, তবে সেই পুনরাবৃত্ত হ্যাপটিক ইফেক্টগুলো স্পষ্ট এবং সূক্ষ্ম হওয়া বাঞ্ছনীয়।
যদি স্বতন্ত্র প্রভাবটি তীক্ষ্ণ না হয়ে গুঞ্জনময় হয়, তাহলে পুনরাবৃত্তিগুলোর মধ্যবর্তী বিরতিগুলো মুছে যাওয়ার সম্ভাবনা থাকে। এর ফলে একাধিক বিচ্ছিন্ন সংকেতের পরিবর্তে একটি দীর্ঘ গুঞ্জন তৈরি হয়।
যদি বিস্তারটি যথেষ্ট সূক্ষ্ম না হয়, তাহলে পুনরাবৃত্তির মাধ্যমে অনুভূত স্পর্শজনিত শক্তি বাড়তে থাকে, যার ফলে পুনরাবৃত্তির শেষে অসহনীয় তীব্র স্পর্শজনিত অনুভূতি সৃষ্টি হয়।
সোয়াইপ এবং ড্র্যাগ জেসচারের জন্য একটি সারফেস হ্যাপটিক টেক্সচার প্রয়োগ করুন।
HapticFeedbackConstants এ CLOCK_TICK এবং TEXT_HANDLE_MOVE ব্যবহার করুন। এই ধ্রুবকগুলো পুনরাবৃত্তি এবং বিস্তারের বৈশিষ্ট্য পূর্বনির্ধারিত করে।
আপনার নিজস্ব প্রভাব তৈরি করুন
আপনার নিজস্ব এফেক্ট তৈরি করতে, VibrationEffect.Composition এ PRIMITIVE_CLICK এবং PRIMITIVE_TICK এর সিকোয়েন্সগুলিকে একসাথে জুড়ে দিয়ে একটি ডিজাইন কম্পোজ করুন। আপনি addPrimitive(int primitiveID, float scale, int delay) ব্যবহার করে রিপিটেশন এবং অ্যামপ্লিটিউড স্কেলের বৈশিষ্ট্যগুলি অ্যাডজাস্ট করতে পারেন। এর সাপোর্ট Vibrator HAL ইন্টারফেসের CAP_COMPOSE_EFFECTS ক্যাপাবিলিটির উপর নির্ভর করে।
ব্যবহারের ক্ষেত্র ২: সহজে প্রবেশের প্রভাব সহ দীর্ঘ কম্পন
দীর্ঘ কম্পন হলো একটি মসৃণ বিস্তারযুক্ত কম্পন যা ০ থেকে লক্ষ্যমাত্রার বিস্তারে রূপান্তরিত হয়। দীর্ঘ কম্পন উপলব্ধিযোগ্য মনোযোগ-বর্ধক স্পর্শানুভূতি তৈরি করতে পারে। তবে, একটি শান্ত পরিবেশে হঠাৎ দীর্ঘ কম্পন ব্যবহারকারীদের চমকে দিতে পারে এবং প্রায়শই শ্রাব্য গুঞ্জন শব্দ তৈরি করে। আরও মনোরম দীর্ঘ কম্পন তৈরি করতে, দীর্ঘ কম্পনের শুরুতে ইজ-ইন এফেক্ট প্রয়োগ করুন। এটি একটি মসৃণ বিস্তার রূপান্তর তৈরি করে যা ধীরে ধীরে লক্ষ্যমাত্রার বিস্তারের দিকে অগ্রসর হয়।
ইজ-ইন এফেক্ট প্রয়োগ করুন
android.os.Vibrator.hasAmplitudeControl()ব্যবহার করে অ্যামপ্লিচিউড নিয়ন্ত্রণের হার্ডওয়্যার সক্ষমতা যাচাই করুন।- পরিবর্তনশীল বিস্তার সহ সহজীকরণ প্রভাব তৈরি করতে ফলাফলটি অবশ্যই
trueহতে হবে।
- পরিবর্তনশীল বিস্তার সহ সহজীকরণ প্রভাব তৈরি করতে ফলাফলটি অবশ্যই
VibrationEffectব্যবহার করুন।createWaveform(timings[], amplitudes[], int repeat)।চিত্র 5-এ দেখানো অনুযায়ী, ইজ-ইন কার্ভ তৈরি করতে
timings[]এবংamplitudes[]এর ক্রমটি সামঞ্জস্য করুন।

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

চিত্র ৬. অডিও কাপল হ্যাপটিক্সের উদাহরণ।
অডিও-সংযুক্ত হ্যাপটিক্স: বাস্তবায়নের জন্য কিছু পরামর্শ
অডিও-সংযুক্ত হ্যাপটিক্স বাস্তবায়নের জন্য অডিও এবং হ্যাপটিক উভয় চ্যানেলের কন্টেন্ট প্লেব্যাক সম্পর্কে প্রাথমিক ধারণা থাকা প্রয়োজন। নিম্নলিখিত বিষয়গুলো মনে রাখবেন:
MediaPlayerবাSoundPoolক্লাসগুলো ব্যবহার করুন।- একটি বিশেষ মেটাডেটা কী (
ANDROID_HAPTICএবং এর পরে হ্যাপটিক চ্যানেলের সংখ্যা) সহ OGG ফরম্যাটের অ্যাসেটগুলি হ্যাপটিক ডেটার উপস্থিতি নির্দেশ করে এবংMediaPlayerওSoundPoolমাধ্যমে প্লেব্যাকের সুবিধা দেয়।
- একটি বিশেষ মেটাডেটা কী (
audio_policy_configuration.xmlফাইলে হ্যাপটিক্স এবং অডিও প্লেব্যাকের সমর্থন উল্লেখ করুন।-
AUDIO_CHANNEL_OUT_HAPTIC_A|Bহ্যাপটিক্স চ্যানেলসহ একটি আউটপুট প্রোফাইল ব্যবহার করুন। - হ্যাপটিক চ্যানেলযুক্ত আউটপুট স্ট্রিমের ক্ষেত্রে মনে রাখবেন যে, হ্যাপটিক চ্যানেলগুলো ডেটার মধ্যে অতিরিক্ত চ্যানেল হিসেবে উপস্থাপিত হয়।
উদাহরণ
যদি আউটপুট স্ট্রিমের চ্যানেল মাস্কটি দেখতে এইরকম হয়:
AUDIO_CHANNEL_OUT_STEREO_HAPTIC_Aতাহলে প্রতিটি নমুনা দেখতে এইরকম হওয়া উচিত:
AUDIO_LEFT_CHANNEL,AUDIO_RIGHT_CHANNEL,HAPTIC_CHANNEL_A-
হ্যাপটিক চ্যানেলটি প্লে করতে
AudioAttributes.Builder( ).setHapticChannelsMuted(boolean muted)এর মানfalseকরুন।- ডিফল্টরূপে, হ্যাপটিক চ্যানেলগুলি নিঃশব্দ থাকে (
true)। - এর ব্যবহারগুলোর মধ্যে রয়েছে সিঙ্ক্রোনাস হ্যাপটিক্স ও ফিডব্যাকসহ রিংটোন এবং UI সাউন্ড।
- ডিফল্টরূপে, হ্যাপটিক চ্যানেলগুলি নিঃশব্দ থাকে (
ভাইব্রেটর HAL-কে অবশ্যই বাহ্যিক নিয়ন্ত্রণ সমর্থন বাস্তবায়ন করতে হবে।
- HIDL বাস্তবায়নের ক্ষেত্রে,
setExternalControl(bool enabled) generates (Status status)। - AIDL বাস্তবায়নের ক্ষেত্রে,
void setExternalControl(in boolean enabled)ব্যবহার করুন।
- HIDL বাস্তবায়নের ক্ষেত্রে,

চিত্র ৭. অডিও-সংযুক্ত হ্যাপটিক্স বাস্তবায়ন।
অডিও-সংযুক্ত হ্যাপটিক্স: হ্যাপটিকজেনারেটর
HapticGenerator হলো অ্যান্ড্রয়েড ১২-এ প্রবর্তিত একটি অডিও ইফেক্ট, যা একটি অডিও চ্যানেল থেকে হ্যাপটিক ডেটা তৈরি করতে এবং সেটিকে রিয়েল টাইমে অডিও-কাপলড হ্যাপটিকস হিসেবে প্লে করতে পারে। চিত্র ৮-এ যেমন দেখানো হয়েছে, এই ইফেক্টটি AudioTrack এ প্রয়োগ করা হয়:

চিত্র ৮. হ্যাপটিক জেনারেটরের স্থাপত্য।
এই আর্কিটেকচার ভিজ্যুয়ালাইজেশনটি দেখায় যে, আগত ইউজার অডিও স্ট্রিমটি Audio HAL-এ পাঠানোর আগে কোথায় হ্যাপটিক জেনারেটরটি প্রয়োগ করা হয়। AudioMixer যখন অডিও এবং হ্যাপটিক ডেটা আলাদা করে, তার পরে এবং অন্য যেকোনো অডিও এফেক্টের আগে জেনারেটরটি প্রয়োগ করা হয়, এবং এর আউটপুট স্ট্রিমে থাকা পূর্ববর্তী যেকোনো হ্যাপটিক ডেটাকে ওভাররাইড করে।
আপনার হ্যাপটিক জেনারেটর অ্যালগরিদম যেন উচ্চ-মানের হ্যাপটিকস তৈরি করে, তা নিশ্চিত করতে অডিও ওয়েভফর্মে প্রয়োগ করা ফিল্টার চেইনের প্যারামিটারগুলো সমন্বয় করে ডিভাইস ভাইব্রেটর মোটরের সাথে জেনারেশন অ্যালগরিদমটি টিউন করুন। এই বিভাগে এই প্যারামিটারগুলো বিস্তারিতভাবে বর্ণনা করা হয়েছে এবং আপনার হার্ডওয়্যার স্পেসিফিকেশন অনুযায়ী কীভাবে এগুলো টিউন করতে হয় তা ব্যাখ্যা করা হয়েছে।
ব্যান্ড-পাস ফিল্টারের জন্য অনুনাদ কম্পাঙ্ক
ভাইব্রেটর রেজোনেন্ট ফ্রিকোয়েন্সি হলো সেই ফ্রিকোয়েন্সি, যেটিতে একটি হ্যাপটিক অ্যাকচুয়েটরের আউটপুট সর্বোচ্চ হয়। এই প্যারামিটারটি একটি অ্যান্টি-রেজোনেটরকে অ্যাডজাস্ট করে রেসপন্স ট্রান্সফার ফাংশনটিকে আংশিকভাবে ফ্ল্যাট করে, যার ফলে একটি বিস্তৃত ব্যান্ডউইথ পাওয়া যায়। অ্যান্ড্রয়েড ফ্রেমওয়ার্ক স্বয়ংক্রিয়ভাবে এই মানটিকে ভাইব্রেটর HAL মেথড
IVibrator.getResonantFrequencyএর আউটপুটের সাথে লিঙ্ক করে দেয়।এই প্যারামিটারটির ডিফল্ট মান হলো ১৫০ হার্টজ । আপনি কোডে এটি পরিবর্তন করতে পারেন।
ধীর খামের জন্য স্বাভাবিকীকরণ শক্তি
এই প্যারামিটারটি পার্শিয়াল নর্মালাইজেশন (অটোমেটিক গেইন কন্ট্রোল)-এর এক্সপোনেন্ট নির্ধারণ করে। এর ডিফল্ট মান হলো -০.৮ , যার অর্থ হলো এই গেইন কন্ট্রোল স্টেপের মাধ্যমে ডাইনামিক রেঞ্জের ৮০% পরিবর্তন দূর করা হয়। আপনি কোডে এটি পরিবর্তন করতে পারেন।
ব্যান্ড-স্টপ ফিল্টারের জন্য Q ফ্যাক্টর
ভাইব্রেটরের কোয়ালিটি ফ্যাক্টর (Q ফ্যাক্টর) দুটি প্যারামিটার দ্বারা নির্ধারিত হয়:
জিরো কিউ (Zero Q), হলো ব্যান্ড-স্টপ ফিল্টারের জিরোগুলোর কোয়ালিটি ফ্যাক্টর যা রেজোন্যান্সকে আংশিকভাবে বাতিল করে দেয়।
পোল Q, ব্যান্ড-স্টপ ফিল্টারের পোলগুলির কোয়ালিটি ফ্যাক্টর
এই দুটি মানের অনুপাত নিম্ন ফ্রিকোয়েন্সিগুলিকে বুস্ট করতে এবং অ্যালগরিদমের প্রতিক্রিয়া বিস্তৃত করতে রেজোন্যান্স দমনকে সীমিত করে। উদাহরণস্বরূপ, জিরো Q-এর জন্য 8 এবং পোল Q-এর জন্য 4 -এর ডিফল্ট মান 2 -এর একটি অনুপাত তৈরি করে, যা রেজোন্যান্স দমনকে 2 (6 dB) গুণ কমিয়ে দেয়। অ্যান্ড্রয়েড ফ্রেমওয়ার্ক উভয় মানকেই Vibrator HAL মেথড
IVibrator.getQFactorএর আউটপুটের সাথে সংযুক্ত করে।যদি ডিফল্ট মানগুলো আপনার ডিভাইসের মোটরের শক্তির হ্রাসকে বিবেচনা না করে, তাহলে আমরা একই সাথে উভয় মান পরিবর্তন করার পরামর্শ দিই, এবং হয় উভয়ই বাড়ান অথবা উভয়ই কমান। Zero Q এবং Pole Q-এর অনুপাত ১- এর চেয়ে বেশি হওয়া উচিত। আপনি কোডে এটি পরিবর্তন করতে পারেন।
বিকৃতির জন্য কোণার কম্পাঙ্ক
কর্নার ফ্রিকোয়েন্সি একটি লো-পাস ফিল্টারের মাধ্যমে প্রয়োগ করা হয়, যা কিউবিক ডিসটর্শন ব্যবহার করে নিম্ন-স্তরের কম্পন দমন করে এবং উচ্চ-স্তরের কম্পনকে উন্নত করে। এর ডিফল্ট মান হলো ৩০০ হার্জ । আপনি কোডে এটি পরিবর্তন করতে পারেন।
বিকৃতির জন্য ইনপুট গেইন এবং কিউব থ্রেশহোল্ড
ইনপুট ওয়েভফর্মে প্রয়োগ করা একটি নন-লিনিয়ার ডিসটর্শন ফিল্টার এই প্যারামিটারগুলো ব্যবহার করে, যা নিম্ন-ফ্রিকোয়েন্সির সিগন্যালগুলোর বিস্তার কমিয়ে দেয় এবং উচ্চ-ফ্রিকোয়েন্সির সিগন্যালগুলোর বিস্তার বাড়িয়ে দেয়।
- ইনপুট গেইন ফ্যাক্টরের ডিফল্ট মান হলো ০.৩ ।
- কিউব থ্রেশহোল্ডের ডিফল্ট মান হলো ০.১ ।
আমরা উভয় মান একসাথে পরিবর্তন করার পরামর্শ দিই। এগুলো কোডে পাওয়া যাবে।
এই ফিল্টার দ্বারা প্রয়োগকৃত ফাংশন সম্পর্কে আরও তথ্যের জন্য, কোডের বাস্তবায়ন দেখুন।
এই দুটি প্যারামিটার কীভাবে আউটপুটকে প্রভাবিত করে সে সম্পর্কে আরও জানতে, আমরা ফিল্টারগুলির ফ্রিকোয়েন্সি রেসপন্স প্লট করার এবং বিভিন্ন প্যারামিটার মানের সাথে ফ্রিকোয়েন্সি রেসপন্সগুলি কীভাবে পরিবর্তিত হয় তা পর্যবেক্ষণ করার পরামর্শ দিই।
বিকৃতির জন্য আউটপুট লাভ
এই প্যারামিটারটি চূড়ান্ত কম্পন বিস্তার নিয়ন্ত্রণ করে। এটি একটি চূড়ান্ত গেইন যা একটি সফট লিমিটারের পরে প্রয়োগ করা হয়, যা কম্পন বিস্তারকে ১-এর কম পর্যন্ত সীমিত রাখে। এর ডিফল্ট মান হলো ১.৫ , এবং আপনি কোডে এটি পরিবর্তন করতে পারেন।
কম্পনটি খুব সূক্ষ্ম হলে মানটি বাড়িয়ে দিন। যদি অ্যাকচুয়েটরের হার্ডওয়্যারের খটখট শব্দ শুনতে পান, তাহলে মানটি কমিয়ে দিন।