แอตทริบิวต์เสียง

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

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

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