অডিও প্লেয়ার এমন অ্যাট্রিবিউট সমর্থন করে যা নির্দিষ্ট সোর্সের জন্য অডিও সিস্টেম কীভাবে রাউটিং, ভলিউম ও ফোকাস সংক্রান্ত সিদ্ধান্ত নেয় তা নির্ধারণ করে। অ্যাপ্লিকেশন অডিও প্লেব্যাকের সাথে অ্যাট্রিবিউট (যেমন, কোনও স্ট্রিমিং পরিষেবা দ্বারা চালানো মিউজিক বা নতুন ইমেলের বিজ্ঞপ্তি) অ্যাটাচ করতে পারে, তারপর অডিও সোর্সের অ্যাট্রিবিউট ফ্রেমওয়ার্কে পাস করে, যেখানে অডিও সিস্টেম অ্যাট্রিবিউট ব্যবহার করে মিক্সিং সংক্রান্ত সিদ্ধান্ত নেয় এবং সিস্টেমের স্ট্যাটাস সম্পর্কে অ্যাপ্লিকেশনকে বিজ্ঞপ্তি পাঠায়।
Android 4.4 এবং তার আগের ভার্সনে, ফ্রেমওয়ার্ক শুধুমাত্র অডিও স্ট্রিমের ধরন ব্যবহার করে মিক্সিং সংক্রান্ত সিদ্ধান্ত নিত। তবে, স্ট্রিমের ধরনের উপর ভিত্তি করে এই ধরনের সিদ্ধান্ত নেওয়াটা একাধিক অ্যাপ্লিকেশন ও ডিভাইস জুড়ে কোয়ালিটি আউটপুট তৈরি করার ক্ষেত্রে খুব বেশি সীমাবদ্ধতা তৈরি করে। যেমন, মোবাইল ডিভাইসে, কিছু অ্যাপ্লিকেশন (যেমন, Google Maps) STREAM_MUSIC স্ট্রিম টাইপে গাড়ি চালানোর দিকনির্দেশ প্লে করে; তবে, প্রজেকশন মোডে থাকা মোবাইল ডিভাইসে (যেমন, Android Auto), অ্যাপ্লিকেশন গাড়ি চালানোর দিকনির্দেশের সাথে অন্যান্য মিডিয়া স্ট্রিম মেশাতে পারে না।
Audio Attribute API ব্যবহার করে, অ্যাপ্লিকেশনগুলি অডিও সিস্টেমকে নির্দিষ্ট অডিও সোর্স সম্পর্কে বিস্তারিত তথ্য প্রদান করে, যার মধ্যে ব্যবহার (সোর্সটি কেন বাজছে), কন্টেন্টের ধরন (সোর্সটি কী বাজাচ্ছে), ফ্ল্যাগ (সোর্সটি কীভাবে বাজানো উচিত) এবং প্রসঙ্গ (Android 9-এ নতুন) অন্তর্ভুক্ত। সিনট্যাক্স:
AudioAttributes {
mUsage
mContentType
mSource
mFlags
mTags / mFormattedTags / mBundle (key value pairs)
}- ব্যবহার। সোর্সটি কেন চলছে তা নির্দিষ্ট করে এবং রাউটিং, ফোকাস ও ভলিউম সংক্রান্ত সিদ্ধান্ত নিয়ন্ত্রণ করে।
- কন্টেন্টের ধরন। সোর্স কী চালাচ্ছে তা নির্দিষ্ট করে (মিউজিক, সিনেমা, স্পিচ, সনিফিকেশন, অজানা)।
- প্রসঙ্গ। ব্যবহারের ভ্যালু অডিও HAL-এ অ্যাবস্ট্র্যাক্ট করা হয়েছে।
- পতাকা। সোর্স কীভাবে চালানো উচিত তা নির্দিষ্ট করে। শ্রবণযোগ্যতা এনফোর্সমেন্ট (কিছু দেশে ক্যামেরা শাটার সাউন্ড প্রয়োজন) এবং হার্ডওয়্যার অডিও/ভিডিও সিঙ্ক্রোনাইজেশনের জন্য সহায়তা অন্তর্ভুক্ত।
ডায়নামিক্স প্রসেসিংয়ের জন্য, অ্যাপ্লিকেশনকে অবশ্যই সিনেমা, মিউজিক এবং স্পিচ কন্টেন্টের মধ্যে পার্থক্য করতে হবে। ডেটা সম্পর্কে তথ্যও গুরুত্বপূর্ণ হতে পারে, যেমন সাউন্ডের তীব্রতা ও পিক স্যাম্পেল ভ্যালু।
অ্যাট্রিবিউট ব্যবহার করা
ব্যবহারের মাধ্যমে স্ট্রিমিংয়ের প্রসঙ্গ নির্দিষ্ট করা হয়, এর ফলে সাউন্ড কেন চালানো হচ্ছে এবং সাউন্ডটি কীসের জন্য ব্যবহার করা হচ্ছে সেই সম্পর্কে তথ্য পাওয়া যায়। ব্যবহারের তথ্য স্ট্রিমের ধরনের থেকে বেশি তথ্য প্রদান করে এবং প্ল্যাটফর্ম বা রাউটিং নীতিকে ভলিউম বা রাউটিং সংক্রান্ত সিদ্ধান্তকে আরও উন্নত করতে সাহায্য করে।
যেকোনও ইনস্ট্যান্সের জন্য নিম্নলিখিত ব্যবহারের মানগুলির মধ্যে একটি দিন:
- USAGE_UNKNOWN
- USAGE_MEDIA
- USAGE_VOICE_COMMUNICATION
- USAGE_VOICE_COMMUNICATION_SIGNALLING
- USAGE_ALARM
- USAGE_NOTIFICATION
- USAGE_NOTIFICATION_TELEPHONY_RINGTONE
- USAGE_NOTIFICATION_COMMUNICATION_REQUEST
- USAGE_NOTIFICATION_COMMUNICATION_INSTANT
- USAGE_NOTIFICATION_COMMUNICATION_DELAYED
- USAGE_NOTIFICATION_EVENT
- USAGE_ASSISTANCE_ACCESSIBILITY
- USAGE_ASSISTANCE_NAVIGATION_GUIDANCE
- USAGE_ASSISTANCE_SONIFICATION
- USAGE_GAME
- USAGE_VIRTUAL_SOURCE
- USAGE_ASSISTANT
অডিও অ্যাট্রিবিউট ব্যবহারের ভ্যালুগুলি পারস্পরিকভাবে এক্সক্লুসিভ। যেমন, USAGE_MEDIA
ও
USAGE_ALARM
সংজ্ঞা দেখুন; ব্যতিক্রমের জন্য, AudioAttributes.Builder
সংজ্ঞা দেখুন।
কন্টেন্টের ধরন
কন্টেন্টের ধরন সাউন্ড কী তা নির্ধারণ করে এবং কন্টেন্টের সাধারণ বিভাগ যেমন সিনেমা, বক্তৃতা বা বিপ/রিংটোন প্রকাশ করে। অডিও ফ্রেমওয়ার্ক,
অডিও পোস্ট-প্রসেসিং ব্লক বেছে নিয়ে কনফিগার করার জন্য কন্টেন্টের ধরন সংক্রান্ত তথ্য
ব্যবহার করে। কন্টেন্টের ধরন প্রদান করা ঐচ্ছিক হলেও, কন্টেন্টের ধরন জানা থাকলে আপনাকে অবশ্যই type
সংক্রান্ত তথ্য অন্তর্ভুক্ত করতে হবে, যেমন
সিনেমা স্ট্রিমিং পরিষেবার জন্য CONTENT_TYPE_MOVIE অথবা
মিউজিক প্লেব্যাক অ্যাপ্লিকেশনের জন্য CONTENT_TYPE_MUSIC ব্যবহার করা।
যেকোনও ইনস্ট্যান্সের জন্য নিম্নলিখিত কন্টেন্টের ধরন সংক্রান্ত ভ্যালুগুলির মধ্যে একটি দিন:
CONTENT_TYPE_UNKNOWN(ডিফল্ট)CONTENT_TYPE_MOVIECONTENT_TYPE_MUSICCONTENT_TYPE_SONIFICATIONCONTENT_TYPE_SPEECH
অডিও অ্যাট্রিবিউট কন্টেন্টের ধরনের ভ্যালু একে অপরের থেকে আলাদা। কন্টেন্টের ধরন সম্পর্কে আরও জানতে, অডিও অ্যাট্রিবিউট API দেখুন।
প্রসঙ্গ
Android-এ প্রতিটি সাউন্ড, সাউন্ড জেনারেট করার জন্য দায়ী অ্যাপ্লিকেশন এবং কারণের মাধ্যমে
শনাক্ত করা হয়; এবং Android ডিভাইস এই তথ্য ব্যবহার করে
সাউন্ড কীভাবে উপস্থাপন করা হবে তা নির্ধারণ করে। Android 8.x এবং তার আগের ভার্সনে, অ্যাপ্লিকেশনগুলি
পুরানো স্ট্রিম টাইপ (যেমন AudioSystem.STREAM_MUSIC) বা AudioAttributes ব্যবহার করে
সাউন্ড জেনারেশনের কারণ রিপোর্ট করতে পারে। Android 9-এ, AudioAttributes.usage ভ্যালু
HAL লেভেলে Contexts হিসেবে অ্যাবস্ট্রাক্ট করা হয়।
| HAL অডিও প্রসঙ্গ | AudioAttributes-এর ব্যবহার |
|---|---|
| মিউজিক | মিডিয়া |
| VOICE_COMMAND | USAGE_ASSISTANT |
| নেভিগেশন | ASSISTANCE_NAVIGATION_GUIDANCE |
| কল করুন | VOICE_COMMUNICATION |
| রিংটোন | NOTIFICATION_RINGTONE |
| বিজ্ঞপ্তি | বিজ্ঞপ্তি |
| ALARM | ALARM |
| SYSTEM_SOUND | ASSISTANCE_SONIFICATION |
| অজানা | অজানা |
আপনি যেকোনও
ইনস্ট্যান্সের জন্য নিম্নলিখিত CONTEXT_NUMBER মানগুলির মধ্যে একটি দিতে পারেন:
- MUSIC_CONTEXT // Music playback
- NAVIGATION_CONTEXT // নেভিগেশন সংক্রান্ত দিকনির্দেশ
- VOICE_COMMAND_CONTEXT // Voice command session
- CALL_RING_CONTEXT // ভয়েস কল রিং হচ্ছে
- CALL_CONTEXT // ভয়েস কল
- ALARM_CONTEXT // Android থেকে অ্যালার্ম সাউন্ড
- NOTIFICATION_CONTEXT // বিজ্ঞপ্তি
- SYSTEM_SOUND_CONTEXT // ব্যবহারকারীর ইন্টার্যাকশন সাউন্ড (বোতামে ক্লিক করা ইত্যাদি)
পতাকা
অডিও ফ্রেমওয়ার্ক কীভাবে অডিও প্লেব্যাকে এফেক্ট প্রয়োগ করে তা ফ্ল্যাগ নির্দিষ্ট করে। কোনও ইনস্ট্যান্সের জন্য নিম্নলিখিত এক বা একাধিক ফ্ল্যাগ দিন:
FLAG_AUDIBILITY_ENFORCED. সাউন্ড যেন শোনা যায় তা নিশ্চিত করতে সিস্টেমকে অনুরোধ করে। লেগ্যাসিSTREAM_SYSTEM_ENFORCED-এর (যেমন, ক্যামেরার শাটার সাউন্ড জোর করে চালু করা) প্রয়োজন মেটাতে ব্যবহার করা হয়।HW_AV_SYNC. হার্ডওয়্যার A/V সিঙ্ক্রোনাইজেশন কাজ করে এমন একটি আউটপুট স্ট্রিম বেছে নিতে সিস্টেমকে অনুরোধ করে।
অডিও অ্যাট্রিবিউট ফ্ল্যাগগুলি নন-এক্সক্লুসিভ এবং একত্রিত করা যেতে পারে। এইসব ফ্ল্যাগ সম্পর্কে আরও জানতে, অডিও অ্যাট্রিবিউট API দেখুন।
উদাহরণ
এই উদাহরণে, AudioAttributes.Builder নতুন AudioTrack
ইনস্ট্যান্সের
দ্বারা ব্যবহৃত AudioAttributes-কে নির্ধারণ করে:
AudioTrack myTrack = new AudioTrack(
new AudioAttributes.Builder()
.setUsage(AudioAttributes.USAGE_MEDIA)
.setContentType(AudioAttributes.CONTENT_TYPE_MUSIC)
.build(),
myFormat, myBuffSize, AudioTrack.MODE_STREAM, mySession);মানানসই
Android 5.0 ও তার পরবর্তী যেকোনও ভার্সনের জন্য অ্যাপ্লিকেশন তৈরি বা আপডেট করার সময় অ্যাপ্লিকেশন ডেভেলপারদের অডিও অ্যাট্রিবিউট ব্যবহার করা উচিত। তবে, অ্যাট্রিবিউটের সুবিধা নেওয়ার জন্য অ্যাপ্লিকেশনকে প্রয়োজনীয় হতে হবে না; সেগুলি শুধুমাত্র পুরনো স্ট্রিম টাইপ ম্যানেজ করতে পারে অথবা অ্যাট্রিবিউট সম্পর্কে অজানা থাকতে পারে (যেমন, একটি সাধারণ মিডিয়া প্লেয়ার যা সেটি কী কন্টেন্ট চালাচ্ছে সেই সম্পর্কে কিছুই জানে না)।
এইসব ক্ষেত্রে, ফ্রেমওয়ার্ক পুরনো ডিভাইস ও Android রিলিজের সাথে ব্যাকওয়ার্ড কম্প্যাটিবিলিটি বজায় রাখে। এর জন্য, এটি অটোমেটিক লিগ্যাসি অডিও স্ট্রিম টাইপকে অডিও অ্যাট্রিবিউটে ট্রান্সলেট করে। তবে, ফ্রেমওয়ার্ক বিভিন্ন ডিভাইস, প্রস্তুতকারক বা Android রিলিজ জুড়ে এই ম্যাপিং প্রয়োগ বা গ্যারেন্টি দেয় না।
মানানসই ম্যাপিং:
| Android 5.0 এবং তার পরবর্তী যেকোনও ভার্সন | Android 4.4 ও এর আগের যেকোনও ভার্সন |
|---|---|
CONTENT_TYPE_SPEECHUSAGE_VOICE_COMMUNICATION
|
STREAM_VOICE_CALL
|
CONTENT_TYPE_SONIFICATIONUSAGE_ASSISTANCE_SONIFICATION
|
STREAM_SYSTEM
|
CONTENT_TYPE_SONIFICATIONUSAGE_NOTIFICATION_RINGTONE
|
STREAM_RING
|
CONTENT_TYPE_MUSICUSAGE_UNKNOWNUSAGE_MEDIAUSAGE_GAMEUSAGE_ASSISTANCE_ACCESSIBILITYUSAGE_ASSISTANCE_NAVIGATION_GUIDANCE
|
STREAM_MUSIC
|
CONTENT_TYPE_SONIFICATIONUSAGE_ALARM
|
STREAM_ALARM
|
CONTENT_TYPE_SONIFICATIONUSAGE_NOTIFICATIONUSAGE_NOTIFICATION_COMMUNICATION_REQUESTUSAGE_NOTIFICATION_COMMUNICATION_INSTANTUSAGE_NOTIFICATION_COMMUNICATION_DELAYEDUSAGE_NOTIFICATION_EVENT
|
STREAM_NOTIFICATION
|
CONTENT_TYPE_SPEECH
|
(@hide) STREAM_BLUETOOTH_SCO
|
FLAG_AUDIBILITY_ENFORCED
|
(@hide) STREAM_SYSTEM_ENFORCED
|
CONTENT_TYPE_SONIFICATIONUSAGE_VOICE_COMMUNICATION_SIGNALLING
|
(@hide) STREAM_DTMF
|
সিস্টেম থেকে সরিয়ে দেওয়া স্ট্রিমের ধরন
Android 9 ভার্সনে অটোমোটিভ ব্যবহারের জন্য নিম্নলিখিত স্ট্রিমের ধরন বন্ধ করে দেওয়া হয়েছে:
- STREAM_DEFAULT
- STREAM_VOICE_CALL
- STREAM_SYSTEM
- STREAM_RING
- STREAM_MUSIC
- STREAM_ALARM
- STREAM_NOTIFICATION
- STREAM_BLUETOOTH_SCO
- STREAM_SYSTEM_ENFORCED
- STREAM_DTMF
- STREAM_TTS
- STREAM_ACCESSIBILITY
আরও বিবরণের জন্য, দেখুন অটোমোটিভ অডিও।