হ্যাপটিক ফ্রেমওয়ার্কের জন্য ইউএক্স ফাউন্ডেশন

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

ইউএক্স নীতি

চিত্র 1. বর্তমান নীতি।

নিম্নলিখিত সারণীতে সমস্ত উপলব্ধ হ্যাপটিক্স API তালিকা করা হয়েছে:

API পদ্ধতি এবং ধ্রুবক বছর যোগ করা হয়েছে
android.view.HapticFeedbackConstants
  • CONTEXT_CLICK
  • CLOCK_TICK
  • VIRTUAL_KEY
  • KEYBOARD_TAP
  • LONG_PRESS
2016 এর আগে
  • KEYBOARD_PRESS
  • KEYBOARD_RELEASE
  • TEXT_HANDLE_MOVE
  • VIRTUAL_KEY_RELEASE
2017 (Android 8)
  • CONFIRM
  • REJECT
  • GESTURE_START
  • GESTURE_END
2020 (Android 11)
android.View
  • performHapticFeedback()
2016 এর আগে
android.os.Vibrator
  • vibrate()
  • hasVibrator()
2016 এর আগে
  • hasAmplitudeControl()
2017 (Android 8)
  • areAllEffectsSupported()
  • areAllPrimitivesSupported()
  • areEffectsSupported()
  • arePrimitivesSupported()
2020 (Android 11)
android.os.VibrationEffect
  • createOneShot()
  • createWaveform()
2017 (Android 8)
  • EFFECT_TICK
  • EFFECT_CLICK
  • EFFECT_HEAVY_CLICK
  • EFFECT_DOUBLE_CLICK
  • createPredefined()
2019 (Android 10)
android.os.VibrationEffect.Composition
  • PRIMITIVE_TICK
  • PRIMITIVE_CLICK
  • addPrimitive()
  • compose()
2020 (Android 11)
android.media.AudioAttributes.Builder
  • setHapticChannelsMuted()
2019 (Android 10)

Buzzy কম্পন

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

পরিষ্কার হ্যাপটিক্স

ক্লিয়ার হ্যাপটিক্স বিচ্ছিন্ন অবস্থার পরিবর্তনের সংবেদনকে সমর্থন করে (উদাহরণস্বরূপ, পাওয়ার চালু এবং বন্ধ প্রক্রিয়া চলাকালীন বাইনারি পরিবর্তন)। বিচ্ছিন্ন সামর্থ্যের প্রকৃতির কারণে, স্পষ্ট হ্যাপটিক্স একটি একক সত্তা হিসাবে উত্পন্ন হয় (উদাহরণস্বরূপ, প্রতি একটি ইনপুট ইভেন্টে একটি হ্যাপটিক প্রভাব)।

অ্যানড্রয়েডের লক্ষ্য হল গুঞ্জন বা আড়ম্বরপূর্ণ সংবেদনগুলির পরিবর্তে শক্তিশালী, তবুও তীক্ষ্ণ সংবেদন সহ স্পষ্ট হ্যাপটিক্স প্রদান করা।

স্পষ্ট হ্যাপটিক্স সমর্থন করার জন্য তৈরি করা পূর্বনির্ধারিত হ্যাপটিক ধ্রুবকগুলির মধ্যে নিম্নলিখিত উপাদানগুলি অন্তর্ভুক্ত রয়েছে।

HapticFeedbackConstants কনস্ট্যান্টে:

  • 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

VibrationEffect ইফেক্টে:

  • EFFECT_CLICK
  • EFFECT_DOUBLE_CLICK
  • EFFECT_HEAVY_CLICK
  • EFFECT_TICK

অ্যান্ড্রয়েড ইকোসিস্টেমে হ্যাপটিক্সের সামগ্রিক গুণমান বাড়ানোর জন্য ডিভাইস নির্মাতা এবং ডেভেলপারদের মধ্যে সাধারণ জ্ঞান তৈরি করা গুরুত্বপূর্ণ। মৌলিক চেকলিস্ট , হার্ডওয়্যার মূল্যায়ন , এবং CDD ব্যবহার করুন। হ্যাপটিক বাস্তবায়ন সম্পর্কে আরও জানতে।

প্রেস এবং রিলিজ

চিত্র 2. টিপে এবং মুক্তি।

সমৃদ্ধ হ্যাপটিক্স

রিচ হ্যাপটিক্স হল একটি ক্রমবর্ধমান হ্যাপটিক্স বিভাগ যা একক আবেগ-ভিত্তিক প্রভাবের বাইরে যায়। অ্যান্ড্রয়েডের লক্ষ্য উচ্চ কম্পোজেবিলিটি এবং সূক্ষ্ম স্তরের গ্রানুলারিটির সাথে সামঞ্জস্যযোগ্য সমৃদ্ধ হ্যাপটিক্সকে সমর্থন করা। নিম্নলিখিত ব্যবহারের ক্ষেত্রে Android 11 বা তার নিচের সংস্করণে সমর্থিত।

রিচ হ্যাপটিক্স

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

টেনে আনা এবং সোয়াইপ করা

চিত্র 4. টেনে আনা এবং সোয়াইপ করা।

কেস 1 ব্যবহার করুন: স্লাইডিং টেক্সচার

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

যদি স্বতন্ত্র প্রভাব খাস্তার পরিবর্তে গুঞ্জন হয়, তাহলে পুনরাবৃত্তির মধ্যবর্তী ব্যবধানগুলি মুছে ফেলার সম্ভাবনা রয়েছে। ফলাফল একাধিক বিচ্ছিন্ন সংকেতের পরিবর্তে একটি দীর্ঘ গুঞ্জন।

যদি প্রশস্ততা যথেষ্ট সূক্ষ্ম না হয়, তাহলে অনুভূত হ্যাপটিক শক্তি পুনরাবৃত্তির মাধ্যমে তৈরি হয়, যার ফলে পুনরাবৃত্তির শেষে অপ্রতিরোধ্যভাবে শক্তিশালী হ্যাপটিক্স হয়।

সোয়াইপ এবং ড্র্যাগ অঙ্গভঙ্গির জন্য একটি সারফেস হ্যাপটিক টেক্সচার প্রয়োগ করুন

HapticFeedbackConstantsCLOCK_TICK এবং TEXT_HANDLE_MOVE ব্যবহার করুন। এই ধ্রুবকগুলি পুনরাবৃত্তি এবং প্রশস্ততার বৈশিষ্ট্যগুলি পূর্বনির্ধারিত করে।

আপনার নিজস্ব প্রভাব তৈরি করুন

আপনার নিজের প্রভাব তৈরি করতে, VibrationEffect.Composition PRIMITIVE_CLICK এবং PRIMITIVE_TICK এর সিকোয়েন্সগুলিকে একসাথে স্ট্রিং করে একটি ডিজাইন রচনা করুন। আপনি addPrimitive(int primitiveID, float scale, int delay) ব্যবহার করে পুনরাবৃত্তি এবং প্রশস্ততা স্কেলের বৈশিষ্ট্যগুলি সামঞ্জস্য করতে পারেন। সমর্থন ভাইব্রেটর HAL ইন্টারফেসের CAP_COMPOSE_EFFECTS ক্ষমতার উপর নির্ভর করে।

কেস 2 ব্যবহার করুন: সহজ-ইন প্রভাব সহ দীর্ঘ কম্পন

দীর্ঘ কম্পন হল একটি মসৃণ প্রশস্ততা কম্পন যা 0 থেকে লক্ষ্য প্রশস্ততায় রূপান্তরিত হয়। দীর্ঘ কম্পন বোধগম্য মনোযোগী হ্যাপটিক্স তৈরি করতে পারে। যাইহোক, হঠাৎ একটি দীর্ঘ কম্পন একটি শান্ত পরিবেশে ব্যবহারকারীদের চমকে দিতে পারে এবং প্রায়শই শ্রবণযোগ্য গুঞ্জন শব্দ তৈরি করে। আরও মনোরম দীর্ঘ কম্পন তৈরি করতে, দীর্ঘ কম্পনের শুরুতে ইজি-ইন প্রভাব প্রয়োগ করুন। এটি একটি মসৃণ প্রশস্ততা পরিবর্তন করে যা লক্ষ্য প্রশস্ততার দিকে তৈরি করে।

সহজ-ইন প্রভাব প্রয়োগ করুন

  1. android.os.Vibrator.hasAmplitudeControl() দিয়ে প্রশস্ততা নিয়ন্ত্রণের হার্ডওয়্যার ক্ষমতা পরীক্ষা করুন।

    • পরিবর্তিত প্রশস্ততার সাথে সহজে প্রভাব তৈরি করতে ফলাফলটি true হতে হবে।
  2. VibrationEffect ব্যবহার করুন। createWaveform(timings[], amplitudes[], int repeat)

  3. চিত্র 5-এ দেখানো হিসাবে সহজ-ইন বক্ররেখা তৈরি করতে timings[] এবং amplitudes[] সিরিজ সামঞ্জস্য করুন।

দীর্ঘ কম্পন

চিত্র 5. দীর্ঘ কম্পন সহজ-ইন বক্ররেখা.

কেস 3 ব্যবহার করুন: অডিও-কাপল্ড হ্যাপটিক্স

অডিও-কাপল্ড হ্যাপটিক্স হল হ্যাপটিক প্যাটার্ন যা ব্যবহারকারীর দৃষ্টি আকর্ষণ করার জন্য অডিওর ছন্দের সাথে মিলিত হয়।

অডিও-কাপলড হ্যাপটিক্স: সুবিধা

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

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

অডিও দম্পতি

চিত্র 6. অডিও কাপল হ্যাপটিক্স উদাহরণ।

অডিও-কাপলড হ্যাপটিক্স: বাস্তবায়নের জন্য টিপস

অডিও-কাপলড হ্যাপটিক্স বাস্তবায়নের জন্য অডিও এবং হ্যাপটিক চ্যানেল উভয়ের বিষয়বস্তু প্লেব্যাকের প্রাথমিক বোঝার প্রয়োজন। নিম্নলিখিত বিষয়গুলি মনে রাখবেন:

  • 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 সাউন্ড অন্তর্ভুক্ত।
  • ভাইব্রেটর এইচএএলকে অবশ্যই বাহ্যিক নিয়ন্ত্রণ সমর্থন বাস্তবায়ন করতে হবে।

অডিও কাপলড হ্যাপটিক্স

চিত্র 7. অডিও-কাপল্ড হ্যাপটিক্স বাস্তবায়ন করা।

অডিও-কাপলড হ্যাপটিক্স: হ্যাপটিক জেনারেটর

HapticGenerator হল Android 12-এ প্রবর্তিত একটি অডিও প্রভাব যা একটি অডিও চ্যানেল থেকে হ্যাপটিক ডেটা তৈরি করতে পারে এবং অডিও-কাপল্ড হ্যাপটিক্স হিসাবে রিয়েল টাইমে চালাতে পারে। চিত্র 8 এ চিত্রিত হিসাবে AudioTrack প্রভাব প্রয়োগ করা হয়েছে:

Haptic Generator architecture

চিত্র 8. হ্যাপটিক জেনারেটর আর্কিটেকচার।

এই আর্কিটেকচার ভিজ্যুয়ালাইজেশন দেখায় যেখানে হ্যাপটিক জেনারেটরটি অডিও HAL-এ পাঠানোর আগে আগত ব্যবহারকারীর অডিও স্ট্রীমে প্রয়োগ করা হয়। AudioMixer অডিও এবং হ্যাপটিক ডেটা বিভক্ত করার পরে এবং অন্য কোনও অডিও প্রভাবের আগে জেনারেটর প্রয়োগ করা হয় এবং এর আউটপুট স্ট্রীমের আগের কোনও হ্যাপটিক ডেটাকে ওভাররাইড করে।

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

  • ব্যান্ড-পাস ফিল্টারের জন্য অনুরণিত ফ্রিকোয়েন্সি

    ভাইব্রেটর রেজোন্যান্ট ফ্রিকোয়েন্সি হল সেই ফ্রিকোয়েন্সি যেখানে হ্যাপটিক অ্যাকচুয়েটরের সর্বোচ্চ আউটপুট থাকে। এই পরামিতি একটি বিস্তৃত ব্যান্ডউইথ পেতে, প্রতিক্রিয়া স্থানান্তর ফাংশনকে আংশিকভাবে সমতল করতে একটি অ্যান্টি-রিজোনেটর সামঞ্জস্য করে। অ্যান্ড্রয়েড ফ্রেমওয়ার্ক স্বয়ংক্রিয়ভাবে এই মানটিকে ভাইব্রেটর HAL পদ্ধতি IVibrator.getResonantFrequency এর আউটপুটের সাথে লিঙ্ক করে।

    এই প্যারামিটারের জন্য ডিফল্ট মান হল 150 Hz । আপনি কোডে এটি পরিবর্তন করতে পারেন।

  • ধীর খামের জন্য স্বাভাবিককরণ শক্তি

    এই প্যারামিটারটি আংশিক স্বাভাবিককরণে (স্বয়ংক্রিয় লাভ নিয়ন্ত্রণ) সূচক নির্ধারণ করে। এর ডিফল্ট মান হল -0.8 , যার মানে এই লাভ কন্ট্রোল ধাপের মাধ্যমে গতিশীল পরিসরের বৈচিত্র্যের 80% মুছে ফেলা হয়। আপনি কোডে এটি পরিবর্তন করতে পারেন।

  • ব্যান্ড-স্টপ ফিল্টারের জন্য Q ফ্যাক্টর

    ভাইব্রেটর মানের ফ্যাক্টর (Q ফ্যাক্টর) দুটি পরামিতি দ্বারা নির্ধারিত হয়:

    • জিরো কিউ, ব্যান্ড-স্টপ ফিল্টারে শূন্যের গুণমান ফ্যাক্টর যা আংশিকভাবে অনুরণন বাতিল করে

    • মেরু Q, ব্যান্ড-স্টপ ফিল্টারে খুঁটির গুণমান ফ্যাক্টর

    এই দুটি মানের অনুপাত নিম্ন ফ্রিকোয়েন্সি বাড়াতে এবং অ্যালগরিদম প্রতিক্রিয়া বিস্তৃত করতে অনুরণন দমনকে সীমাবদ্ধ করে। উদাহরণস্বরূপ, শূন্য Q-এর জন্য 8 এবং মেরু Q-এর জন্য 4- এর ডিফল্ট মান 2 এর অনুপাত উৎপন্ন করে, যা 2 (6 dB) ফ্যাক্টর দ্বারা অনুরণন দমনকে সীমিত করে। অ্যান্ড্রয়েড ফ্রেমওয়ার্ক ভাইব্রেটর এইচএএল পদ্ধতি IVibrator.getQFactor এর আউটপুট উভয় মানকে লিঙ্ক করে।

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

  • বিকৃতির জন্য কোণার ফ্রিকোয়েন্সি

    কোণার ফ্রিকোয়েন্সি একটি নিম্ন-পাস ফিল্টার দ্বারা প্রয়োগ করা হয় যা নিম্ন-স্তরের কম্পনকে দমন করে এবং একটি ঘন বিকৃতি ব্যবহার করে উচ্চ স্তরকে উন্নত করে। এটি ডিফল্ট 300 Hz . আপনি কোডে এটি পরিবর্তন করতে পারেন।

  • ইনপুট লাভ এবং বিকৃতির জন্য কিউব থ্রেশহোল্ড

    এই পরামিতিগুলি ইনপুট ওয়েভফর্মে প্রয়োগ করা একটি ননলিনিয়ার বিকৃতি ফিল্টার দ্বারা ব্যবহৃত হয় যা নিম্ন ফ্রিকোয়েন্সি সংকেতগুলির প্রশস্ততাকে স্যাঁতসেঁতে করে এবং উচ্চ-ফ্রিকোয়েন্সি সংকেতগুলির প্রশস্ততা বাড়ায়।

    • ইনপুট লাভ ফ্যাক্টরের ডিফল্ট মান হল 0.3
    • কিউব থ্রেশহোল্ডের ডিফল্ট মান হল 0.1

    আমরা উভয় মান একসাথে সংশোধন করার পরামর্শ দিই। এগুলো কোডে পাওয়া যাবে।

    এই ফিল্টার দ্বারা প্রয়োগ করা ফাংশন সম্পর্কে আরও তথ্যের জন্য, কোডে বাস্তবায়ন পড়ুন।

    এই দুটি পরামিতি কিভাবে আউটপুটকে প্রভাবিত করে সে সম্পর্কে আরও জানতে, আমরা ফিল্টারগুলির ফ্রিকোয়েন্সি প্রতিক্রিয়াগুলি প্লট করার এবং বিভিন্ন প্যারামিটার মানগুলির সাথে ফ্রিকোয়েন্সি প্রতিক্রিয়াগুলি কীভাবে পরিবর্তিত হয় তা পর্যবেক্ষণ করার পরামর্শ দিই৷

  • বিকৃতির জন্য আউটপুট লাভ

    এই পরামিতি চূড়ান্ত কম্পন প্রশস্ততা নিয়ন্ত্রণ করে। এটি একটি সফ্ট লিমিটারের পরে প্রয়োগ করা একটি চূড়ান্ত লাভ যা কম্পন প্রশস্ততাকে 1 এর কম সীমাবদ্ধ করে। এর ডিফল্ট মান হল 1.5 এবং আপনি কোডে এটি পরিবর্তন করতে পারেন।

    যদি কম্পন খুব সূক্ষ্ম হয়, মান বাড়ান। আপনি যদি অ্যাকচুয়েটর হার্ডওয়্যার র্যাটলিং শুনতে পান তবে মান হ্রাস করুন।