เครื่องเล่นเสียงรองรับแอตทริบิวต์ที่กำหนดวิธีการทำงานของระบบเสียงในการจัดการการกำหนดเส้นทาง ระดับเสียง และโฟกัสสำหรับแหล่งที่มาที่ระบุ แอปพลิเคชันสามารถแนบแอตทริบิวต์กับการเล่นเสียง (เช่น เพลงที่เล่นโดยบริการสตรีมมิงหรือการแจ้งเตือนอีเมลใหม่) จากนั้นส่งแอตทริบิวต์แหล่งที่มาของเสียงไปยังเฟรมเวิร์ก โดยระบบเสียงจะใช้แอตทริบิวต์ดังกล่าวในการตัดสินใจผสมเสียงและเพื่อแจ้งให้แอปพลิเคชันทราบเกี่ยวกับสถานะของระบบ
ใน Android 4.4 และเวอร์ชันก่อนหน้า เฟรมเวิร์กจะตัดสินใจผสมโดยใช้เฉพาะประเภทสตรีมเสียง อย่างไรก็ตาม การกำหนดการตัดสินใจดังกล่าวตามประเภทสตรีมนั้นมีข้อจำกัดมากเกินไปที่จะสร้างเอาต์พุตที่มีคุณภาพในแอปพลิเคชันและอุปกรณ์ต่างๆ ตัวอย่างเช่น บนอุปกรณ์เคลื่อนที่ แอปพลิเคชันบางแอป (เช่น Google Maps) จะเล่นเส้นทางการขับขี่ในสตรีมประเภท STREAM_MUSIC แต่บนอุปกรณ์เคลื่อนที่ในโหมดการฉายภาพ (เช่น Android Auto) แอปพลิเคชันจะผสมเส้นทางการขับขี่เข้ากับสตรีมสื่ออื่นๆ ไม่ได้
เมื่อใช้ Audio Attribute API แอปพลิเคชันจะระบุข้อมูลโดยละเอียดเกี่ยวกับแหล่งที่มาของเสียงที่เฉพาะเจาะจงให้กับระบบเสียง ซึ่งรวมถึงการใช้งาน (เหตุผลที่แหล่งที่มาเล่น), ประเภทเนื้อหา (สิ่งที่แหล่งที่มาเล่น), Flag (วิธีเล่นแหล่งที่มา) และบริบท (ใหม่ใน Android 9) ไวยากรณ์:
AudioAttributes { mUsage mContentType mSource mFlags mTags / mFormattedTags / mBundle (key value pairs) }
- การใช้งาน ระบุสาเหตุที่แหล่งที่มาเล่นอยู่และควบคุมการกำหนดเส้นทาง โฟกัส และระดับเสียง
- ประเภทเนื้อหา ระบุสิ่งที่แหล่งที่มาเล่นอยู่ (เพลง ภาพยนตร์ เสียงพูด เสียงประกอบ ไม่ทราบ)
- บริบท ค่าการใช้งานที่แยกออกมาเป็น HAL เสียง
- Flag ระบุวิธีเล่นแหล่งที่มา รวมถึงการรองรับการบังคับใช้การได้ยินเสียง (ต้องใช้เสียงชัตเตอร์กล้องในบางประเทศ) และการซิงค์เสียง/วิดีโอของฮาร์ดแวร์
สำหรับระบบประมวลผลไดนามิก แอปพลิเคชันต้องแยกความแตกต่างระหว่างเนื้อหาภาพยนตร์ เพลง และเสียงพูด ข้อมูลเกี่ยวกับตัวข้อมูลเองก็อาจสำคัญเช่นกัน เช่น ความดังและค่าตัวอย่างสูงสุด
ใช้แอตทริบิวต์
การใช้งานจะระบุบริบทที่ใช้สตรีม โดยให้ข้อมูลเกี่ยวกับเหตุผลที่เล่นเสียงและวัตถุประสงค์ของเสียง ข้อมูลการใช้งานแสดงข้อมูลได้มากกว่าประเภทสตรีม และช่วยให้แพลตฟอร์มหรือนโยบายการกำหนดเส้นทางปรับปริมาณหรือการตัดสินใจในการกำหนดเส้นทางได้
ระบุค่าการใช้งานค่าใดค่าหนึ่งต่อไปนี้สำหรับอินสแตนซ์
- 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
ค่าประเภทเนื้อหาของแอตทริบิวต์เสียงจะแยกกัน ดูรายละเอียดเกี่ยวกับประเภทเนื้อหาได้ที่ audio attribute API
บริบท
เสียงแต่ละรายการใน Android จะระบุโดยแอปพลิเคชันที่รับผิดชอบและเหตุผลในการสร้างเสียง และอุปกรณ์ Android จะใช้ข้อมูลนี้เพื่อกำหนดวิธีนำเสนอเสียง ใน Android 8.x และต่ำกว่า แอปพลิเคชันจะรายงานสาเหตุของการสร้างเสียงได้โดยใช้ประเภทสตรีมเดิม (เช่น AudioSystem.STREAM_MUSIC
) หรือ AudioAttributes
ใน Android 9 ค่า AudioAttributes.usage
ได้รับการแยกให้เป็นบริบทที่ระดับ HAL
บริบทเสียง HAL | การใช้งาน AudioAttributes |
---|---|
ดนตรี | สื่อ |
VOICE_COMMAND | USAGE_ASSISTANT |
การนำทาง | ASSISTANCE_NAVIGATION_GUIDANCE |
โทร | VOICE_COMMUNICATION |
เสียงเรียกเข้า | NOTIFICATION_RINGTONE |
การแจ้งเตือน | การแจ้งเตือน |
นาฬิกาปลุก | นาฬิกาปลุก |
SYSTEM_SOUND | ASSISTANCE_SONIFICATION |
ไม่ทราบ | ไม่ทราบ |
คุณสามารถระบุค่า CONTEXT_NUMBER
รายการใดรายการหนึ่งต่อไปนี้สำหรับอินสแตนซ์ใดก็ได้
- MUSIC_CONTEXT // การเล่นเพลง
- NAVIGATION_CONTEXT // คำแนะนำการนำทาง
- VOICE_COMMAND_CONTEXT // เซสชันคำสั่งเสียง
- CALL_RING_CONTEXT // Voice call ringing
- CALL_CONTEXT // การโทรด้วยเสียง
- ALARM_CONTEXT // เสียงปลุกจาก Android
- NOTIFICATION_CONTEXT // Notifications
- SYSTEM_SOUND_CONTEXT // เสียงการโต้ตอบของผู้ใช้ (การคลิกปุ่ม ฯลฯ)
ธง
Flag จะระบุวิธีที่เฟรมเวิร์กเสียงใช้เอฟเฟกต์กับการเล่นเสียง ระบุ Flag ต่อไปนี้อย่างน้อย 1 รายการสําหรับอินสแตนซ์
FLAG_AUDIBILITY_ENFORCED
ขอให้ระบบตรวจสอบความสามารถในการได้ยินเสียง ใช้เพื่อตอบสนองความต้องการของSTREAM_SYSTEM_ENFORCED
รุ่นเดิม (เช่น การบังคับให้เสียงชัตเตอร์ของกล้องดัง)HW_AV_SYNC
. ขอให้ระบบเลือกสตรีมเอาต์พุตที่รองรับการซิงค์ A/V ของฮาร์ดแวร์
FLAG ของแอตทริบิวต์เสียงไม่ใช่แบบผูกขาดและสามารถใช้ร่วมกันได้ โปรดดูรายละเอียดเกี่ยวกับ Flag เหล่านี้ใน audio attribute API
ตัวอย่าง
ในตัวอย่างนี้ 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 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
โปรดดูรายละเอียดเพิ่มเติมที่หัวข้อเสียงสำหรับยานยนต์