Android Automotive OS (AAOS) สร้างบนกลุ่มเสียงหลักของ Android เพื่อรองรับกรณีการใช้งานสำหรับการทำงานเป็นระบบสาระบันเทิงในรถยนต์ AAOS มีหน้าที่รับผิดชอบด้านเสียงระบบสาระบันเทิง (นั่นคือ สื่อ การนำทาง และการสื่อสาร) แต่ไม่รับผิดชอบโดยตรงต่อเสียงกริ่งและเสียงเตือนที่มีข้อกำหนดด้านความพร้อมใช้งานและเวลาที่เข้มงวด แม้ว่า AAOS จะให้สัญญาณและกลไกเพื่อช่วยให้ยานพาหนะจัดการเสียงได้ แต่ในท้ายที่สุดก็ขึ้นอยู่กับรถยนต์ที่จะโทรออกว่าเสียงใดควรเปิดสำหรับผู้ขับขี่และผู้โดยสาร เพื่อให้มั่นใจว่าเสียงที่มีความสำคัญด้านความปลอดภัยและเสียงตามกฎระเบียบจะได้ยินอย่างเหมาะสมโดยไม่ต้อง การหยุดชะงัก
เนื่องจาก Android จัดการประสบการณ์สื่อของรถยนต์ แหล่งสื่อภายนอก เช่น เครื่องรับวิทยุ ควรแสดงโดยแอป ซึ่งสามารถจัดการโฟกัสเสียงและเหตุการณ์คีย์สื่อสำหรับแหล่งที่มาได้
Android 11 มีการเปลี่ยนแปลงต่อไปนี้ในการรองรับเสียงที่เกี่ยวข้องกับยานยนต์:
- การเลือกโซนเสียงอัตโนมัติตาม User ID ที่เกี่ยวข้อง
- การใช้งานระบบใหม่เพื่อรองรับเสียงเฉพาะยานยนต์
- รองรับการโฟกัสเสียง HAL
- การโฟกัสเสียงล่าช้าสำหรับสตรีมที่ไม่ชั่วคราว
- การตั้งค่าผู้ใช้เพื่อควบคุมการโต้ตอบระหว่างการนำทางและการโทร
เสียงและสตรีมของ Android
ระบบเครื่องเสียงรถยนต์รองรับเสียงและสตรีมต่อไปนี้:
รูปที่ 1 แผนภาพสถาปัตยกรรมแบบสตรีมเป็นศูนย์กลาง
Android จัดการเสียงที่มาจากแอป Android ควบคุมแอปเหล่านั้นและกำหนดเส้นทางเสียงไปยังอุปกรณ์เอาต์พุตที่ HAL ตามประเภทของเสียง:
- สตรีมแบบลอจิคัล หรือที่เรียกว่าแหล่งที่มาในระบบการตั้งชื่อเสียงหลัก จะถูกแท็กด้วย คุณสมบัติเสียง
- สตรีมทางกายภาพ หรือที่เรียกว่าอุปกรณ์ในระบบการตั้งชื่อเสียงหลัก จะไม่มีข้อมูลบริบทหลังจากมิกซ์
เพื่อความน่าเชื่อถือ เสียงภายนอก (ที่มาจากแหล่งอิสระ เช่น เสียงเตือนรัดเข็มขัดนิรภัย) จะได้รับการจัดการภายนอก Android, ต่ำกว่า HAL หรือแม้แต่ในฮาร์ดแวร์ที่แยกจากกัน ผู้ติดตั้งระบบจะต้องจัดเตรียมมิกเซอร์ที่รับอินพุตเสียงตั้งแต่หนึ่งสตรีมขึ้นไปจาก Android จากนั้นจึงรวมสตรีมเหล่านั้นในวิธีที่เหมาะสมกับแหล่งกำเนิดเสียงภายนอกที่ยานพาหนะต้องการ
การใช้งาน HAL และมิกเซอร์ภายนอกมีหน้าที่รับผิดชอบในการรับรองว่าได้ยินเสียงภายนอกที่มีความสำคัญด้านความปลอดภัย และสำหรับการมิกซ์ในสตรีมที่ Android จัดเตรียมไว้ให้ และกำหนดเส้นทางไปยังลำโพงที่เหมาะสม
เสียง Android
แอปอาจมีเครื่องเล่นอย่างน้อย 1 ตัวที่โต้ตอบผ่าน Android API มาตรฐาน (เช่น AudioManager สำหรับการควบคุมโฟกัสหรือ MediaPlayer สำหรับการสตรีม) เพื่อปล่อยสตรีมข้อมูลเสียงแบบลอจิคัลอย่างน้อย 1 รายการ ข้อมูลนี้อาจเป็นโมโนแชนเนลเดี่ยวหรือเซอร์ราวด์ 7.1 แต่ถูกกำหนดเส้นทางและถือเป็นแหล่งข้อมูลเดียว สตรีมแอปเชื่อมโยงกับ AudioAttributes ที่ให้คำแนะนำแก่ระบบเกี่ยวกับวิธีการแสดงเสียง
สตรีมแบบลอจิคัลจะถูกส่งผ่าน AudioService และกำหนดเส้นทางไปยังหนึ่ง (และเพียงหนึ่งเดียว) ของสตรีมเอาต์พุตทางกายภาพที่มีอยู่ ซึ่งแต่ละสตรีมเป็นเอาต์พุตของมิกเซอร์ภายใน AudioFlinger หลังจากผสมคุณลักษณะเสียงเข้ากับสตรีมจริงแล้ว คุณลักษณะเหล่านั้นจะไม่สามารถใช้งานได้อีกต่อไป
จากนั้นสตรีมฟิสิคัลแต่ละรายการจะถูกส่งไปยัง Audio HAL เพื่อเรนเดอร์บนฮาร์ดแวร์ ในแอปยานยนต์ ฮาร์ดแวร์การเรนเดอร์อาจเป็นตัวแปลงสัญญาณในเครื่อง (คล้ายกับอุปกรณ์เคลื่อนที่) หรือตัวประมวลผลระยะไกลทั่วทั้งเครือข่ายทางกายภาพของยานพาหนะ ไม่ว่าจะด้วยวิธีใด มันเป็นหน้าที่ของการนำ Audio HAL ไปใช้ในการส่งข้อมูลตัวอย่างจริงและทำให้สามารถได้ยินได้
กระแสภายนอก
สตรีมเสียงที่ไม่ควรส่งผ่าน Android (สำหรับเหตุผลด้านการรับรองหรือเรื่องจังหวะเวลา) อาจถูกส่งไปยังมิกเซอร์ภายนอกโดยตรง ใน Android 11 ตอนนี้ HAL สามารถขอโฟกัสสำหรับเสียงภายนอกเหล่านี้เพื่อแจ้งให้ Android ดำเนินการที่เหมาะสมได้ เช่น หยุดสื่อชั่วคราวหรือป้องกันไม่ให้ผู้อื่นจับโฟกัส
หากสตรีมภายนอกเป็นแหล่งสื่อที่ควรโต้ตอบกับสภาพแวดล้อมเสียงที่ Android กำลังสร้างขึ้น (เช่น หยุดการเล่น MP3 เมื่อเปิดเครื่องรับสัญญาณภายนอก) สตรีมภายนอกเหล่านั้นควรจะแสดงโดยแอป Android แอปดังกล่าวจะขอโฟกัสเสียงในนามของแหล่งสื่อแทน HAL และจะตอบสนองต่อการแจ้งเตือนโฟกัสโดยการเริ่ม/หยุดแหล่งข้อมูลภายนอกตามความจำเป็นเพื่อให้สอดคล้องกับนโยบายการโฟกัสของ Android แอปนี้ยังรับผิดชอบในการจัดการเหตุการณ์สำคัญของสื่อ เช่น การเล่น/หยุดชั่วคราว กลไกหนึ่งที่แนะนำในการควบคุมอุปกรณ์ภายนอกดังกล่าวคือ HwAudioSource
อุปกรณ์เอาท์พุต
ที่ระดับ Audio HAL อุปกรณ์ประเภท AUDIO_DEVICE_OUT_BUS
จะเป็นอุปกรณ์เอาต์พุตทั่วไปสำหรับใช้ในระบบเครื่องเสียงรถยนต์ อุปกรณ์บัสรองรับพอร์ตที่สามารถกำหนดแอดเดรสได้ (โดยที่แต่ละพอร์ตคือจุดสิ้นสุดสำหรับฟิสิคัลสตรีม) และคาดว่าจะเป็นอุปกรณ์เอาต์พุตประเภทเดียวที่รองรับในรถยนต์
การใช้งานระบบสามารถใช้พอร์ตบัสเดียวสำหรับเสียง Android ทั้งหมด ในกรณีนี้ Android จะผสมทุกอย่างเข้าด้วยกันและส่งมอบเป็นสตรีมเดียว อีกวิธีหนึ่ง HAL สามารถจัดเตรียมพอร์ตบัสหนึ่งพอร์ตสำหรับ CarAudioContext
แต่ละรายการเพื่อให้สามารถส่งเสียงประเภทใดก็ได้พร้อมกัน ซึ่งช่วยให้การนำ HAL ไปใช้ในการมิกซ์เสียงต่างๆ ได้ตามต้องการ
การกำหนดบริบทเสียงให้กับอุปกรณ์เอาต์พุตทำได้ผ่าน car_audio_configuration.xml
อินพุตไมโครโฟน
เมื่อบันทึกเสียง Audio HAL จะได้รับการเรียก openInputStream
ซึ่งมีอาร์กิวเมนต์ AudioSource
ที่ระบุวิธีประมวลผลอินพุตไมโครโฟน
แหล่งที่มาของ VOICE_RECOGNITION
(โดยเฉพาะ Google Assistant) คาดว่าจะมีสตรีมไมโครโฟนสเตอริโอที่มีผลกระทบในการยกเลิกเสียงก้อง (ถ้ามี) แต่ไม่มีการประมวลผลอื่นใดที่ใช้อยู่ Assistant คาดว่าจะทำบีมฟอร์มมิ่งได้
อินพุตไมโครโฟนหลายช่องสัญญาณ
หากต้องการบันทึกเสียงจากอุปกรณ์ที่มีมากกว่าสองช่องสัญญาณ (สเตอริโอ) ให้ใช้มาสก์ดัชนีช่องแทนมาสก์ดัชนีตำแหน่ง (เช่น CHANNEL_IN_LEFT
) ตัวอย่าง:
final AudioFormat audioFormat = new AudioFormat.Builder() .setEncoding(AudioFormat.ENCODING_PCM_16BIT) .setSampleRate(44100) .setChannelIndexMask(0xf /* 4 channels, 0..3 */) .build(); final AudioRecord audioRecord = new AudioRecord.Builder() .setAudioFormat(audioFormat) .build(); audioRecord.setPreferredDevice(someAudioDeviceInfo);
เมื่อตั้งค่าทั้ง setChannelMask
และ setChannelIndexMask
แล้ว AudioRecord
จะใช้เฉพาะค่าที่กำหนดโดย setChannelMask
(สูงสุด 2 ช่อง)
การจับพร้อมกัน
ใน Android 10 เฟรมเวิร์ก Android รองรับการบันทึกอินพุตพร้อมกัน แต่มีข้อจำกัดในการปกป้องความเป็นส่วนตัวของผู้ใช้ ส่วนหนึ่งของข้อจำกัดเหล่านี้ แหล่งที่มาเสมือน เช่น AUDIO_SOURCE_FM_TUNER
จะถูกละเว้น และด้วยเหตุนี้จึงได้รับอนุญาตให้บันทึกพร้อมกันพร้อมกับอินพุตปกติ (เช่น ไมโครโฟน) HwAudioSources
ยังไม่ถือว่าเป็นส่วนหนึ่งของข้อจำกัดในการจับภาพพร้อมกัน
แอปที่ออกแบบมาเพื่อทำงานกับอุปกรณ์ AUDIO_DEVICE_IN_BUS
หรือกับอุปกรณ์ AUDIO_DEVICE_IN_FM_TUNER
รองจะต้องอาศัยการระบุอุปกรณ์เหล่านั้นอย่างชัดเจน และใช้ AudioRecord.setPreferredDevice()
เพื่อเลี่ยงผ่านตรรกะการเลือกแหล่งที่มาเริ่มต้นของ Android
การใช้เสียง
AAOS จะใช้ AudioAttributes.AttributeUsages
เป็นหลักในการกำหนดเส้นทาง การปรับระดับเสียง และการจัดการโฟกัส การใช้งานเป็นตัวแทนของ "ทำไม" จึงมีการเล่นสตรีม ดังนั้น สตรีมและคำขอโฟกัสเสียงทั้งหมดควรระบุการใช้งานสำหรับการเล่นเสียง เมื่อไม่ได้ตั้งค่าไว้โดยเฉพาะเมื่อสร้างออบเจ็กต์ AudioAttributes การใช้งานจะมีค่าเริ่มต้นเป็น USAGE_UNKNOWN
แม้ว่าปัจจุบันจะถือว่าสิ่งนี้เหมือนกับ USAGE_MEDIA
แต่พฤติกรรมนี้ไม่ควรนำมาใช้ในการเล่นสื่อ
การใช้งานระบบ
ใน Android 11 มีการแนะนำการใช้งานระบบ การใช้งานเหล่านี้มีพฤติกรรมคล้ายกับการใช้งานที่กำหนดไว้ก่อนหน้านี้ ยกเว้นว่าต้องใช้ API ระบบเพื่อใช้งานเช่นเดียวกับ android.permission.MODIFY_AUDIO_ROUTING
การใช้งานระบบใหม่คือ:
-
USAGE_EMERGENCY
-
USAGE_SAFETY
-
USAGE_VEHICLE_STATUS
-
USAGE_ANNOUNCEMENT
หากต้องการสร้าง AudioAttributes
ด้วยการใช้งานระบบ ให้ใช้ AudioAttributes.Builder#setSystemUsage
แทน setUsage
การเรียกเมธอดนี้ด้วยการใช้งานที่ไม่ใช่ระบบจะส่งผลให้ IllegalArgumentException
ถูกส่งออกไป นอกจากนี้ หากมีการตั้งค่าทั้งการใช้งานระบบและการใช้งานในตัวสร้าง ระบบจะส่ง IllegalArgumentException
เมื่อสร้าง
หากต้องการตรวจสอบการใช้งานที่เกี่ยวข้องกับอินสแตนซ์ AudioAttributes
ให้เรียก AudioAttributes#getSystemUsage
สิ่งนี้จะส่งคืนการใช้งานหรือการใช้งานระบบที่เกี่ยวข้อง
บริบทเสียง
เพื่อให้การกำหนดค่าเสียง AAOS ง่ายขึ้น จึงได้มีการจัดกลุ่มการใช้งานที่คล้ายกันไว้ใน CarAudioContext
บริบทเสียงเหล่านี้ถูกใช้ทั่วทั้ง CarAudioService
เพื่อกำหนดเส้นทาง กลุ่มวอลุ่ม และการจัดการโฟกัสเสียง
บริบทเสียงใน Android 11 คือ:
บริบทเครื่องเสียงรถยนต์ | การใช้งานแอตทริบิวต์ที่เกี่ยวข้อง |
---|---|
MUSIC | UNKNOWN, GAME, MEDIA |
NAVIGATION | ASSISTANCE_NAVIGATION_GUIDANCE |
VOICE_COMMAND | ASSISTANT, ASSISTANCE_ACCESSIBILITY |
CALL_RING | NOTIFICATION_RINGTONE |
CALL | VOICE_COMMUNICATION, VOICE_COMMUNICATION_SIGNALING |
ALARM | ALARM |
NOTIFICATION | NOTIFICATION, NOTIFICATION_* |
SYSTEM_SOUND | ASSISTANCE_SONIFICATION |
EMERGENCY | EMERGENCY |
SAFETY | SAFETY |
VEHICLE_STATUS | VEHICLE_STATUS |
ANNOUNCEMENT | ANNOUNCEMENT |
การทำแผนที่ระหว่างบริบทเสียงและการใช้งาน แถวที่ไฮไลต์มีไว้สำหรับ การใช้งานระบบ ใหม่
เสียงหลายโซน
ยานยนต์ทำให้เกิดกรณีการใช้งานชุดใหม่สำหรับผู้ใช้ที่มีปฏิสัมพันธ์กับแพลตฟอร์มพร้อมกันและต้องการใช้สื่อแยกกัน ตัวอย่างเช่น คนขับสามารถเล่นเพลงในห้องโดยสารได้ในขณะที่ผู้โดยสารเบาะหลังกำลังดูวิดีโอ YouTube บนจอแสดงผลด้านหลัง เสียงแบบหลายโซนช่วยให้ทำเช่นนี้ได้โดยการอนุญาตให้แหล่งเสียงที่แตกต่างกันสามารถเล่นพร้อมกันผ่านพื้นที่ต่างๆ ของรถได้
เสียงแบบหลายโซนที่เริ่มต้นใน Android 10 ช่วยให้ OEM สามารถกำหนดค่าเสียงลงในโซนแยกกันได้ แต่ละโซนคือชุดอุปกรณ์ภายในรถยนต์ที่มีกลุ่มวอลุ่มของตัวเอง การกำหนดค่าเส้นทางสำหรับบริบท และการจัดการโฟกัส ในลักษณะนี้ ห้องโดยสารหลักสามารถกำหนดค่าให้เป็นโซนเสียงเดียวได้ ในขณะที่แจ็คหูฟังของจอแสดงผลด้านหลังสามารถกำหนดค่าเป็นโซนที่สองได้
โซนถูกกำหนดให้เป็นส่วนหนึ่งของ car_audio_configuration.xml
จากนั้น CarAudioService
จะอ่านการกำหนดค่าและช่วย AudioService กำหนดเส้นทางสตรีมเสียงตามโซนที่เกี่ยวข้อง แต่ละโซนยังคงกำหนดกฎสำหรับการกำหนดเส้นทางตามบริบทและ uid ของแอปพลิเคชัน เมื่อเครื่องเล่นถูกสร้างขึ้น CarAudioService
จะกำหนดว่าเครื่องเล่นเชื่อมโยงกับโซนใด จากนั้นขึ้นอยู่กับการใช้งานว่าอุปกรณ์ใดที่ AudioFlinger ควรกำหนดเส้นทางเสียงไป
โฟกัสจะยังคงแยกจากกันสำหรับแต่ละโซนเสียง ช่วยให้แอปพลิเคชันในโซนต่างๆ สามารถสร้างเสียงได้อย่างอิสระโดยไม่รบกวนซึ่งกันและกัน ในขณะที่แอปพลิเคชันยังคงเคารพการเปลี่ยนแปลงโฟกัสภายในโซนของตน CarZonesAudioFocus
ภายใน CarAudioService
มีหน้าที่ในการจัดการโฟกัสสำหรับแต่ละโซน
รูปที่ 2 กำหนดค่าเสียงหลายโซน
เครื่องเสียง HAL
การใช้งานเครื่องเสียงรถยนต์ต้องอาศัย Android Audio HAL มาตรฐาน ซึ่งรวมถึงสิ่งต่อไปนี้:
-
IDevice.hal
. สร้างสตรีมอินพุตและเอาต์พุต จัดการโวลุ่มหลักและการปิดเสียง และใช้:-
createAudioPatch
. เพื่อสร้างแพตช์ภายนอก-ภายนอกระหว่างอุปกรณ์ -
IDevice.setAudioPortConfig()
เพื่อจัดเตรียมวอลุ่มสำหรับสตรีมฟิสิคัลแต่ละรายการ
-
-
IStream.hal
นอกจากตัวแปรอินพุตและเอาต์พุตแล้ว ยังจัดการการสตรีมตัวอย่างเสียงเข้าและออกจากฮาร์ดแวร์ได้ด้วย
ประเภทอุปกรณ์ยานยนต์
ประเภทอุปกรณ์ต่อไปนี้เกี่ยวข้องกับแพลตฟอร์มยานยนต์
ประเภทอุปกรณ์ | คำอธิบาย |
---|---|
AUDIO_DEVICE_OUT_BUS | เอาต์พุตหลักจาก Android (นี่คือวิธีการส่งเสียงทั้งหมดจาก Android ไปยังรถยนต์) ใช้เป็นที่อยู่สำหรับแยกแยะกระแสข้อมูลสำหรับแต่ละบริบท |
AUDIO_DEVICE_OUT_TELEPHONY_TX | ใช้สำหรับเสียงที่ส่งไปยังวิทยุเซลลูลาร์เพื่อส่งสัญญาณ |
AUDIO_DEVICE_IN_BUS | ใช้สำหรับอินพุตที่ไม่ได้จัดประเภทไว้เป็นอย่างอื่น |
AUDIO_DEVICE_IN_FM_TUNER | ใช้สำหรับอินพุตวิทยุกระจายเสียงเท่านั้น |
AUDIO_DEVICE_IN_TV_TUNER | ใช้สำหรับอุปกรณ์ทีวีหากมี |
AUDIO_DEVICE_IN_LINE | ใช้สำหรับช่องต่อสัญญาณเข้า AUX |
AUDIO_DEVICE_IN_BLUETOOTH_A2DP | เพลงที่ได้รับผ่านบลูทูธ |
AUDIO_DEVICE_IN_TELEPHONY_RX | ใช้สำหรับเสียงที่ได้รับจากวิทยุเซลลูล่าร์ที่เกี่ยวข้องกับการโทร |
การกำหนดค่าอุปกรณ์เสียง
อุปกรณ์เสียงที่ Android มองเห็นได้จะต้องกำหนดไว้ใน /audio_policy_configuration.xml
ซึ่งรวมถึงส่วนประกอบต่อไปนี้:
- ชื่อโมดูล รองรับ "primary" (ใช้สำหรับกรณีการใช้งานในยานยนต์), "A2DP", "remote_submix" และ "USB" ชื่อโมดูลและไดรเวอร์เสียงที่เกี่ยวข้องควรได้รับการคอมไพล์เป็น
audio.primary.$(variant).so
- พอร์ตอุปกรณ์ ประกอบด้วยรายการตัวอธิบายอุปกรณ์สำหรับอุปกรณ์อินพุตและเอาต์พุตทั้งหมด (รวมถึงอุปกรณ์ที่เชื่อมต่ออย่างถาวรและอุปกรณ์แบบถอดได้) ที่สามารถเข้าถึงได้จากโมดูลนี้
- สำหรับอุปกรณ์เอาต์พุตแต่ละตัว คุณสามารถกำหนดการควบคุมเกนที่ประกอบด้วยค่าต่ำสุด/สูงสุด/ค่าเริ่มต้น/ขั้นตอนในหน่วยมิลลิเบล (1 มิลลิเบล = 1/100 dB = 1/1000 เบล)
- คุณลักษณะที่อยู่ในอินสแตนซ์ devicePort สามารถใช้ค้นหาอุปกรณ์ได้ แม้ว่าจะมีอุปกรณ์หลายเครื่องที่มีอุปกรณ์ประเภทเดียวกันกับ
AUDIO_DEVICE_OUT_BUS
ก็ตาม - mixPorts. ประกอบด้วยรายการเอาต์พุตและสตรีมอินพุตทั้งหมดที่เสียง HAL เปิดเผย อินสแตนซ์ mixPort แต่ละรายการถือได้ว่าเป็นสตรีมทางกายภาพไปยัง Android AudioService
- เส้นทาง กำหนดรายการการเชื่อมต่อที่เป็นไปได้ระหว่างอุปกรณ์อินพุตและเอาต์พุต หรือระหว่างสตรีมและอุปกรณ์
ตัวอย่างต่อไปนี้จะกำหนดอุปกรณ์เอาต์พุต bus0_phone_out ซึ่งสตรีมเสียง Android ทั้งหมดจะถูกผสมโดย mixer_bus0_phone_out เส้นทางนำกระแสเอาต์พุตของ mixer_bus0_phone_out
ไปยังอุปกรณ์ bus0_phone_out
<audioPolicyConfiguration version="1.0" xmlns:xi="http://www.w3.org/2001/XInclude"> <modules> <module name="primary" halVersion="3.0"> <attachedDevices> <item>bus0_phone_out</item> <defaultOutputDevice>bus0_phone_out</defaultOutputDevice> <mixPorts> <mixPort name="mixport_bus0_phone_out" role="source" flags="AUDIO_OUTPUT_FLAG_PRIMARY"> <profile name="" format="AUDIO_FORMAT_PCM_16_BIT" samplingRates="48000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/> </mixPort> </mixPorts> <devicePorts> <devicePort tagName="bus0_phone_out" role="sink" type="AUDIO_DEVICE_OUT_BUS" address="BUS00_PHONE"> <profile name="" format="AUDIO_FORMAT_PCM_16_BIT" samplingRates="48000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/> <gains> <gain name="" mode="AUDIO_GAIN_MODE_JOINT" minValueMB="-8400" maxValueMB="4000" defaultValueMB="0" stepValueMB="100"/> </gains> </devicePort> </devicePorts> <routes> <route type="mix" sink="bus0_phone_out" sources="mixport_bus0_phone_out"/> </routes> </module> </modules> </audioPolicyConfiguration>