پخشکنندههای صوتی از ویژگیهایی پشتیبانی میکنند که نحوه مدیریت تصمیمات مسیریابی، میزان صدا، و فوکوس را برای منبع مشخصشده توسط سیستم صوتی تعریف میکنند. برنامهها میتوانند مشخصههایی را به بازپخش صدا پیوست کنند (مثل موسیقی پخششده توسط سرویس جاریسازی یا اعلان ایمیل جدید) سپس مشخصههای منبع صدا را به چارچوب منتقل کنند، جایی که سیستم صوتی از مشخصهها برای تصمیمگیری درباره ترکیب صدا و اعلام وضعیت سیستم به برنامهها استفاده میکند.
در 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)
}- استفاده. مشخص میکند چرا منبع درحال پخش است و تصمیمات مربوط به مسیریابی، تمرکز، و میزان صدا را کنترل میکند.
- نوع محتوا. مشخص میکند منبع چه چیزی پخش میکند (موسیقی، فیلم، گفتار، تبدیل به صدا، ناشناخته).
- بافت. مقادیر استفاده به «لایه انتزاع سختافزار صدا» منتقل شد.
- پرچمها. مشخص میکند منبع چطور باید پخش شود. شامل پشتیبانی از اجرای قابلیت شنیداری (صدای شاتر دوربین در برخی کشورها الزامی است) و همگامسازی سختافزاری صدا/تصویر است.
برای پردازش پویا، برنامهها باید بین محتوای فیلم، موسیقی، و گفتار تمایز قائل شوند. اطلاعات مربوط به خود دادهها نیز ممکن است مهم باشد، مانند بلندی و مقدار نمونه اوج.
استفاده از مشخصهها
«کاربرد» بافتی را که جاریسازی در آن استفاده میشود مشخص میکند و اطلاعاتی درباره دلیل پخش صدا و کاربرد صدا ارائه میدهد. اطلاعات استفاده گویاتر از نوع جاریسازی است و به پلاتفرمها یا خطمشیهای رهیابی اجازه میدهد تصمیمات مربوط به میزان صدا یا رهیابی را اصلاح کنند.
یکی از مقادیر استفاده زیر را برای هر نمونه ارائه دهید:
- 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_MEDIA
و
USAGE_ALARM
تعاریف مراجعه کنید؛ برای استثناها، به
AudioAttributes.Builder
تعریف مراجعه کنید.
نوع محتوا
نوع محتوا مشخص میکند که صدا چیست و دسته کلی محتوا را بیان میکند، مانند فیلم، گفتار، یا صدای بوق/زنگ. چارچوب صوتی از اطلاعات نوع محتوا برای پیکربندی انتخابی واحدهای پسپردازش صوتی استفاده میکند. اگرچه ارائه نوع محتوا اختیاری است، اما هرگاه نوع محتوا مشخص است، باید اطلاعات نوع را اضافه کنید، مثلاً از
CONTENT_TYPE_MOVIE برای سرویس جاریسازی فیلم یا از
CONTENT_TYPE_MUSIC برای برنامه پخش موسیقی استفاده کنید.
برای هر نمونه، یکی از مقادیر نوع محتوای زیر را ارائه دهید:
-
CONTENT_TYPE_UNKNOWN(پیشفرض) CONTENT_TYPE_MOVIECONTENT_TYPE_MUSICCONTENT_TYPE_SONIFICATIONCONTENT_TYPE_SPEECH
مقادیر نوع محتوای مشخصه صوتی متقابلاً انحصاری هستند. برای جزئیات مربوط به انواع محتوا، به API شاخصه صوتی مراجعه کنید.
بافتها
هر صدا در Android با برنامه مسئول و دلیل تولید صدا شناسایی میشود؛ و دستگاه Android از این اطلاعات برای تعیین نحوه ارائه صدا استفاده میکند. در Android نسخه ۸.x و پایینتر، برنامهها میتوانند
دلیل تولید صدا را بااستفاده از انواع جاریسازی قدیمی (مثلاً
AudioSystem.STREAM_MUSIC) یا AudioAttributes گزارش کنند. در
Android 9، مقادیر AudioAttributes.usage
در سطح HAL بهعنوان بافتها انتزاع میشوند.
| بافتهای صوتی HAL | استفاده از AudioAttributes |
|---|---|
| موسیقی | رسانهای |
| فرمان_صوتی | USAGE_ASSISTANT |
| پیمایش | ASSISTANCE_NAVIGATION_GUIDANCE |
| تماس | VOICE_COMMUNICATION |
| آهنگ زنگ | NOTIFICATION_RINGTONE |
| اعلان | اعلان |
| زنگ هشدار | ALARM |
| SYSTEM_SOUND | ASSISTANCE_SONIFICATION |
| نامشخص | نامشخص |
میتوانید یکی از مقادیر CONTEXT_NUMBER زیر را برای هر نمونهای ارائه دهید:
- MUSIC_CONTEXT // بازپخش موسیقی
- NAVIGATION_CONTEXT // مسیرهای پیمایش
- VOICE_COMMAND_CONTEXT // Voice command session
- CALL_RING_CONTEXT // Voice call ringing
- CALL_CONTEXT // Voice call
- ALARM_CONTEXT // صدای زنگ ساعت از Android
- NOTIFICATION_CONTEXT // اعلانها
- SYSTEM_SOUND_CONTEXT // صداهای تعامل کاربر (کلیک دکمه و غیره)
پرچمها
پرچمها مشخص میکنند که چارچوب صوتی چگونه جلوهها را بر پخش صدا اعمال میکند. یک یا چند پرچم زیر را برای نمونه ارائه دهید:
-
FLAG_AUDIBILITY_ENFORCED. از سیستم میخواهد که شنیدنی بودن صدا را تضمین کند. برای برطرف کردن نیازهای قدیمیSTREAM_SYSTEM_ENFORCED(مثل اجباری کردن صدای شاتر دوربین) استفاده میشود. HW_AV_SYNC. از سیستم میخواهد که جاریسازی خروجیای را انتخاب کند که از همگامسازی سختافزاری A/V پشتیبانی میکند.
پرچمهای مشخصه صوتی غیرانحصاری هستند و میتوانند ترکیب شوند. برای جزئیات بیشتر درباره این پرچمها، به میانای برنامهسازی کاربردی مشخصه صوتی مراجعه کنید.
مثال
در این مثال، AudioAttributes.Builder تعریف میکند که
AudioAttributes توسط نمونه جدید AudioTrack
استفاده شود:
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 نسخه ۵٫۰ و بالاتر | 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
برای جزئیات بیشتر، صدای خودرو را ببینید.