เครื่องเล่นเสียงรองรับคุณลักษณะที่กำหนดวิธีที่ระบบเสียงจัดการการตัดสินใจเกี่ยวกับการกำหนดเส้นทาง ระดับเสียง และโฟกัสสำหรับแหล่งที่มาที่ระบุ แอปพลิเคชันสามารถแนบคุณลักษณะเข้ากับการเล่นเสียง (เช่น เพลงที่เล่นโดยบริการสตรีมมิ่งหรือการแจ้งเตือนสำหรับอีเมลใหม่) จากนั้นส่งแอตทริบิวต์แหล่งที่มาของเสียงไปยังเฟรมเวิร์ก โดยที่ระบบเสียงจะใช้คุณลักษณะดังกล่าวในการตัดสินใจมิกซ์และเพื่อแจ้งเตือนแอปพลิเคชัน เกี่ยวกับสถานะของระบบ
ใน 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) }
- การใช้งาน . ระบุสาเหตุที่เล่นแหล่งข้อมูลและควบคุมการตัดสินใจเกี่ยวกับเส้นทาง โฟกัส และระดับเสียง
- ชนิดของเนื้อหา . ระบุแหล่งที่มาที่กำลังเล่น (เพลง ภาพยนตร์ เสียงพูด โซนิฟิเคชัน ไม่ทราบ)
- บริบท . ค่าการใช้งานสรุปไปที่ Audio HAL
- ธง . ระบุวิธีการเล่นแหล่งที่มา รวมการสนับสนุนการบังคับใช้ด้านเสียง (ต้องใช้เสียงชัตเตอร์ของกล้องในบางประเทศ) และการซิงโครไนซ์เสียง/วิดีโอด้วยฮาร์ดแวร์
สำหรับการประมวลผลแบบไดนามิก แอปพลิเคชันต้องแยกแยะระหว่างเนื้อหาภาพยนตร์ เพลง และคำพูด ข้อมูลเกี่ยวกับตัวข้อมูลเองก็อาจมีความสำคัญเช่นกัน เช่น ความดังและค่าตัวอย่างสูงสุด
ใช้คุณลักษณะ
การใช้งานจะระบุบริบทที่ใช้สตรีม โดยให้ข้อมูลเกี่ยวกับสาเหตุที่เล่นเสียงและสิ่งที่ใช้เสียง ข้อมูลการใช้งานชัดเจนกว่าประเภทสตรีม และช่วยให้แพลตฟอร์มหรือนโยบายการกำหนดเส้นทางปรับแต่งปริมาณหรือการตัดสินใจเกี่ยวกับเส้นทางได้
ระบุค่าการใช้งานอย่างใดอย่างหนึ่งต่อไปนี้สำหรับอินสแตนซ์ใดๆ:
- USAGE_UNKNOWN
- USAGE_สื่อ
- USAGE_VOICE_COMMUNICATION
- USAGE_VOICE_COMMUNICATION_SIGNALLING
- USAGE_ALARM
- USAGE_การแจ้งเตือน
- 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
ค่าประเภทเนื้อหาแอตทริบิวต์เสียงเป็นแบบแยกกัน สำหรับรายละเอียดเกี่ยวกับประเภทเนื้อหา โปรดดูที่ API แอตทริบิวต์เสียง
บริบท
แต่ละเสียงใน Android จะถูกระบุโดยแอปพลิเคชันที่รับผิดชอบและเหตุผลในการสร้างเสียง และอุปกรณ์ Android จะใช้ข้อมูลนี้เพื่อกำหนดวิธีนำเสนอเสียง ใน Android 8.x และต่ำกว่า แอปพลิเคชันสามารถรายงานเหตุผลในการสร้างเสียงได้โดยใช้ประเภทสตรีมแบบเดิม (เช่น AudioSystem.STREAM_MUSIC
) หรือ AudioAttributes
ใน Android 9 ค่า AudioAttributes.usage
จะถูกสรุปที่ระดับ HAL เป็น Contexts
บริบทเสียง HAL | การใช้งานคุณสมบัติเสียง |
---|---|
ดนตรี | สื่อ |
VOICE_COMMAND | USAGE_ASSISTANT |
การนำทาง | ASSISTANCE_NAVIGATION_GUIDANCE |
เรียก | VOICE_COMMUNICATION |
ริงโทน | การแจ้งเตือน_RINGTONE |
การแจ้งเตือน | การแจ้งเตือน |
เตือน | เตือน |
ระบบ_เสียง | 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 ของฮาร์ดแวร์
ธงแอตทริบิวต์เสียงไม่ผูกขาดและสามารถนำมารวมกันได้ สำหรับรายละเอียดเกี่ยวกับแฟล็กเหล่านี้ โปรดดูที่ 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_VOICE_CALL
- สตรีม_ระบบ
- สตรีม_ริง
- สตรีม_เพลง
- สตรีม_สัญญาณเตือน
- สตรีม_การแจ้งเตือน
- STREAM_BLUETOOTH_SCO
- STREAM_SYSTEM_ENFORCED
- STREAM_DTMF
- สตรีม_TTS
- STREAM_การเข้าถึง
สำหรับรายละเอียดเพิ่มเติม โปรดดู เครื่องเสียงรถยนต์