مشخصه‌های صوتی

پخش‌کننده‌های صوتی از ویژگی‌هایی پشتیبانی می‌کنند که نحوه مدیریت تصمیمات مسیریابی، میزان صدا، و فوکوس را برای منبع مشخص‌شده توسط سیستم صوتی تعریف می‌کنند. برنامه‌ها می‌توانند مشخصه‌هایی را به بازپخش صدا پیوست کنند (مثل موسیقی پخش‌شده توسط سرویس جاری‌سازی یا اعلان ایمیل جدید) سپس مشخصه‌های منبع صدا را به چارچوب منتقل کنند، جایی که سیستم صوتی از مشخصه‌ها برای تصمیم‌گیری درباره ترکیب صدا و اعلام وضعیت سیستم به برنامه‌ها استفاده می‌کند.

در 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_MOVIE
  • CONTENT_TYPE_MUSIC
  • CONTENT_TYPE_SONIFICATION
  • CONTENT_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_SPEECH
USAGE_VOICE_COMMUNICATION
STREAM_VOICE_CALL
CONTENT_TYPE_SONIFICATION
USAGE_ASSISTANCE_SONIFICATION
STREAM_SYSTEM
CONTENT_TYPE_SONIFICATION
USAGE_NOTIFICATION_RINGTONE
STREAM_RING
CONTENT_TYPE_MUSIC
USAGE_UNKNOWN
USAGE_MEDIA
USAGE_GAME
USAGE_ASSISTANCE_ACCESSIBILITY
USAGE_ASSISTANCE_NAVIGATION_GUIDANCE
STREAM_MUSIC
CONTENT_TYPE_SONIFICATION
USAGE_ALARM
STREAM_ALARM
CONTENT_TYPE_SONIFICATION
USAGE_NOTIFICATION
USAGE_NOTIFICATION_COMMUNICATION_REQUEST
USAGE_NOTIFICATION_COMMUNICATION_INSTANT
USAGE_NOTIFICATION_COMMUNICATION_DELAYED
USAGE_NOTIFICATION_EVENT
STREAM_NOTIFICATION
CONTENT_TYPE_SPEECH ‫(@hide) STREAM_BLUETOOTH_SCO
FLAG_AUDIBILITY_ENFORCED ‫(@hide) STREAM_SYSTEM_ENFORCED
CONTENT_TYPE_SONIFICATION
USAGE_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

برای جزئیات بیشتر، صدای خودرو را ببینید.