অ্যান্ড্রয়েড ডিভাইসে সবচেয়ে সাধারণ ভাইব্রেশন অ্যাকচুয়েটর হল লিনিয়ার রেজোন্যান্ট অ্যাকচুয়েটর (এলআরএ)। LRAs অনুকরণ করে একটি বোতামে ক্লিক করার অনুভূতি যা অন্যথায় একটি প্রতিক্রিয়াহীন কাচের পৃষ্ঠ। একটি পরিষ্কার এবং খাস্তা ক্লিক প্রতিক্রিয়া সংকেত সাধারণত 10 থেকে 20 মিলিসেকেন্ডের মধ্যে স্থায়ী হয়। এই সংবেদন ব্যবহারকারীর মিথস্ক্রিয়া আরও স্বাভাবিক বোধ করে। ভার্চুয়াল কীবোর্ডের জন্য, এই ক্লিক প্রতিক্রিয়া টাইপিং গতি বাড়াতে পারে এবং ত্রুটি কমাতে পারে।
LRA এর কয়েকটি সাধারণ অনুরণিত ফ্রিকোয়েন্সি রয়েছে:
- কিছু LRA-এর 200 থেকে 300 Hz পরিসরে অনুরণিত ফ্রিকোয়েন্সি ছিল, যা মানুষের ত্বক কম্পনের জন্য সবচেয়ে সংবেদনশীল ফ্রিকোয়েন্সির সাথে মিলে যায়। এই ফ্রিকোয়েন্সি পরিসরে কম্পনের সংবেদনগুলি সাধারণত মসৃণ, তীক্ষ্ণ এবং অনুপ্রবেশকারী হিসাবে বর্ণনা করা হয়।
- LRA-এর অন্যান্য মডেলের অনুরণন ফ্রিকোয়েন্সি কম থাকে, প্রায় 150 Hz এ। সংবেদন গুণগতভাবে নরম এবং পূর্ণ (মাত্রায়)।
দুটি ভিন্ন ফ্রিকোয়েন্সিতে একই ইনপুট ভোল্টেজ দেওয়া হলে, কম্পন আউটপুট প্রশস্ততা ভিন্ন হতে পারে। এলআরএর অনুরণন ফ্রিকোয়েন্সি থেকে ফ্রিকোয়েন্সি যত দূরে থাকবে, এর কম্পনের প্রশস্ততা তত কম হবে।
একটি প্রদত্ত ডিভাইসের হ্যাপটিক প্রভাবগুলি ভাইব্রেশন অ্যাকচুয়েটর এবং এর ড্রাইভার উভয়ই ব্যবহার করে। ওভারড্রাইভ এবং সক্রিয় ব্রেকিং বৈশিষ্ট্যগুলি অন্তর্ভুক্ত হ্যাপটিক ড্রাইভারগুলি এলআরএগুলির বৃদ্ধির সময় এবং রিং কমাতে পারে, যা আরও প্রতিক্রিয়াশীল এবং স্পষ্ট কম্পনের দিকে পরিচালিত করে।
ভাইব্রেটর আউটপুট ত্বরণ
ফ্রিকোয়েন্সি-টু-আউটপুট-অ্যাক্সিলারেশন ম্যাপিং (FOAM) প্রদত্ত কম্পন ফ্রিকোয়েন্সিতে (হার্টজে) সর্বাধিক অর্জনযোগ্য আউটপুট ত্বরণ (G শিখরে) বর্ণনা করে। Android 16 (API স্তর 36) থেকে শুরু করে, প্ল্যাটফর্মটি VibratorFrequencyProfile
এর মাধ্যমে এই ম্যাপিংয়ের জন্য অন্তর্নির্মিত সমর্থন প্রদান করে। আপনি হ্যাপটিক প্রভাব তৈরি করতে মৌলিক এবং উন্নত খাম API সহ এই ক্লাসটি ব্যবহার করতে পারেন।
বেশিরভাগ এলআরএ মোটরগুলির ফোমের একটি একক শিখর থাকে, সাধারণত তাদের অনুরণিত ফ্রিকোয়েন্সির কাছাকাছি। এই পরিসর থেকে ফ্রিকোয়েন্সি বিচ্যুত হওয়ার কারণে ত্বরণ সাধারণত দ্রুতগতিতে হ্রাস পায়। বক্ররেখা প্রতিসাম্য নাও হতে পারে এবং ক্ষতির হাত থেকে মোটরকে রক্ষা করার জন্য অনুরণিত ফ্রিকোয়েন্সির চারপাশে একটি মালভূমি দেখাতে পারে।
সংলগ্ন প্লটটি একটি এলআরএ মোটরের জন্য ফোমের উদাহরণ দেখায়।
মানুষের উপলব্ধি সনাক্তকরণ থ্রেশহোল্ড
মানুষের উপলব্ধি সনাক্তকরণ থ্রেশহোল্ড একটি কম্পনের ন্যূনতম ত্বরণকে বোঝায় যা একজন ব্যক্তি নির্ভরযোগ্যভাবে সনাক্ত করতে পারে। এই স্তর কম্পন ফ্রিকোয়েন্সি উপর ভিত্তি করে পরিবর্তিত হয়.
সংলগ্ন প্লটটি সাময়িক ফ্রিকোয়েন্সির একটি ফাংশন হিসাবে ত্বরণে মানব হ্যাপটিক উপলব্ধি সনাক্তকরণ থ্রেশহোল্ড দেখায়। থ্রেশহোল্ড ডেটা স্থানচ্যুতি থ্রেশহোল্ড থেকে রূপান্তরিত হয় বোলানোস্কি জুনিয়র, এসজে, এট আল এর 1988 প্রবন্ধের চিত্র 1-এ, "চারটি চ্যানেল স্পর্শের যান্ত্রিক দিকগুলির মধ্যস্থতা করে।" .
Android স্বয়ংক্রিয়ভাবে BasicEnvelopeBuilder
এ এই থ্রেশহোল্ডটি পরিচালনা করে, যা যাচাই করে যে সমস্ত প্রভাব একটি ফ্রিকোয়েন্সি পরিসর ব্যবহার করে যা কম্পন প্রশস্ততা তৈরি করে যা মানুষের উপলব্ধি সনাক্তকরণ থ্রেশহোল্ডকে কমপক্ষে 10 ডিবি অতিক্রম করে।
একটি অনলাইন টিউটোরিয়াল আরও ব্যাখ্যা করে ত্বরণ প্রশস্ততা এবং স্থানচ্যুতি প্রশস্ততার মধ্যে রূপান্তর ।
কম্পন ত্বরণ মাত্রা
কম্পনের তীব্রতা সম্পর্কে মানুষের উপলব্ধি, একটি উপলব্ধি পরিমাপ, কম্পনের প্রশস্ততা, একটি শারীরিক পরামিতি সহ রৈখিকভাবে বৃদ্ধি পায় না। অনুভূত তীব্রতা সংবেদন স্তর (SL) দ্বারা চিহ্নিত করা হয়, যা একই ফ্রিকোয়েন্সিতে সনাক্তকরণ থ্রেশহোল্ডের উপরে ডিবি পরিমাণ হিসাবে সংজ্ঞায়িত করা হয়।
সংশ্লিষ্ট কম্পন ত্বরণ প্রশস্ততা (G শিখরে) নিম্নরূপ গণনা করা যেতে পারে:
...যেখানে প্রশস্ততা dB হল SL এবং সনাক্তকরণ থ্রেশহোল্ডের সমষ্টি—সংলগ্ন প্লটে উল্লম্ব অক্ষ বরাবর মান—একটি নির্দিষ্ট ফ্রিকোয়েন্সিতে।
সংলগ্ন প্লটটি টেম্পোরাল ফ্রিকোয়েন্সির একটি ফাংশন হিসাবে হিউম্যান হ্যাপটিক উপলব্ধি সনাক্তকরণ থ্রেশহোল্ড (0 dB SL) সহ 10, 20, 30, 40 এবং 50 dB SL-এ কম্পন ত্বরণের মাত্রা দেখায়। Verrillo, RT, et al. এর 1969 প্রবন্ধে চিত্র 8 থেকে ডেটা অনুমান করা হয়েছে, "ভাইব্রোট্যাক্টাইল স্টিমুলির সংবেদন মাত্রা।" .
অ্যান্ড্রয়েড স্বয়ংক্রিয়ভাবে এই রূপান্তরটিকে BasicEnvelopeBuilder
পরিচালনা করে, যা সেন্সেশন লেভেল স্পেসে (ডিবি এসএল) স্বাভাবিক তীব্রতা হিসাবে মানগুলি গ্রহণ করে এবং সেগুলিকে আউটপুট ত্বরণে রূপান্তর করে৷ অন্যদিকে, WaveformEnvelopeBuilder
, এই রূপান্তরটি প্রয়োগ করে না এবং পরিবর্তে ত্বরণ স্থান (Gs) এ স্বাভাবিক আউটপুট ত্বরণ প্রশস্ততা হিসাবে মান গ্রহণ করে। খাম API অনুমান করে যে, যখন একজন ডিজাইনার বা বিকাশকারী কম্পন শক্তির পরিবর্তন সম্পর্কে চিন্তা করেন, তখন তারা অনুভূত তীব্রতা একটি টুকরো টুকরো রৈখিক খাম অনুসরণ করার আশা করেন।
ডিভাইসে ডিফল্ট ওয়েভফর্ম স্মুথিং
উদাহরণের জন্য, জেনেরিক ডিভাইসে একটি কাস্টম ওয়েভফর্ম প্যাটার্ন কীভাবে আচরণ করে তা বিবেচনা করুন:
কোটলিন
val timings: LongArray = longArrayOf(50, 50, 50, 50, 50, 100, 350, 250)
val amplitudes: IntArray = intArrayOf(77, 79, 84, 99, 143, 255, 0, 255)
val repeatIndex = -1 // Don't repeat.
vibrator.vibrate(VibrationEffect.createWaveform(timings, amplitudes, repeatIndex))
জাভা
long[] timings = new long[] { 50, 50, 50, 50, 50, 100, 350, 250 };
int[] amplitudes = new int[] { 77, 79, 84, 99, 143, 255, 0, 255 };
int repeatIndex = -1 // Don't repeat.
vibrator.vibrate(VibrationEffect.createWaveform(timings, amplitudes, repeatIndex));
নিম্নলিখিত প্লটগুলি পূর্ববর্তী কোড স্নিপেটের সাথে সম্পর্কিত ইনপুট তরঙ্গরূপ এবং আউটপুট ত্বরণ দেখায়। লক্ষ্য করুন যে ত্বরণ ধীরে ধীরে বৃদ্ধি পায়, হঠাৎ নয়, যখনই প্যাটার্নে প্রশস্ততার একটি ধাপ পরিবর্তন হয়—অর্থাৎ, 0ms, 150ms, 200ms, 250ms এবং 700ms। প্রশস্ততা পরিবর্তনের প্রতিটি ধাপে একটি ওভারশুটও রয়েছে এবং ইনপুট প্রশস্ততা হঠাৎ 0-এ নেমে গেলে কমপক্ষে 50ms স্থায়ী হয় এমন দৃশ্যমান রিংিং রয়েছে।
উন্নত হ্যাপটিক প্যাটার্ন
ওভারশুট এড়াতে এবং রিং করার সময় কমাতে, প্রশস্ততাগুলি আরও ধীরে ধীরে পরিবর্তন করুন। নিম্নলিখিত সংশোধিত সংস্করণের তরঙ্গরূপ এবং ত্বরণ প্লট দেখায়:
কোটলিন
val timings: LongArray = longArrayOf(
25, 25, 50, 25, 25, 25, 25, 25, 25, 25, 75, 25, 25,
300, 25, 25, 150, 25, 25, 25
)
val amplitudes: IntArray = intArrayOf(
38, 77, 79, 84, 92, 99, 121, 143, 180, 217, 255, 170, 85,
0, 85, 170, 255, 170, 85, 0
)
val repeatIndex = -1 // Do not repeat.
vibrator.vibrate(VibrationEffect.createWaveform(timings, amplitudes, repeatIndex))
জাভা
long[] timings = new long[] {
25, 25, 50, 25, 25, 25, 25, 25, 25, 25, 75, 25, 25,
300, 25, 25, 150, 25, 25, 25
};
int[] amplitudes = new int[] {
38, 77, 79, 84, 92, 99, 121, 143, 180, 217, 255, 170, 85,
0, 85, 170, 255, 170, 85, 0
};
int repeatIndex = -1; // Do not repeat.
vibrator.vibrate(VibrationEffect.createWaveform(timings, amplitudes, repeatIndex));
আরও জটিল হ্যাপটিক প্রভাব তৈরি করুন
একটি সন্তোষজনক ক্লিক প্রতিক্রিয়ার অন্যান্য উপাদানগুলি আরও জটিল, একটি ডিভাইসে ব্যবহৃত LRA সম্পর্কে কিছু জ্ঞান প্রয়োজন। সেরা ফলাফলের জন্য, ডিভাইসের প্রি-ফেব্রিকেটেড ওয়েভফর্ম এবং প্ল্যাটফর্ম-প্রদত্ত ধ্রুবক ব্যবহার করুন, যা আপনাকে নিম্নলিখিতগুলি করতে দেয়:
- স্পষ্ট প্রভাব এবং আদিম সঞ্চালন.
- নতুন হ্যাপটিক প্রভাব রচনা করতে তাদের সংযুক্ত করুন।
এই পূর্বনির্ধারিত হ্যাপটিক ধ্রুবক এবং আদিম উচ্চ মানের হ্যাপটিক প্রভাব তৈরি করার সময় আপনার কাজের গতি বাড়াতে পারে।