ऑडियो प्लेयर में ऐसे एट्रिब्यूट काम करते हैं जिनसे यह तय होता है कि ऑडियो सिस्टम, तय किए गए सोर्स के लिए रूटिंग, वॉल्यूम, और फ़ोकस के फ़ैसले कैसे लेता है. ऐप्लिकेशन, ऑडियो चलाने के लिए एट्रिब्यूट अटैच कर सकते हैं. जैसे, किसी स्ट्रीमिंग सेवा से चलाया गया संगीत या किसी नए ईमेल की सूचना. इसके बाद, ऑडियो सोर्स के एट्रिब्यूट को फ़्रेमवर्क में भेजा जा सकता है. यहां ऑडियो सिस्टम, एट्रिब्यूट का इस्तेमाल करके मिक्सिंग के फ़ैसले लेता है और ऐप्लिकेशन को सिस्टम की स्थिति के बारे में सूचना देता है.
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_MOVIECONTENT_TYPE_MUSICCONTENT_TYPE_SONIFICATIONCONTENT_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_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
ज़्यादा जानकारी के लिए, वाहन के लिए ऑडियो देखें.