পিসওয়াইজ লিনিয়ার এনভেলপ এফেক্ট প্রয়োগ করা

পিসওয়াইজ লিনিয়ার এনভেলপ (PWLE) এফেক্ট হল সময়ের সাথে সাথে ভাইব্রেশন ফ্রিকোয়েন্সি ও অ্যাক্সিলারেশন নির্ধারণকারী পয়েন্টের ক্রম। PWLE আরও সমৃদ্ধ ও ডায়নামিক হ্যাপটিক ফিডব্যাক প্রদান করে।

PWLE এফেক্ট তৈরি করতে সাহায্য করার জন্য Android 16 এবং এর পরবর্তী যেকোনও ভার্সনে দুটি অ্যাপ ডেভেলপার API প্রদান করা হয়:

  • প্রাথমিক PWLE API: সহজ, তবে সীমাবদ্ধতা আছে। দ্রুত শুরু করার জন্য উপযুক্ত। এটি BasicEnvelopeBuilder-এ উপলভ্য।
  • উন্নত PWLE API: আরও বেশি কন্ট্রোল ও নমনীয়তা, হ্যাপটিক্স সম্পর্কে জ্ঞান ও হার্ডওয়্যার সম্পর্কে কিছু ধারণা থাকতে হবে। WaveformEnvelopeBuilder-এ উপলভ্য।

এইসব API কাজ করার জন্য, ডিভাইসে নিম্নলিখিত HAL API প্রয়োগ করতে হবে:

  • রেজোন্যান্ট ফ্রিকোয়েন্সি: অ্যাকচুয়েটরের রেজোন্যান্ট ফ্রিকোয়েন্সি প্রদান করে।
  • আউটপুট অ্যাক্সিলারেশন ম্যাপিংয়ের ফ্রিকোয়েন্সি (FOAM): এটি ডিভাইসের জন্য কম্পনের ফ্রিকোয়েন্সি থেকে সর্বাধিক অর্জনযোগ্য আউটপুট অ্যাক্সিলারেশনের ম্যাপিং প্রদান করে।
  • PWLE কম্পোজ করা: ভাইব্রেশনের PWLE ওয়েভফর্ম দ্বারা সংজ্ঞায়িত ভাইব্রেশন প্লে করে।

Basic PWLE API

হার্ডওয়্যার বা মানুষের পারসেপশনের সূক্ষ্ম বিষয়গুলি না জেনেও PWLE এফেক্ট তৈরি করার একটি দ্রুত উপায় হল, ডেভেলপাররা এইসব প্যারামিটার ব্যবহার করে সংজ্ঞায়িত করা মৌলিক PWLE API ব্যবহার করতে পারেন:

  • [০, ১] রেঞ্জে ইনটেনসিটি ভ্যালু কম্পনের অনুভূত শক্তিকে বোঝায়। যেমন, ০.৫ ভ্যালুকে ডিভাইসের মাধ্যমে অর্জন করা যায় এমন গ্লোবাল সর্বাধিক ইনটেনসিটির অর্ধেক হিসেবে বিবেচনা করা হয়।
  • [০, ১] রেঞ্জের মধ্যে তীক্ষ্ণতা ভ্যালু কম্পনের স্পষ্টতা দেখায়। মান কম হলে ভাইব্রেশন আরও মসৃণ হয়, অন্যদিকে মান বেশি হলে আরও তীক্ষ্ণ অনুভূতি তৈরি হয়।
  • সময়সীমা হল শেষ PWLE পয়েন্ট (অর্থাৎ, ইনটেনসিটি ও শার্পনেস পেয়ার) থেকে নতুন পয়েন্টে ট্রানজিশন করতে যত সময় লাগে, তা মিলিসেকেন্ডে দেখানো হয়।

এখানে একটি ওয়েভফর্মের উদাহরণ দেওয়া হল যা ৫০০ মিলি সেকেন্ড ধরে কম পিচ থেকে বেশি পিচ সর্বাধিক-শক্তি সম্পন্ন ভাইব্রেশনে ইনটেনসিটি বাড়ায় এবং তারপরে ১০০ মিলি সেকেন্ড ধরে তা কমিয়ে ০ (বন্ধ) করে দেয়:

VibrationEffect effect = new VibrationEffect.BasicEnvelopeBuilder()
          .setInitialSharpness(0.0f)
          .addControlPoint(1.0f, 1.0f, 500)
          .addControlPoint(0.0f, 1.0f, 100)
          .build();

সীমাবদ্ধতা

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

সম্পূর্ণ Android ইকোসিস্টেম জুড়ে PWLE এফেক্ট রেন্ডার করার ক্ষেত্রে ধারাবাহিকতা নিশ্চিত করতে, ফ্রেমওয়ার্কের প্রয়োজন হল, এই ফিচার কাজ করে এমন ডিভাইস যেন PWLE পয়েন্টের মধ্যে ন্যূনতম ২০ মিলি সেকেন্ডের সময়সীমা এবং PWLE এফেক্টের জন্য অন্তত ১৬টি পয়েন্ট ম্যানেজ করতে পারে। এইসব প্রয়োজনীয়তা VTS টেস্ট দ্বারা এনফোর্স করা হয়, যা Android ডিভাইস জুড়ে নির্ভরযোগ্য PWLE এফেক্ট নিশ্চিত করতে সাহায্য করে।

Advanced PWLE API

হ্যাপটিকের ব্যাপারে উন্নত জ্ঞান থাকা ডেভেলপাররা নিম্নলিখিত মানদণ্ড ব্যবহার করে PWLE এফেক্টকে সংজ্ঞায়িত করতে পারেন:

  • [০, ১] রেঞ্জে বিস্তার ভ্যালু, ডিভাইস FOAM দ্বারা নির্ধারিত নির্দিষ্ট ফ্রিকোয়েন্সিতে অর্জনযোগ্য শক্তিকে উপস্থাপন করে। যেমন, ০.৫ ভ্যালু সর্বাধিক আউটপুট অ্যাক্সিলারেশনের অর্ধেক জেনারেট করে যা প্রদত্ত ফ্রিকোয়েন্সিতে পাওয়া যেতে পারে।
  • ফ্রিকোয়েন্সি সরাসরি হার্টজে উল্লেখ করা হয়।
  • সময়সীমা হল শেষ PWLE পয়েন্ট থেকে নতুন পয়েন্টে ট্রানজিট হতে যত সময় লাগে, মিলিসেকেন্ডে।

এখানে একটি ওয়েভফর্মের উদাহরণ দেওয়া হল যা ১০০ মিলি সেকেন্ড ধরে ১২০ Hz-এ ভাইব্রেটরকে বন্ধ থেকে সম্পূর্ণ অ্যামপ্লিটিউডে র‍্যাম্প করে, সেই অবস্থা ২০০ মিলি সেকেন্ড ধরে রাখে এবং তারপর ১০০ মিলি সেকেন্ড ধরে আবার র‍্যাম্প করে:

VibrationEffect effect = new VibrationEffect.WaveformEnvelopeBuilder()
          .addControlPoint(1.0f, 120f, 100)
          .addControlPoint(1.0f, 120f, 200)
          .addControlPoint(0.0f, 120f, 100)
          .build();

সীমাবদ্ধতা

ফ্রেমওয়ার্ক ডেভেলপারদের দেওয়া ফ্রিকোয়েন্সি ও অ্যামপ্লিটিউড ভ্যালু পরিবর্তন করে না তবে মসৃণ ট্রানজিশন নিশ্চিত করতে ০ অ্যামপ্লিটিউড স্টার্টিং পয়েন্ট যোগ করে।

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

ফ্রিকোয়েন্সি থেকে আউটপুট অ্যাক্সিলারেশন ম্যাপিং (FOAM)

PWLE API-কে সাপোর্ট করার জন্য, আউটপুট অ্যাক্সিলারেশন ক্ষমতার ক্ষেত্রে ডিভাইসের ফ্রিকোয়েন্সির সঠিক উপস্থাপনা অপরিহার্য। এই বিভাগে এই ডেটার গুরুত্ব, PWLE API কীভাবে এটি ব্যবহার করে এবং এটি জেনারেট করার প্রসেস সম্পর্কে বিস্তারিত বলা হয়েছে।

ম্যাপিং বোঝা

PWLE এফেক্ট কাজ করে এমন ডিভাইসে আউটপুট অ্যাক্সিলারেশন ম্যাপের (FOAM) জন্য ফ্রিকোয়েন্সি প্রদান করতে হবে। FOAM হল HAL-এর তৈরি করা একটি ডেটা স্ট্রাকচার যা সেই ফ্রিকোয়েন্সিতে অ্যাকচুয়েটরের সর্বাধিক অর্জনযোগ্য আউটপুট অ্যাক্সিলারেশন (G পিক-এ) সহ কম্পনের ফ্রিকোয়েন্সি (হার্টজে) ম্যাপ করে। সাপোর্ট করা ফ্রিকোয়েন্সি রেঞ্জের জন্য কীভাবে ভাইব্রেশন আউটপুট আলাদা আলাদা হয় তা বোঝা এবং PWLE API-এর প্রাথমিক সংজ্ঞা দেওয়ার জন্য এই ম্যাপটি খুবই গুরুত্বপূর্ণ।

নিচের প্লটে একটি সাধারণ রেসোন্যান্ট অ্যাকচুয়েটরের জন্য FOAM-এর উদাহরণ দেখানো হয়েছে, মোটরকে সুরক্ষিত রাখতে ইনপুট ভোল্টেজ রেসোন্যান্ট ফ্রিকোয়েন্সির আশেপাশে সীমিত রাখা হয়েছে:

উদাহরণ
ফোম

ছবি ১. সাধারণ রেসোন্যান্ট অ্যাকচুয়েটরের জন্য FOAM-এর উদাহরণ।

FOAM তিনটি মূল উদ্দেশ্য পূরণ করে:

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

FOAM এবং প্রাথমিক PWLE API

ভাইব্রেশন এফেক্ট তৈরি করার ক্ষেত্রে FOAM গুরুত্বপূর্ণ ভূমিকা পালন করে। এটি বেসিক এনভেলপ API-এর জন্য শার্পনেস রেঞ্জ গণনা করতে ব্যবহৃত হয়, যা নিশ্চিত করে যে ব্যবহারকারী ভাইব্রেশন বুঝতে পারবেন। এই রেঞ্জটি সেই ফ্রিকোয়েন্সির সাথে সম্পর্কিত যেখান থেকে আউটপুট অ্যাক্সিলারেশন প্রথমে মানুষের উপলব্ধি শনাক্তকরণ থ্রেশহোল্ডের (অর্থাৎ, ন্যূনতম উপলব্ধিযোগ্য স্তর) উপরে ১০ dB-এ পৌঁছায়, যেখানে আউটপুট অ্যাক্সিলারেশন শেষ পর্যন্ত সেই থ্রেশহোল্ডের উপরে থাকে। এই রেঞ্জের মধ্যে অ্যাকচুয়েটরের রেজোন্যান্ট ফ্রিকোয়েন্সি থাকতে হবে।

এছাড়াও, ফ্রেমওয়ার্কটি FOAM ডেটা ব্যবহার করে বেসিক PWLE API-তে ব্যবহৃত ইনটেনসিটি ও শার্পনেস ভ্যালুকে সংশ্লিষ্ট অ্যামপ্লিটিউড ও ফ্রিকোয়েন্সি ভ্যালুতে ম্যাপ করে। এই ম্যাপিং বিভিন্ন ডিভাইস জুড়ে বোধগম্য হ্যাপ্টিক ফিডব্যাক প্রদান করতে সাহায্য করে।

এনভেলপ এফেক্ট কাজ করে এমন ডিভাইসে যেন খালি নয় এমন ফ্রিকোয়েন্সি রেঞ্জ থাকে যা থেকে অনুভবযোগ্য ভাইব্রেশন তৈরি হয় এবং সেই রেঞ্জে যেন অ্যাকচুয়েটরের রেজোনেন্ট ফ্রিকোয়েন্সি থাকে তা নিশ্চিত করতে VTS টেস্ট করা হয়। এটি নিশ্চিত করতে সাহায্য করে যে ডিভাইসটি পর্যাপ্ত তীব্রতার সাথে ভাইব্রেশন তৈরি করতে পারে যাতে ব্যবহারকারীরা স্পষ্টভাবে অনুভব করতে পারেন।

FOAM এবং উন্নত PWLE API

VibratorFrequencyProfile-এর মাধ্যমে ডেভেলপারদের কাছে FOAM প্রকাশ করা হয়, যেখানে নিম্নলিখিত তথ্য থাকে:

  • ফ্রিকোয়েন্সি রেঞ্জ: ডেভেলপাররা ডিভাইসের ন্যূনতম এবং সর্বাধিক সমর্থিত ফ্রিকোয়েন্সি, হার্টজে, যথাক্রমে getMinFrequencyHz এবং getMaxFrequencyHz ব্যবহার করে, পুনরুদ্ধার করতে পারেন।
  • সর্বাধিক আউটপুট অ্যাক্সিলারেশন: ডিভাইসের সর্বাধিক অর্জনযোগ্য আউটপুট অ্যাক্সিলারেশন (G-তে) getMaxOutputAccelerationGs-এর মাধ্যমে উপলভ্য।
  • ফ্রিকোয়েন্সি থেকে আউটপুট অ্যাক্সিলারেশন ম্যাপিং: getFrequenciesOutputAcceleration HAL-এ প্রয়োগ করা আউটপুট অ্যাক্সিলারেশন ম্যাপিংয়ের ফ্রিকোয়েন্সি প্রদান করে।

ডেভেলপাররা উন্নত PWLE API-এর মাধ্যমে এনভেলপ এফেক্ট তৈরি করার সময় এই তথ্য ব্যবহার করতে পারেন। যেমন, আউটপুট অ্যাক্সিলারেশন (G-তে) নির্দিষ্ট করার সময়, ডিভাইসের সর্বাধিক আউটপুট অ্যাক্সিলারেশনের তুলনায় সেটিকে [0.0, 1.0] রেঞ্জের মধ্যে থাকা ভ্যালুতে স্বাভাবিক করতে হবে।

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

মানুষের পারসেপশন শনাক্তকরণের থ্রেশহোল্ড

মানুষের পারসেপশন শনাক্তকরণ থ্রেশহোল্ড বলতে কম্পনের ন্যূনতম অ্যাক্সিলারেশনকে বোঝায় যা কোনও ব্যক্তি নির্ভরযোগ্যভাবে শনাক্ত করতে পারেন। কম্পনের ফ্রিকোয়েন্সির উপর নির্ভর করে এই লেভেল পরিবর্তিত হয়।

নিম্নলিখিত প্লটটি টেম্পোরাল ফ্রিকোয়েন্সির ফাংশন হিসেবে ত্বরণে মানুষের হ্যাপটিক পারসেপশন শনাক্তকরণ থ্রেশহোল্ড১ দেখায়:

মানুষের হ্যাপটিক পারসেপশন শনাক্তকরণ
থ্রেশহোল্ড

ছবি ২. মানুষের হ্যাপ্টিক পারসেপশন শনাক্তকরণের থ্রেশহোল্ড।

যাতে ব্যবহারকারীরা হ্যাপ্টিক এফেক্ট ধারাবাহিকভাবে অনুভব করতে পারেন, সেই জন্য VTS পরীক্ষা করে দেখে যে এনভেলপ ক্ষমতা সম্পন্ন ডিভাইসে এমন ফ্রিকোয়েন্সি রেঞ্জ আছে যা ১০ dB-এর মাধ্যমে হিউম্যান পারসেপশন ডিটেকশন থ্রেশহোল্ডের চেয়ে বেশি ভাইব্রেশন অ্যামপ্লিটিউড তৈরি করতে পারে।

ভাইব্রেশন অ্যাক্সিলারেশন অ্যামপ্লিটিউডের তুলনায় অনুভূত ভাইব্রেশন ইনটেনসিটি

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

\(Amplitude(G) =10^\frac{Amplitude(db)}{20}\)

যেখানে অ্যামপ্লিটিউড dB হল SL এবং শনাক্তকরণ থ্রেশহোল্ডের যোগফল (নিম্নলিখিত প্লটে অর্ডিনেট বরাবর ভ্যালু) একটি নির্দিষ্ট ফ্রিকোয়েন্সিতে।

এইভাবে, PWLE API নিশ্চিত করে যে কন্ট্রোল পয়েন্টের পরপর পেয়ারের মধ্যে অনুভূত তীব্রতা লিনিয়ারভাবে পরিবর্তিত হয়।

নিম্নলিখিত প্লটটি টেম্পোরাল ফ্রিকোয়েন্সির ফাংশন হিসেবে মানুষের হ্যাপটিক পারসেপশন শনাক্তকরণের থ্রেশহোল্ড (০ dB SL) সহ ১০, ২০, ৩০, ৪০ এবং ৫০ dB SL-এ ভাইব্রেশন অ্যাক্সিলারেশন লেভেল২ দেখায়।

ভাইব্রেশন অ্যাক্সিলারেশন
লেভেল

ছবি ৩. ভাইব্রেশন অ্যাক্সিলারেশন লেভেল।

সর্বাধিক আউটপুট অ্যাক্সিলারেশন কার্ভের ফ্রিকোয়েন্সি নির্ধারণ করো

এই বিভাগে, ডিভাইস থেকে সর্বাধিক আউটপুট অ্যাক্সিলারেশন কার্ভের ফ্রিকোয়েন্সি কীভাবে পেতে হয় তার একটি সাধারণ নির্দেশিকা প্রদান করা হয়েছে, যা আপনি FOAM ডেটা তৈরি করতে ব্যবহার করেন।

সর্বাধিক ভোল্টেজ কার্ভ (V) পাওয়া

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

হার্ডওয়্যারে ভোল্টেজ সংক্রান্ত সীমাবদ্ধতা ফিচার থাকলে, সেটি ব্যবহার করে সরাসরি সাপোর্ট করা ফ্রিকোয়েন্সি রেঞ্জ জুড়ে সর্বাধিক ভোল্টেজ পরিমাপ করুন।

সর্বাধিক ত্বরণ (M) গণনা করো

M হল সর্বাধিক অ্যাক্সিলারেশন, যা আপনি বিভিন্ন পদ্ধতির মাধ্যমে গণনা করতে পারেন। এই বিভাগে লিনিয়ার রেসোন্যান্ট অ্যাকচুয়েটর (LRA) ব্যবহার করা ডিভাইসের জন্য একটি পদ্ধতি দেখানো হয়েছে।

এই পদ্ধতিতে, নির্দিষ্ট ফ্রিকোয়েন্সিতে সর্বাধিক প্রয়োগ করা ভোল্টেজকে সংশ্লিষ্ট সর্বাধিক ত্বরণ মানে রূপান্তরিত করা হয়, যা G পিক-এ প্রকাশ করা হয়।

এই কনভার্সনের জন্য ব্যবহৃত মূল সমীকরণ হল:

\(\text{Accel}(w)= (\text{Vsys}\times\text{BLsys}\times\text{Loc_coeff}/\text{Rsys}/\text{MPhone})\times{w^2}/\text{Psys_abs}/{9.81}\)

যেখানে:

Vsys: হ্যাপটিক অ্যাকচুয়েটরে প্রয়োগ করা প্রকৃত ভোল্টেজ লেভেল

BLsys: ভাইব্রেশন মোটরের ম্যাগনেটিক ফিল্ড স্ট্রেন্থ (B) ও কন্ডাক্টর লেন্থ (L)-এর গুণফল

Loc_coeff: মডিউল লেভেল অ্যাক্সিলারেশনকে ফোন লেভেল অ্যাক্সিলারেশনে কনভার্ট করার জন্য লোকেশন কো-এফিসিয়েন্ট

Rsys: ভাইব্রেশন মোটর কয়েলের ইলেকট্রিক্যাল রেজিস্ট্যান্স

MPhone: ডিভাইসের ভর (যেমন, ফোন)

w: ড্রাইভিং সিগন্যালের কৌণিক ফ্রিকোয়েন্সি (রেডিয়ান প্রতি সেকেন্ড), যা এইভাবে গণনা করা হয়:

\(w = 2 \pi f\)

Psys_abs: সেকেন্ড অর্ডার মাস, ড্যাম্পার ও স্প্রিং সিস্টেমের অ্যামপ্লিটিউড রেসপন্স, যা এইভাবে গণনা করা হয়:

\(\text{Psys_abs} = (\text{Wnsys}^2-w^2)^2+({w}\times(\text{Wnsys}/\text{Qsys}))^2\)

Wnsys: ভাইব্রেট করা সিস্টেমের স্বাভাবিক ফ্রিকোয়েন্সি

Qsys: ভাইব্রেটিং সিস্টেমের কোয়ালিটি ফ্যাক্টর

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

\(\text{Loc_coeff} = \text{phone_acceleration} / \text{module_acceleration}\)

যেমন, মডিউলের ত্বরণ ১ g এবং ফোনের ত্বরণ ২.৫ g হলে, Loc_coeff = ২.৫ হবে। এটি ২.৫x অ্যামপ্লিফিকেশন নির্দেশ করে।

Android ফ্রেমওয়ার্ক হার্ৎজ ইউনিটে ফ্রিকোয়েন্সি নেয়, তাই FOAM ডেটা তৈরি করার সময় HAL-কে ফ্রিকোয়েন্সি ইউনিটকে রেডিয়ান পার সেকেন্ড থেকে হার্ৎজে কনভার্ট করতে হবে।

FOAM কার্ভ তৈরি করা

FOAM কার্ভ নির্ধারণ করতে, সর্বাধিক ভোল্টেজ কার্ভ (V) এবং অ্যাক্সিলারেশন গণনা (M) একসাথে ব্যবহার করুন:

  • আপনার পছন্দসই রেঞ্জের প্রতিটি ফ্রিকোয়েন্সির (f) জন্য, আপনার সর্বাধিক ভোল্টেজ কার্ভ থেকে সংশ্লিষ্ট সর্বাধিক ভোল্টেজ V(f) খুঁজুন।
  • উপরের সমীকরণ ব্যবহার করে সেই ফ্রিকোয়েন্সিতে সর্বাধিক ত্বরণ গণনা করুন, Vsys-এর পরিবর্তে V(f) এবং w-এর পরিবর্তে সংশ্লিষ্ট f মান বসান। এটি আপনাকে M(V(f), f) দেয়।
  • এই গণনা করা অ্যাক্সিলারেশন হল আপনার FOAM(f) ভ্যালু।

FOAM ডেটা এক্সপোজ করা

FOAM কার্ভ তৈরি হওয়ার পরে, HAL কার্ভটিকে FrequencyAccelerationMapEntry অবজেক্টের তালিকা হিসেবে দেখায়। প্রতিটি এন্ট্রি ম্যাপিংয়ের একটি পয়েন্টকে সংজ্ঞায়িত করে, যা একটি ফ্রিকোয়েন্সি (হার্ৎজে) ও তার সংশ্লিষ্ট সর্বাধিক আউটপুট অ্যাক্সিলারেশন (জি পিক)-কে নির্দিষ্ট করে।

ইন্টারমিডিয়েট অ্যাক্সিলারেশন ভ্যালু নির্ধারণ করার সময় লিনিয়ার ইন্টারপোলেশনের নির্ভুলতা অপ্টিমাইজ করতে, আমরা সর্বাধিক আউটপুট অ্যাক্সিলারেশন সহ ফ্রিকোয়েন্সির কাছাকাছি হাই ফ্রিকোয়েন্সি রেজোলিউশন নির্ধারণ করার সাজেশন দিই। যেমন, এই ফ্রিকোয়েন্সির +/- ১০ Hz রেঞ্জের মধ্যে ১ Hz স্টেপ ব্যবহার করুন।

ডিভাইসের ক্ষমতা ও সীমাবদ্ধতা

Android 16 এবং তার পরবর্তী ভার্সনের ক্ষেত্রে, ডেভেলপারদের তাদের PWLE এফেক্ট অপ্টিমাইজ করতে এবং ডিভাইস জুড়ে সামঞ্জস্য নিশ্চিত করতে সাহায্য করার জন্য, Android-এ ডিভাইসের PWLE ক্ষমতা কোয়েরি করার জন্য HAL API অন্তর্ভুক্ত রয়েছে। এইসব পদ্ধতি ডিভাইসের সীমাবদ্ধতা সম্পর্কে তথ্য প্রদান করে, যেমন সর্বনিম্ন বা সর্বোচ্চ PWLE প্রিমিটিভের সময়সীমা এবং PWLE কম্পোজিশনে অনুমোদিত প্রিমিটিভের সংখ্যা।

HAL API-এর মধ্যে এগুলি অন্তর্ভুক্ত:

  • CAP_COMPOSE_PWLE_EFFECTS_V2: ডিভাইস এই ফিচার সাপোর্ট করলে IVibrator.getCapabilities এটি রিটার্ন করে।
  • getFrequencyToOutputAccelerationMap: FOAM ডেটা রিট্রিভ করে।
  • getPwleV2PrimitiveDurationMinMillis: যেকোনও প্রিমিটিভ PWLE-এর জন্য অনুমোদিত ন্যূনতম সময়সীমা মিলিসেকেন্ডে ফিরিয়ে আনে।
  • getPwleV2PrimitiveDurationMaxMillis: কোনও প্রিমিটিভ PWLE-এর জন্য অনুমোদিত সর্বোচ্চ সময়সীমা মিলিসেকেন্ডে ফিরিয়ে আনে।
  • getPwleV2CompositionSizeMax: IVibrator.composePwleV2-এর মাধ্যমে কাজ করে এমন PWLE প্রিমিটিভের সর্বাধিক সংখ্যা ফিরিয়ে আনে।

এই তথ্য ডেভেলপারদের কাছে প্রকাশ করা হয় যাতে তারা টার্গেট ডিভাইসের নির্দিষ্ট ক্ষমতা অনুযায়ী নিজেদের ইফেক্ট কাস্টমাইজ করতে পারেন, বিশেষ করে উন্নত PWLE API ব্যবহার করার সময়।

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


  1. থ্রেশহোল্ড ডেটা Bolanowski Jr.-এর ১ নম্বর ছবিতে দেখানো ডিসপ্লেসমেন্ট থ্রেশহোল্ড থেকে কনভার্ট করা হয়েছে, S. J., et al.. "স্পর্শের মেকানিক্যাল দিকগুলি চারটি চ্যানেল মধ্যস্থতা করে।" জার্নাল অফ দ্য অ্যাকোস্টিক্যাল সোসাইটি অফ আমেরিকা ৮৪(৫): ১৬৮০-১৬৯৪ (১৯৮৮). এই অনলাইন টিউটোরিয়াল থেকে ত্বরণ অ্যাম্প্লিটিউড ও ডিসপ্লেসমেন্ট অ্যাম্প্লিটিউডের মধ্যে কনভার্সন সম্পর্কে জানতে পারবেন। ↩

  2. Verrillo, R. থেকে পাওয়া ৮ নম্বর ফিগার থেকে ডেটা অনুমান করা হয়েছে। T., ও অন্যান্য.. "ভাইব্রোটেকটাইলের উদ্দীপনার সংবেদন ম্যাগনিটিউড।" Perception & Psychophysics 6: 366-372 (1969). ↩