ऑडियो एट्रिब्यूट

ऑडियो प्लेयर में ऐसे एट्रिब्यूट काम करते हैं जिनसे यह तय होता है कि ऑडियो सिस्टम, तय किए गए सोर्स के लिए रूटिंग, वॉल्यूम, और फ़ोकस के फ़ैसले कैसे लेता है. ऐप्लिकेशन, ऑडियो चलाने के लिए एट्रिब्यूट अटैच कर सकते हैं. जैसे, किसी स्ट्रीमिंग सेवा से चलाया गया संगीत या किसी नए ईमेल की सूचना. इसके बाद, ऑडियो सोर्स के एट्रिब्यूट को फ़्रेमवर्क में भेजा जा सकता है. यहां ऑडियो सिस्टम, एट्रिब्यूट का इस्तेमाल करके मिक्सिंग के फ़ैसले लेता है और ऐप्लिकेशन को सिस्टम की स्थिति के बारे में सूचना देता है.

Android 4.4 और उससे पहले के वर्शन में, फ़्रेमवर्क सिर्फ़ ऑडियो स्ट्रीम टाइप का इस्तेमाल करके, मिक्स करने के फ़ैसले लेता था. हालांकि, स्ट्रीम टाइप के आधार पर ऐसे फ़ैसले लेना, कई ऐप्लिकेशन और डिवाइसों पर अच्छी क्वालिटी का आउटपुट देने के लिए बहुत सीमित था. उदाहरण के लिए, मोबाइल डिवाइस पर, कुछ ऐप्लिकेशन (जैसे, Google Maps) STREAM_MUSIC स्ट्रीम टाइप पर ड्राइविंग दिशा-निर्देश चलाते हैं. हालांकि, प्रोजेक्शन मोड (जैसे, Android Auto) में मोबाइल डिवाइसों पर, ऐप्लिकेशन ड्राइविंग दिशा-निर्देशों को अन्य मीडिया स्ट्रीम के साथ नहीं चला सकते.

ऐप्लिकेशन, ऑडियो एट्रिब्यूट एपीआई का इस्तेमाल करके, ऑडियो सिस्टम को किसी खास ऑडियो सोर्स के बारे में पूरी जानकारी देते हैं. इसमें, इस्तेमाल (सोर्स क्यों चल रहा है), कॉन्टेंट टाइप (सोर्स क्या चला रहा है), फ़्लैग (सोर्स को कैसे चलाया जाना चाहिए), और कॉन्टेक्स्ट (Android 9 में नया) शामिल हैं. सिंटैक्स:

AudioAttributes {
    mUsage
    mContentType
    mSource
    mFlags
    mTags / mFormattedTags / mBundle    (key value pairs)
}
  • इस्तेमाल. इससे पता चलता है कि सोर्स क्यों चल रहा है. साथ ही, यह रूटिंग, फ़ोकस, और वॉल्यूम के फ़ैसले भी कंट्रोल करता है.
  • कॉन्टेंट का टाइप. इससे पता चलता है कि सोर्स पर क्या चल रहा है (संगीत, फ़िल्म, बोली, साउंडफ़िकेशन, अज्ञात).
  • Context. ऑडियो एचएएल के लिए इस्तेमाल की गई वैल्यू.
  • फ़्लैग. इससे पता चलता है कि सोर्स को कैसे चलाया जाना चाहिए. इसमें, ऑडियो को साफ़ तौर पर सुनने की सुविधा (कुछ देशों में कैमरे के शटर की आवाज़ ज़रूरी है) और हार्डवेयर के ऑडियो/वीडियो को सिंक करने की सुविधा शामिल है.

डाइनैमिक प्रोसेसिंग के लिए, ऐप्लिकेशन को फ़िल्म, संगीत, और बोली के कॉन्टेंट के बीच फ़र्क़ करना होगा. डेटा के बारे में जानकारी भी अहम हो सकती है. जैसे, आवाज़ की लाउडनेस और पीक सैंपल वैल्यू.

एट्रिब्यूट का इस्तेमाल करना

इस्तेमाल से पता चलता है कि स्ट्रीम का इस्तेमाल किस संदर्भ में किया जा रहा है. इससे यह जानकारी मिलती है कि साउंड क्यों चल रहा है और उसका इस्तेमाल किस काम के लिए किया जा रहा है. स्ट्रीम टाइप की तुलना में, इस्तेमाल की जानकारी ज़्यादा जानकारी देती है. साथ ही, प्लैटफ़ॉर्म या रूटिंग की नीतियों को वॉल्यूम या रूटिंग के फ़ैसलों को बेहतर बनाने में मदद मिलती है.

किसी भी इंस्टेंस के लिए, इस्तेमाल की इनमें से कोई एक वैल्यू दें:

  • 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 की परिभाषा देखें.

कॉन्टेंट किस तरह का है

कॉन्टेंट टाइप से यह पता चलता है कि साउंड किस तरह की है. साथ ही, इससे कॉन्टेंट की सामान्य कैटगरी के बारे में भी पता चलता है, जैसे कि फ़िल्म, बोली या बीप/रिंगटोन. ऑडियो फ़्रेमवर्क, कॉन्टेंट टाइप की जानकारी का इस्तेमाल करता है, ताकि ऑडियो पोस्ट-प्रोसेसिंग ब्लॉक को चुनिंदा तौर पर कॉन्फ़िगर किया जा सके. कॉन्टेंट टाइप की जानकारी देना ज़रूरी नहीं है. हालांकि, जब भी कॉन्टेंट टाइप की जानकारी हो, तो आपको उसे शामिल करना चाहिए. जैसे, फ़िल्म स्ट्रीमिंग सेवा के लिए CONTENT_TYPE_MOVIE या संगीत चलाने वाले ऐप्लिकेशन के लिए CONTENT_TYPE_MUSIC का इस्तेमाल करना.

किसी भी इंस्टेंस के लिए, कॉन्टेंट टाइप की इनमें से कोई एक वैल्यू दें:

  • CONTENT_TYPE_UNKNOWN (डिफ़ॉल्ट)
  • CONTENT_TYPE_MOVIE
  • CONTENT_TYPE_MUSIC
  • CONTENT_TYPE_SONIFICATION
  • CONTENT_TYPE_SPEECH

ऑडियो एट्रिब्यूट के कॉन्टेंट टाइप की वैल्यू, एक-दूसरे से अलग-अलग होती हैं. कॉन्टेंट टाइप के बारे में जानकारी के लिए, ऑडियो एट्रिब्यूट एपीआई देखें.

कॉन्टेक्स्ट

Android में हर आवाज़ की पहचान, उससे जुड़े ऐप्लिकेशन और आवाज़ जनरेट करने की वजह से की जाती है. साथ ही, Android डिवाइस इस जानकारी का इस्तेमाल करके यह तय करता है कि आवाज़ को कैसे दिखाया जाए. Android 8.x और उससे पहले के वर्शन में, ऐप्लिकेशन, AudioSystem.STREAM_MUSIC या AudioAttributes जैसे लेगसी स्ट्रीम टाइप का इस्तेमाल करके, आवाज़ जनरेट होने की वजह की शिकायत कर सकते हैं. Android 9 में, AudioAttributes.usage वैल्यू को एचएएल लेवल पर कॉन्टेक्स्ट के तौर पर एब्स्ट्रैक्ट किया जाता है.

HAL ऑडियो कॉन्टेक्स्ट AudioAttributes एट्रिब्यूट का इस्तेमाल
संगीत मीडिया
VOICE_COMMAND USAGE_ASSISTANT
नेविगेशन ASSISTANCE_NAVIGATION_GUIDANCE
कॉल करें VOICE_COMMUNICATION
RINGTONE NOTIFICATION_RINGTONE
सूचना सूचना
अलार्म अलार्म
SYSTEM_SOUND ASSISTANCE_SONIFICATION
कोई जानकारी नहीं है कोई जानकारी नहीं है

किसी भी उदाहरण के लिए, CONTEXT_NUMBER की इनमें से कोई एक वैल्यू दी जा सकती है:

  • MUSIC_CONTEXT // संगीत चलाना
  • NAVIGATION_CONTEXT // नेविगेशन के लिए निर्देश
  • VOICE_COMMAND_CONTEXT // बोले गए निर्देश का सेशन
  • CALL_RING_CONTEXT // वॉइस कॉल के लिए घंटी बजना
  • CALL_CONTEXT // वॉइस कॉल
  • ALARM_CONTEXT // Android से अलार्म की आवाज़
  • NOTIFICATION_CONTEXT // सूचनाएं
  • SYSTEM_SOUND_CONTEXT // उपयोगकर्ता के इंटरैक्शन की आवाज़ें (बटन क्लिक वगैरह)

झंडे

फ़्लैग से पता चलता है कि ऑडियो फ़्रेमवर्क, ऑडियो चलाने पर इफ़ेक्ट कैसे लागू करता है. किसी इंस्टेंस के लिए, इनमें से एक या उससे ज़्यादा फ़्लैग दें:

  • FLAG_AUDIBILITY_ENFORCED. सिस्टम से यह पक्का करने का अनुरोध करता है कि आवाज़ सुनाई दे रही हो. लेगसी STREAM_SYSTEM_ENFORCED की ज़रूरतों को पूरा करने के लिए इस्तेमाल करें. जैसे, कैमरे के शटर की आवाज़ को चालू करना.
  • HW_AV_SYNC. सिस्टम से ऐसी आउटपुट स्ट्रीम चुनने का अनुरोध करता है जो हार्डवेयर के साथ A/V सिंक करने की सुविधा के साथ काम करती है.

ऑडियो एट्रिब्यूट के फ़्लैग, किसी एक वीडियो के लिए ही नहीं होते. इन्हें एक साथ इस्तेमाल किया जा सकता है. इन फ़्लैग के बारे में जानकारी पाने के लिए, ऑडियो एट्रिब्यूट एपीआई देखें.

उदाहरण

इस उदाहरण में, 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_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

ज़्यादा जानकारी के लिए, वाहन के लिए ऑडियो देखें.