คุณสมบัติเสียง

เครื่องเล่นเสียงสนับสนุนคุณลักษณะที่กำหนดวิธีที่ระบบเสียงจัดการกับการกำหนดเส้นทาง ระดับเสียง และการตัดสินใจโฟกัสสำหรับแหล่งที่มาที่ระบุ แอปพลิเคชันสามารถแนบแอตทริบิวต์กับการเล่นเสียง (เช่น เพลงที่เล่นโดยบริการสตรีมหรือการแจ้งเตือนสำหรับอีเมลใหม่) จากนั้นส่งแอตทริบิวต์แหล่งที่มาของเสียงไปยังเฟรมเวิร์ก โดยที่ระบบเสียงใช้แอตทริบิวต์เพื่อตัดสินใจผสมและแจ้งแอปพลิเคชัน เกี่ยวกับสถานะของระบบ

ใน 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_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

ค่าประเภทเนื้อหาแอตทริบิวต์เสียงจะไม่เกิดร่วมกัน สำหรับรายละเอียดเกี่ยวกับประเภทเนื้อหา โปรดดูที่ 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
ริงโทน 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 ของฮาร์ดแวร์

แฟล็กแอตทริบิวต์เสียงเป็นแบบไม่มีเอกสิทธิ์และสามารถรวมกันได้ สำหรับรายละเอียดเกี่ยวกับแฟล็กเหล่านี้ โปรดดูที่ 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 (@ซ่อน) STREAM_SYSTEM_ENFORCED
CONTENT_TYPE_SONIFICATION
USAGE_VOICE_COMMUNICATION_SIGNALLING
(@ซ่อน) 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

สำหรับรายละเอียดเพิ่มเติม โปรดดูที่ เครื่องเสียงรถยนต์