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

হ্যাপটিক্সের চারপাশে নির্মিত সমস্ত অ্যান্ড্রয়েড ফ্রেমওয়ার্ক উন্নতিগুলি 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 এবং আপনি কোডে এটি পরিবর্তন করতে পারেন।

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

,

হ্যাপটিক্সের চারপাশে নির্মিত সমস্ত অ্যান্ড্রয়েড ফ্রেমওয়ার্ক উন্নতিগুলি 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 এবং আপনি কোডে এটি পরিবর্তন করতে পারেন।

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

,

হ্যাপটিক্সের চারপাশে নির্মিত সমস্ত অ্যান্ড্রয়েড ফ্রেমওয়ার্ক উন্নতিগুলি 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 এবং আপনি কোডে এটি পরিবর্তন করতে পারেন।

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

,

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

ইউএক্স নীতি

চিত্র 1। বর্তমান নীতিগুলি।

নিম্নলিখিত টেবিলটি সমস্ত উপলভ্য হ্যাপটিক্স এপিআই তালিকাভুক্ত করে:

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 (অ্যান্ড্রয়েড 8)
  • CONFIRM
  • REJECT
  • GESTURE_START
  • GESTURE_END
2020 (অ্যান্ড্রয়েড 11)
android.View
  • performHapticFeedback()
2016 এর আগে
android.os.Vibrator
  • vibrate()
  • hasVibrator()
2016 এর আগে
  • hasAmplitudeControl()
2017 (অ্যান্ড্রয়েড 8)
  • areAllEffectsSupported()
  • areAllPrimitivesSupported()
  • areEffectsSupported()
  • arePrimitivesSupported()
2020 (অ্যান্ড্রয়েড 11)
android.os.VibrationEffect
  • createOneShot()
  • createWaveform()
2017 (অ্যান্ড্রয়েড 8)
  • EFFECT_TICK
  • EFFECT_CLICK
  • EFFECT_HEAVY_CLICK
  • EFFECT_DOUBLE_CLICK
  • createPredefined()
2019 (অ্যান্ড্রয়েড 10)
android.os.VibrationEffect.Composition
  • PRIMITIVE_TICK
  • PRIMITIVE_CLICK
  • addPrimitive()
  • compose()
2020 (অ্যান্ড্রয়েড 11)
android.media.AudioAttributes.Builder
  • setHapticChannelsMuted()
2019 (অ্যান্ড্রয়েড 10)

বুজি কম্পন

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

ক্লিয়ার হ্যাপটিক্স

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

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

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

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

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

টিপুন এবং প্রকাশ করুন

চিত্র 2। টিপুন এবং প্রকাশ করা।

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

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

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

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

টেনে নিয়ে যাওয়া এবং সোয়াইপিং

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

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

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

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

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

সোয়াইপ এবং টেনে আনার জন্য একটি পৃষ্ঠ হ্যাপটিক টেক্সচার প্রয়োগ করুন

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

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

আপনার নিজের প্রভাব তৈরি করতে, VibrationEffect.Composition PRIMITIVE_CLICK এবং PRIMITIVE_TICK এর সিকোয়েন্সগুলি একসাথে স্ট্রিং করে একটি নকশা রচনা করুন। আপনি addPrimitive(int primitiveID, float scale, int delay) ব্যবহার করে পুনরাবৃত্তি এবং প্রশস্ততা স্কেলের বৈশিষ্ট্যগুলি সামঞ্জস্য করতে পারেন। সমর্থন ভাইব্রেটার এইচএল ইন্টারফেসের 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 পরে বেশ কয়েকটি হ্যাপটিক চ্যানেল অনুসরণ করে) ওজিজি ফর্ম্যাটে সম্পদগুলি 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 ) হয়।
    • ব্যবহারের ক্ষেত্রে সিঙ্ক্রোনাস হ্যাপটিকস এবং প্রতিক্রিয়া সহ রিংটোন এবং ইউআই শব্দ অন্তর্ভুক্ত।
  • ভাইব্রেটার এইচএল অবশ্যই বাহ্যিক নিয়ন্ত্রণ সমর্থন প্রয়োগ করতে হবে।

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

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

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

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

Haptic Generator architecture

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

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

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

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

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

    এই প্যারামিটারের জন্য ডিফল্ট মান 150 হার্জ । আপনি কোডটিতে এটি সংশোধন করতে পারেন।

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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