เครื่องเสียงรถยนต์

Android Automotive OS (AAOS) สร้างจากสแต็กเสียงหลักของ Android เพื่อ รองรับกรณีการใช้งานสำหรับระบบปฏิบัติการสาระบันเทิงในรถ AAOS มีหน้าที่รับผิดชอบต่อเสียงสาระบันเทิง (กล่าวคือ สื่อ การนำทาง และ การสื่อสาร) แต่ไม่รับผิดชอบโดยตรงสําหรับเสียงกริ่งและคําเตือน ความพร้อมใช้งานและกำหนดเวลาที่เข้มงวด ขณะที่ AAOS ให้สัญญาณและ กลไกต่างๆ เพื่อช่วยรถจัดการเสียง ซึ่งในท้ายที่สุดก็ขึ้นอยู่กับยานพาหนะ เพื่อโทรถึงควรเปิดเสียงฝั่งคนขับและ ของผู้โดยสาร โดยตรวจสอบว่าเสียงที่สำคัญด้านความปลอดภัยและเสียงตามกฎข้อบังคับนั้นถูกต้อง โดยไม่ขัดจังหวะ

ในขณะที่ Android จัดการประสบการณ์การใช้งานสื่อของรถยนต์ แหล่งที่มาสื่อภายนอก เช่น ตัวรับสัญญาณวิทยุควรแสดงโดยแอปต่างๆ ซึ่งสามารถจัดการเสียง เหตุการณ์สำคัญของสื่อและโฟกัสสำหรับแหล่งที่มา

Android 11 มีการเปลี่ยนแปลงด้านเสียงที่เกี่ยวข้องกับยานยนต์ดังต่อไปนี้ การสนับสนุน:

เสียงและสตรีมของ Android

ระบบเสียงในรถยนต์ต้องจัดการกับเสียงและสตรีมต่อไปนี้

แผนภาพสถาปัตยกรรมที่เน้นสตรีมเป็นหลัก

รูปที่ 1 แผนภาพสถาปัตยกรรมที่เน้นสตรีมเป็นหลัก

Android จัดการเสียงที่มาจากแอป Android โดยการควบคุมแอปเหล่านั้น และกำหนดเส้นทางเสียงไปยังอุปกรณ์เอาต์พุตที่ HAL ตามประเภทของ เสียง:

  • สตรีมแบบลอจิคัล หรือที่เรียกว่าแหล่งที่มาในเสียงหลัก การตั้งชื่อจะติดแท็กด้วยแอตทริบิวต์เสียง
  • สตรีมทางกายภาพ หรือที่เรียกว่าอุปกรณ์ในเสียงหลัก ชื่อเรียก ไม่มีข้อมูลบริบทหลังจากผสม

เพื่อความน่าเชื่อถือ เสียงภายนอก (ที่มาจากแหล่งอิสระ แหล่งที่มาต่างๆ เช่น เสียงแจ้งเตือนการคาดเข็มขัดนิรภัย) ได้รับการจัดการนอก Android โดยอยู่ภายใต้ HAL หรือแม้กระทั่งในฮาร์ดแวร์ที่แยกต่างหาก ผู้ที่ติดตั้งใช้งานระบบต้องจัดให้มีเครื่องผสมที่ ยอมรับสตรีมเสียงจาก Android อย่างน้อย 1 สตรีมแล้วรวมสตรีมดังกล่าว สตรีมในลักษณะที่เหมาะสมโดยใช้แหล่งเสียงภายนอก ยานพาหนะ

การใช้งาน HAL และเครื่องผสมอาหารภายนอกจะรับผิดชอบในการดูแลให้ ได้ยินเสียงภายนอกที่สำคัญเพื่อความปลอดภัยและสำหรับมิกซ์เสียงจากอุปกรณ์ Android สตรีมและกำหนดเส้นทางไปยังลำโพงที่เหมาะสม

เสียง Android

แอปอาจมีโปรแกรมเล่นอย่างน้อย 1 คนที่โต้ตอบผ่าน Android มาตรฐาน API (เช่น AudioManager สำหรับการควบคุมโฟกัสหรือ MediaPlayer สำหรับสตรีมมิง) เพื่อส่งสตรีมข้อมูลเสียงเชิงตรรกะอย่างน้อย 1 รายการ ข้อมูลนี้ อาจเป็นโมโนช่องเดี่ยวหรือ 7.1 เซอร์ราวด์ แต่จะได้รับการกำหนดเส้นทางและถือว่าเป็น แหล่งที่มาเดียว สตรีมแอปเชื่อมโยงกับ AudioAttributes ที่ให้คำแนะนำแก่ระบบว่าควรจะแสดงเสียงอย่างไร

สตรีมเชิงตรรกะจะส่งผ่าน AudioService และกำหนดเส้นทางไปยัง (และ เพียงรายการเดียว) จากสตรีมเอาต์พุตทางกายภาพที่พร้อมใช้งาน ซึ่งแต่ละรายการเป็นเอาต์พุต ของมิกเซอร์ภายใน AudioFlinger หลังจากระบบผสมแอตทริบิวต์เสียงแล้ว ไปยังสตรีมจริง สตรีมเหล่านั้นจะไม่สามารถใช้งานได้อีกต่อไป

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

สตรีมภายนอก

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

หากสตรีมภายนอกเป็นแหล่งที่มาของสื่อที่ควรโต้ตอบกับเสียง สภาพแวดล้อมที่ Android กำลังสร้างขึ้น (ตัวอย่างเช่น หยุดการเล่น MP3 เมื่อ ตัวรับสัญญาณภายนอกเปิดอยู่) สตรีมภายนอกเหล่านั้นควรแสดงด้วย แอปสำหรับ Android แอปดังกล่าวจะขอให้โฟกัสเสียงในนามของแหล่งที่มาของสื่อ แทน HAL และจะตอบกลับการแจ้งเตือนที่สำคัญโดย เริ่ม/หยุดแหล่งที่มาภายนอกตามความจำเป็นเพื่อให้พอดีกับโฟกัสของ Android แอปยังมีหน้าที่จัดการเหตุการณ์สำคัญของสื่อด้วย เช่น เล่น/หยุดชั่วคราว กลไกที่แนะนำอย่างหนึ่งในการควบคุมอุปกรณ์ภายนอกดังกล่าวคือ HwAudioSource

อุปกรณ์เอาต์พุต

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

การติดตั้งใช้งานระบบจะใช้พอร์ตบัส 1 พอร์ตสำหรับเสียง Android ทั้งหมด ซึ่งทำให้ Android ผสมผสานทุกอย่างเข้าด้วยกันและ ส่งเป็นสตรีมเดียว หรือ HAL อาจมีท่าเรือบัส 1 แห่งสำหรับแต่ละCarAudioContext เพื่อให้ การส่งมอบเสียงทุกประเภทพร้อมกัน วิธีนี้ทำให้มีโอกาสสำหรับช่วง HAL เพื่อมิกซ์และตัดเสียงต่างๆ ตามที่ต้องการ

การกำหนดบริบทเสียงให้กับอุปกรณ์เอาต์พุตจะดำเนินการผ่าน car_audio_configuration.xml

อินพุตไมโครโฟน

เมื่อบันทึกเสียง HAL ของเสียงจะได้รับ openInputStream ที่มีอาร์กิวเมนต์ AudioSource ที่ระบุวิธีที่ฟังก์ชัน อินพุตไมโครโฟนจะได้รับการประมวลผล

แหล่งที่มา VOICE_RECOGNITION (โดยเฉพาะ Google Assistant) ต้องการสตรีมไมโครโฟนสเตอริโอที่มี เอฟเฟกต์การตัดเสียงก้อง (หากมี) แต่ไม่มีการประมวลผลอื่นๆ กับเอฟเฟกต์นั้น Assistant คาดว่าบีมฟอร์มจะเป็นผู้ดำเนินการ

อินพุตไมโครโฟนแบบหลายช่อง

หากต้องการบันทึกเสียงจากอุปกรณ์ที่มีช่องสัญญาณมากกว่า 2 ช่อง (สเตอริโอ) ให้ใช้ มาสก์ดัชนีแชแนล แทนมาสก์ดัชนีตำแหน่ง (เช่น 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

การจับคู่ระหว่างบริบทของเสียงกับการใช้งาน แถวที่ไฮไลต์มีไว้สำหรับรายการใหม่ การใช้งานระบบ

เสียงแบบหลายโซน

สำหรับยานยนต์จะมี Use Case ชุดใหม่ที่เกี่ยวข้องกับผู้ใช้ที่ใช้งานพร้อมกัน มีปฏิสัมพันธ์กับแพลตฟอร์มและต้องการสื่อแยกต่างหาก สำหรับ เช่น คนขับเปิดเพลงในห้องโดยสารได้ ส่วนผู้โดยสารที่เบาะหลัง กำลังดูวิดีโอ YouTube บนจอแสดงผลด้านหลัง เสียงแบบหลายโซนจะเปิดใช้ฟีเจอร์นี้ โดยอนุญาตให้แหล่งที่มาของเสียงต่างๆ เล่นพร้อมกันผ่านพื้นที่ต่างๆ ของยานพาหนะ

เสียงแบบหลายโซนที่เริ่มต้นใน Android 10 จะช่วยให้ OEM กำหนดค่าเสียงได้ ให้เป็นโซนแยกกัน แต่ละโซนคือคอลเล็กชันของอุปกรณ์ภายในยานพาหนะ โดยมีกลุ่มวอลุ่มของตัวเอง การกำหนดค่าการกำหนดเส้นทางสำหรับบริบท และโฟกัส การจัดการ ในลักษณะนี้ สามารถกำหนดค่าห้องโดยสารหลักเป็นเสียงเดียวได้ ขณะที่ช่องเสียบหูฟังของจอแสดงผลด้านหลังจะกำหนดค่าเป็นโซนที่ 2

โซนได้รับการกำหนดไว้เป็นส่วนหนึ่งของ car_audio_configuration.xml จากนั้น CarAudioService จะอ่านการกำหนดค่าและช่วย AudioService กำหนดเส้นทางของสตรีมเสียงตามโซนที่เกี่ยวข้อง แต่ละโซนยังคงกำหนด สำหรับการกำหนดเส้นทางตามบริบทและ UID แอปพลิเคชัน เมื่อโปรแกรมเล่นวิดีโอ สร้างแล้ว CarAudioService จะกำหนดโซนที่โปรแกรมเล่นอยู่ ที่เกี่ยวข้อง จากนั้นจึงพิจารณาจากการใช้งาน อุปกรณ์ที่ AudioFlinger ควรกำหนดเส้นทางของเสียงไป

โฟกัสจะได้รับการเก็บรักษาแยกกันสำหรับโซนเสียงแต่ละโซน วิธีนี้ช่วยให้ แอปพลิเคชันในโซนต่างๆ เพื่อผลิตเสียงอย่างอิสระโดยไม่ต้อง ซึ่งมีการแทรกแซงซึ่งกันและกัน ในขณะที่แอปพลิเคชันยังคงเคารพการเปลี่ยนแปลง ภายในขอบเขตของตนเอง CarZonesAudioFocus ภายใน CarAudioService มีหน้าที่รับผิดชอบในการจัดการโฟกัสของ

กำหนดค่าเสียงแบบหลายโซน

รูปที่ 2 กำหนดค่าเสียงแบบหลายโซน

HAL เสียง

การติดตั้งใช้งานเสียงในรถยนต์จะใช้ HAL มาตรฐานสำหรับเสียง Android ซึ่งรวมถึงสิ่งต่อไปนี้

  • 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 ซึ่งมีคอมโพเนนต์ต่อไปนี้

  • ชื่อโมดูล รองรับ "หลัก" (ใช้สำหรับกรณีการใช้งานยานยนต์) "A2DP", "remote_submix" และ "USB" ชื่อโมดูลและเสียงที่เกี่ยวข้อง ไดรเวอร์ควรได้รับการคอมไพล์เป็น audio.primary.$(variant).so
  • devicePorts มีรายการข้อบ่งชี้อุปกรณ์สำหรับอินพุตและเอาต์พุตทั้งหมด (รวมถึงอุปกรณ์ที่เชื่อมต่อกันอย่างถาวรและอุปกรณ์ที่ถอดออกได้) ที่สามารถ ที่เข้าถึงจากโมดูลนี้
    • สำหรับอุปกรณ์เอาต์พุตแต่ละเครื่อง คุณสามารถกำหนดการควบคุมค่าเกนที่ประกอบด้วย ค่าต่ำสุด/สูงสุด/ค่าเริ่มต้น/จำนวนก้าว หน่วยเป็นมิลลิเบล (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>