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

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

ใน 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_การเข้าถึง

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