# Audio overview

The audio subsystem powered by low power AI (LPAI) delivers voice UI and
audio experiences. It uses a dedicated hardware-based AI accelerator for
machine learning-based work.

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<!-- Generated by Microsoft Visio, SVG Export hw_sw_components.svg Page-1 -->
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:ev="http://www.w3.org/2001/xml-events" xmlns:v="http://schemas.microsoft.com/visio/2003/SVGExtensions/" width="12.8194in" height="5.82639in" viewbox="0 0 923 419.5" xml:space="preserve" color-interpolation-filters="sRGB" class="st12 svg-1" aria-label="../../_images/hw_sw_components.svg"><v:documentproperties v:langid="1033" v:viewmarkup="false">	<v:userdefs>		<v:ud v:nameu="msvNoAutoConnect" v:val="VT0(1):26"></v:ud>	</v:userdefs></v:documentproperties>
<style>.svg-1 .st1 { fill: #ffffff; stroke: none; stroke-linecap: round; stroke-linejoin: round; stroke-width: 1 }
.svg-1 .st2 { fill: #fafafa; stroke: #d2d7e1; stroke-linecap: round; stroke-linejoin: round; stroke-width: 1.5 }
.svg-1 .st3 { fill: #ffffff; stroke: #d2d7e1; stroke-linecap: round; stroke-linejoin: round; stroke-width: 2 }
.svg-1 .st4 { fill: #000000; font-family: Roboto; font-size: 1.00001em; letter-spacing: 0.0833327em }
.svg-1 .st5 { fill: #d2d7e1; stroke: #d2d7e1; stroke-linecap: round; stroke-linejoin: round; stroke-width: 2 }
.svg-1 .st6 { font-size: 1em }
.svg-1 .st7 { marker-start: url("#1-mrkr4-40"); stroke: #000000; stroke-linecap: round; stroke-linejoin: round; stroke-width: 2 }
.svg-1 .st8 { fill: #000000; fill-opacity: 1; stroke: #000000; stroke-opacity: 1; stroke-width: 0.44247787610619 }
.svg-1 .st9 { fill: none; stroke: none; stroke-linecap: round; stroke-linejoin: round; stroke-width: 1 }
.svg-1 .st10 { marker-end: url("#1-mrkr4-72"); marker-start: url("#1-mrkr4-40"); stroke: #000000; stroke-linecap: round; stroke-linejoin: round; stroke-width: 2 }
.svg-1 .st11 { marker-end: url("#1-mrkr4-72"); stroke: #000000; stroke-linecap: round; stroke-linejoin: round; stroke-width: 2 }
.svg-1 .st12 { fill: none; fill-rule: evenodd; font-size: 12px; overflow: visible; stroke-linecap: square; stroke-miterlimit: 3 }</style>
<defs id="Markers">	<g id="lend4">		<path d="M 2 1 L 0 0 L 2 -1 L 2 1 " style="stroke:none"></path>	</g>	<marker id="1-mrkr4-40" class="st8" v:arrowtype="4" v:arrowsize="2" v:setback="4.34" refx="4.34" orient="auto" markerunits="strokeWidth" overflow="visible">		<use xlink:href="#lend4" transform="scale(2.26) "></use>	</marker>	<marker id="1-mrkr4-72" class="st8" v:arrowtype="4" v:arrowsize="2" v:setback="4.52" refx="-4.52" orient="auto" markerunits="strokeWidth" overflow="visible">		<use xlink:href="#lend4" transform="scale(-2.26,-2.26) "></use>	</marker></defs><g v:mid="4" v:index="1" v:groupcontext="backgroundPage">	<v:userdefs>		<v:ud v:nameu="msvVisioCreated" v:prompt="" v:val="VT0(0):26"></v:ud>	</v:userdefs>	<title>VBackground-1</title>	<v:pageproperties width="12.8194" height="5.82639" v:drawingscale="0.0138889" v:pagescale="0.0138889" v:drawingunits="29" v:shadowoffsetx="9" v:shadowoffsety="-9"></v:pageproperties>	<g id="shape1-1" v:mid="1" v:groupcontext="shape">		<title>Solid</title>		<v:userdefs>			<v:ud v:nameu="Background" v:val="VT0(0):26"></v:ud>			<v:ud v:nameu="visVersion" v:val="VT0(15):26"></v:ud>			<v:ud v:nameu="msvShapeCategories" v:prompt="" v:val="VT4(DoNotContain)"></v:ud>			<v:ud v:nameu="msvVisioCreated" v:prompt="" v:val="VT0(0):26"></v:ud>		</v:userdefs>		<rect x="0" y="0" width="923" height="419.5" rx="4.5" ry="4.5" class="st1"></rect>	</g></g><g v:mid="0" v:index="2" v:groupcontext="foregroundPage">	<title>Page-1</title>	<v:pageproperties v:drawingscale="0.0138889" v:pagescale="0.0138889" v:drawingunits="29" v:shadowoffsetx="9" v:shadowoffsety="-9"></v:pageproperties>	<v:layer v:name="Connector" v:index="0"></v:layer>	<g id="shape28-3" v:mid="28" v:groupcontext="shape" transform="translate(18.75,-18.75)">		<title>Sheet.28</title>		<rect x="0" y="37.5" width="885.5" height="382" rx="4.5" ry="4.5" class="st2"></rect>	</g>	<g id="shape1-5" v:mid="1" v:groupcontext="shape" transform="translate(245.25,-37.25)">		<title>Sheet.1</title>		<rect x="0" y="75.5" width="384" height="344" rx="4.5" ry="4.5" class="st3"></rect>	</g>	<g id="shape22-7" v:mid="22" v:groupcontext="shape" transform="translate(453.25,-68.4658)">		<title>Sheet.22</title>		<desc>Interfaces</desc>		<v:textblock v:margins="rect(4,4,4,4)" v:verticalalign="0"></v:textblock>		<v:textrect cx="72" cy="279.5" width="144" height="280"></v:textrect>		<rect x="0" y="139.5" width="144" height="280" rx="4.5" ry="4.5" class="st3"></rect>		<text x="40.13" y="157" class="st4" v:langid="1033"><v:paragraph v:spline="-1.5" v:horizalign="1"></v:paragraph><v:tablist></v:tablist>Interfaces</text>		</g>	<g id="shape2-10" v:mid="2" v:groupcontext="shape" transform="translate(277.25,-68.884)">		<title>Sheet.2</title>		<desc>Application DSP</desc>		<v:textblock v:margins="rect(4,4,4,4)" v:verticalalign="0"></v:textblock>		<v:textrect cx="72" cy="279.5" width="144" height="280"></v:textrect>		<rect x="0" y="139.5" width="144" height="280" rx="4.5" ry="4.5" class="st3"></rect>		<text x="21.62" y="157" class="st4" v:langid="1033"><v:paragraph v:spline="-1.5" v:horizalign="1"></v:paragraph><v:tablist></v:tablist>Application DSP</text>		</g>	<g id="shape5-13" v:mid="5" v:groupcontext="shape" transform="translate(301.25,-172.884)">		<title>Sheet.5</title>		<desc>Application DSP firmware</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="48" cy="387.134" width="96.01" height="64.732"></v:textrect>		<rect x="0" y="354.768" width="96" height="64.732" rx="4.5" ry="4.5" class="st5"></rect>		<text x="12.39" y="382.63" class="st4" v:langid="1033"><v:paragraph v:spline="-1.5" v:horizalign="1"></v:paragraph><v:tablist></v:tablist>Application <tspan x="5.43" dy="1.5em" class="st6">DSP firmware</tspan></text>		</g>	<g id="shape6-17" v:mid="6" v:groupcontext="shape" transform="translate(477.25,-253.25)">		<title>Sheet.6</title>		<desc>TDM</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="48" cy="387.134" width="96.01" height="64.732"></v:textrect>		<rect x="0" y="354.768" width="96" height="64.732" rx="4.5" ry="4.5" class="st5"></rect>		<text x="33.75" y="391.63" class="st4" v:langid="1033"><v:paragraph v:spline="-1.5" v:horizalign="1"></v:paragraph><v:tablist></v:tablist>TDM</text>		</g>	<g id="shape7-20" v:mid="7" v:groupcontext="shape" transform="translate(477.25,-172.884)">		<title>Sheet.7</title>		<desc>MI2S</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="48" cy="387.134" width="96.01" height="64.732"></v:textrect>		<rect x="0" y="354.768" width="96" height="64.732" rx="4.5" ry="4.5" class="st5"></rect>		<text x="32.2" y="391.63" class="st4" v:langid="1033"><v:paragraph v:spline="-1.5" v:horizalign="1"></v:paragraph><v:tablist></v:tablist>MI2S</text>		</g>	<g id="shape8-23" v:mid="8" v:groupcontext="shape" transform="translate(477.25,-92.518)">		<title>Sheet.8</title>		<desc>SoundWire</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="48" cy="387.134" width="96.01" height="64.732"></v:textrect>		<rect x="0" y="354.768" width="96" height="64.732" rx="4.5" ry="4.5" class="st5"></rect>		<text x="14.53" y="391.63" class="st4" v:langid="1033"><v:paragraph v:spline="-1.5" v:horizalign="1"></v:paragraph><v:tablist></v:tablist>SoundWire</text>		</g>	<g id="shape10-26" v:mid="10" v:groupcontext="shape" transform="translate(37.25,-69.25)">		<title>Sheet.10</title>		<desc>Application processor</desc>		<v:textblock v:margins="rect(4,4,4,4)" v:verticalalign="0"></v:textblock>		<v:textrect cx="72" cy="279.5" width="144" height="280"></v:textrect>		<rect x="0" y="139.5" width="144" height="280" rx="4.5" ry="4.5" class="st3"></rect>		<text x="36.39" y="157" class="st4" v:langid="1033"><v:paragraph v:spline="-1.5" v:horizalign="1"></v:paragraph><v:tablist></v:tablist>Application <tspan x="40.72" dy="1.5em" class="st6">processor</tspan></text>		</g>	<g id="shape11-30" v:mid="11" v:groupcontext="shape" transform="translate(61.25,-172.884)">		<title>Sheet.11</title>		<desc>Multimedia framework/kernel drivers</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="48" cy="387.134" width="96.01" height="64.732"></v:textrect>		<rect x="0" y="354.768" width="96" height="64.732" rx="4.5" ry="4.5" class="st5"></rect>		<text x="13.04" y="373.63" class="st4" v:langid="1033"><v:paragraph v:spline="-1.5" v:horizalign="1"></v:paragraph><v:tablist></v:tablist>Multimedia <tspan x="11.71" dy="1.5em" class="st6">framework/</tspan><tspan x="5.24" dy="1.5em" class="st6">kernel drivers</tspan></text>		</g>	<g id="shape12-35" v:mid="12" v:groupcontext="shape" v:layermember="0" transform="translate(277.25,-168.384)">		<title>Dynamic connector.16</title>		<path d="M-8.68 407 L-9.04 407 L-96 407" class="st7"></path>	</g>	<g id="shape14-41" v:mid="14" v:groupcontext="shape" v:layermember="0" transform="translate(181.25,-192.75)">		<title>Dynamic connector.18</title>		<path d="M8.68 407 L9.04 407 L98.67 407" class="st7"></path>	</g>	<g id="shape15-46" v:mid="15" v:groupcontext="shape" transform="translate(192.75,-213.25)">		<title>Sheet.15</title>		<desc>Audio record</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="40.5882" cy="409.5" width="81.18" height="20"></v:textrect>		<rect x="0" y="399.5" width="81.1765" height="20" rx="4.5" ry="4.5" class="st9"></rect>		<text x="4" y="405" class="st4" v:langid="1033"><v:paragraph v:spline="-1.5"></v:paragraph><v:tablist></v:tablist>Audio <tspan x="4" dy="1.5em" class="st6">record</tspan></text>		</g>	<g id="shape16-50" v:mid="16" v:groupcontext="shape" transform="translate(192.75,-153.25)">		<title>Sheet.16</title>		<desc>Audio playback</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="48" cy="409.5" width="96.01" height="20"></v:textrect>		<rect x="0" y="399.5" width="96" height="20" rx="4.5" ry="4.5" class="st9"></rect>		<text x="4" y="405" class="st4" v:langid="1033"><v:paragraph v:spline="-1.5"></v:paragraph><v:tablist></v:tablist>Audio <tspan x="4" dy="1.5em" class="st6">playback</tspan></text>		</g>	<g id="shape17-54" v:mid="17" v:groupcontext="shape" transform="translate(856.45,-126.85)">		<title>Sheet.17</title>		<rect v:rectcontext="foreign" x="0" y="390.7" width="28.8" height="28.8" rx="4.5" ry="4.5" class="st9"></rect>		<image x="0" y="390.7" width="28.8" height="28.8" preserveaspectratio="none" xlink:href="data:image/png;base64,iVBOR					w0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAAEnQAABJ0Ad5mH					3gAAAMRSURBVGhD7ZhLaxRBFEbPzMRIUGKMQrL1BYpLQY1ZCooLxYX4E/QPuHCpCD5ABVHQILhTXAliFJcqPhcqLoSAD0QXoogLEaOgR					u50pVPzTc9UapxOT0IOXFLhfnXrVk/Xoy/MM/cYAkaAe8AXZ9a+AGxScSfRDZwA/gATDew3cHR9ou0ouoAnGQmnVq7937TWp2M4kiZX1					uRLdZNxdliDFMVG4K8kdx0Y7oM+EhsGRkVjfTZosCK4JIndUIHHTdHaYi+cB5LUZhV4mM/X3lFBEdg26Se1WAUe/VD2tZ9UMOPI7mIWw					unSiRROksjU7hMidsK5E5tQrD530mTc69ScunOieGITitXnTmxCE1CJ0edONRFvNwoRO+HciU1I70u5swcYc2ZtJX4CzfWh8aJ56Q1mb					SWUkBLSh8aLJjRgyK/oFVuJjRckFDDkV9yCb3iViI0XJBQw5FdC+pA/mlDAkF9pqi8F/K3wXQIuEv9H8feL38d8vtb6+thV3POXbez/5					q0Mukr8t8RvZZVGmC/VVpLPTJ81Euu1+FvikQTdLf5j4m/2SamTtWKAj+37vv+++FvivAQ9J/6VwLh8aY1CzxZgCbAMsLZ+D/8AVkgsH					eus+FtipwS1E1I5KJrp2AENArwSzQ4VRDOQLNqfEniryCrA48RX80s0soeuj89283m70C9X7WsLFyWBN8BC0dhgxxuWFkvVv1ZatDVTm					9gQPcAH6WOvU9sYdE/EH+CyihyTxd27wFdXtbB2s+LuNYk9nvz47eVk3VOF08nZ0zLW90xGXPsl282ArYUX/kDufbXdpVktqBG9wO2M5					J9C9ZXKhcFS/btq9t4twuliWuujcd4By1Xcbuy0tBNSBzezUuEhutgGrHXXjl7oXueStoq0adJP0PLUrmVb6GodLC+WTiYSb5nbrMWym					DNKGdgPfM5IaMrq60C+Wd99LlZh2HXh1OStNaNWmmXfXB9byB2DHU67gKvAcz9hN6lnwBWnWaCdOxF96rOO+QkUzayfwBildM/P+oboe					PZ6JUJrzzMn+QdjYPIFxW/sbgAAAABJRU5ErkJggg=="></image>		<rect v:rectcontext="foreign" x="0" y="390.7" width="28.8" height="28.8" rx="4.5" ry="4.5" class="st9"></rect>	</g>	<g id="shape18-58" v:mid="18" v:groupcontext="shape" transform="translate(856.45,-262.85)">		<title>Sheet.18</title>		<rect v:rectcontext="foreign" x="0" y="390.7" width="28.8" height="28.8" rx="4.5" ry="4.5" class="st9"></rect>		<image x="0" y="390.7" width="28.8" height="28.8" preserveaspectratio="none" xlink:href="data:image/png;base64,iVBOR					w0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAAEnQAABJ0Ad5mH					3gAAAMwSURBVGhD7ZpNq01RGMd/+9wiJsrgeikJqRsTQ8WIvIVQYkKJEjJQPgLyIZTJleQ974mUmPgAYijvM0IxouecdY+9/3vtvfba6					5xTt+6vnu45dz3P/7/WflvrnHVghunBQeAG8BH4O+QwD/M6oJ1owwLgacEgs7+ZmBbfZ+VOtY3Hrg+teeERHXU80U415bBHrBQDPNr+6					J5xDmnnmvBAxK4BE5o0BMzDvJxvx/7e0aQmfJMBrNKEIWJe+bNgN3Y0ejpHTbK/Pl1GzSAGkCSwD3jjwl7HknwAUwdgHZ96itjrWFL9k					wV6A+jFtBzAAC6hJP90gUSS/fvFWW8yGTWDG0BbgUSS/ZMFEkn2b/McHgN2AWeB+8AXF/eAM8BOoKNFFQxiAFECy4FX+ZqKlepLYKkWe					9C6aGIEjgI/PTVV8cMt16sZK9VE0y/u1Asc93SwOjqF98dULIfWRKPmPlYAvz25kzC2F1jowl5PevJ+ActU1KG50YQEMrue3dlxkdkNu					0ETc2xyN3Ve97nTUkL+QbqnLtdBZb3HZJ0medjoqVurSYX23oIwGjVRTkv7BU2o4aLUntKEBv4husuHOoGb0r5V2usWczuKtZ2r0m6E/					IOEBD5I+zxpr1tOL5ba99JuhPyDhAQ+S7s9bfLUDWBRsTYzLSXkHyQk8FDat0l73SW03S7R3ExtX+Eo/7WHdBOfl/ZbmlDDI6k9pwkN/					IOEBPZ7cvQs+LDFntTNsolOUe1oQgJzgbeSY5OUTVZVbO7AV6l5DczRxAb+QZoIrAH+eB65l9yRHmc+S4A97n+aZ8uQ1Srq0NxYsvwsX					Cdgk9DUjRYbJ1Ush+ZG4wr7H2rqsKXxd49pVVjuERURtCYaPaoh7FJpsJ+QPXMTWQitjaatgF3TJ4ArwCfgHXDZrf1jvuFu698nWSCRZ					P9kgUSS/XWtE3P6UylucPQuxWi6W0y59Ypt+6zUpCEwAVlui6kbdzWpCbs9pzEydDu2KkoTYTFms0U71xTd6CuFTHaNouL7IhelQd/WT					sVgm8y22ayiFVEyz0XgKPvDvMe1U22wbf9R/dTAPuldH9RPDWYYNv8A0H76scdT/SkAAAAASUVORK5CYII="></image>		<rect v:rectcontext="foreign" x="0" y="390.7" width="28.8" height="28.8" rx="4.5" ry="4.5" class="st9"></rect>	</g>	<g id="shape23-62" v:mid="23" v:groupcontext="shape" transform="translate(669.25,-69.25)">		<title>Sheet.23</title>		<desc>Codec</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="72" cy="279.5" width="144" height="280"></v:textrect>		<rect x="0" y="139.5" width="144" height="280" rx="4.5" ry="4.5" class="st5"></rect>		<text x="52.47" y="284" class="st4" v:langid="1033"><v:paragraph v:spline="-1.5" v:horizalign="1"></v:paragraph><v:tablist></v:tablist>Codec</text>		</g>	<g id="shape24-65" v:mid="24" v:groupcontext="shape" v:layermember="0" transform="translate(421.25,-189.966)">		<title>Dynamic connector</title>		<path d="M8.68 407 L9.04 407 L22.96 407" class="st10"></path>	</g>	<g id="shape25-73" v:mid="25" v:groupcontext="shape" v:layermember="0" transform="translate(629.25,-189.966)">		<title>Dynamic connector.25</title>		<path d="M8.68 407 L9.04 407 L30.96 407" class="st10"></path>	</g>	<g id="shape26-80" v:mid="26" v:groupcontext="shape" v:layermember="0" transform="translate(813.25,-261.966)">		<title>Dynamic connector.26</title>		<path d="M0 407 L27.96 407" class="st11"></path>	</g>	<g id="shape27-85" v:mid="27" v:groupcontext="shape" v:layermember="0" transform="translate(850.25,-125.966)">		<title>Dynamic connector.27</title>		<path d="M0 407 L-27.96 407" class="st11"></path>	</g></g>
</svg>

Audio component overview

The audio system includes:

- **Application processor** – CPU that handles audio processing tasks.
Tasks include:

    - Managing audio record and playback
    - Decoding audio formats
    - Using LPAI for postprocessing tasks
- **Low Power AI (LPAI)** – Subsystem that runs audio playback/record and voice-activation (VA) algorithms.
It integrates with a dedicated Qualcomm® Hexagon™ Processor (QDSP6) and a low power island (LPI).
- **Audio codec** – Hardware that includes:

    - Analog-to-Digital Converter (ADC)
    - Digital-to-Analog Converter (DAC)

    These convert analog audio to digital, and vice versa.
- **Speaker AMP and microphone** – Devices that connect over I2S/TDM/SoundWire.

## Architecture

The following figure shows the high-level audio software architecture.

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<!-- Generated by Microsoft Visio, SVG Export architecture.svg Page-1 -->
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:ev="http://www.w3.org/2001/xml-events" xmlns:v="http://schemas.microsoft.com/visio/2003/SVGExtensions/" width="14.9931in" height="9.26389in" viewbox="0 0 1079.5 667" xml:space="preserve" color-interpolation-filters="sRGB" class="st26" aria-label="../../_images/architecture.svg"><v:documentproperties v:langid="1033" v:viewmarkup="false">	<v:userdefs>		<v:ud v:nameu="msvNoAutoConnect" v:val="VT0(1):26"></v:ud>	</v:userdefs></v:documentproperties>
<style>.svg-2 .st1 { fill: #ffffff; stroke: none; stroke-linecap: round; stroke-linejoin: round; stroke-width: 1 }
.svg-2 .st2 { fill: #fafafa; stroke: #d2d7e1; stroke-linecap: round; stroke-linejoin: round; stroke-width: 1.5 }
.svg-2 .st3 { fill: #fafafa; stroke: none; stroke-linecap: round; stroke-linejoin: round; stroke-width: 2 }
.svg-2 .st4 { fill: #000000; font-family: Roboto; font-size: 1.00001em; font-weight: bold; letter-spacing: 0.0833327em }
.svg-2 .st5 { fill: #ffffff; stroke: #d2d7e1; stroke-linecap: round; stroke-linejoin: round; stroke-width: 2 }
.svg-2 .st6 { fill: #000000; font-family: Roboto; font-size: 1.00001em; letter-spacing: 0.0833327em }
.svg-2 .st7 { font-size: 1em }
.svg-2 .st8 { fill: #007884; stroke: none; stroke-linecap: round; stroke-linejoin: round; stroke-width: 2 }
.svg-2 .st9 { fill: #ffffff; font-family: Roboto; font-size: 1.00001em; letter-spacing: 0.0833327em }
.svg-2 .st10 { fill: #2a2aea; stroke: none; stroke-linecap: round; stroke-linejoin: round; stroke-width: 2 }
.svg-2 .st11 { fill: #2a2aea; stroke: #fafafa; stroke-linecap: round; stroke-linejoin: round; stroke-width: 1 }
.svg-2 .st12 { fill: #ffffff; font-family: Roboto; font-size: 0.833336em; letter-spacing: 0.0999997em }
.svg-2 .st13 { fill: #d2d7e1; stroke: none; stroke-linecap: round; stroke-linejoin: round; stroke-width: 2 }
.svg-2 .st14 { fill: none; stroke: none; stroke-linecap: round; stroke-linejoin: round; stroke-width: 2 }
.svg-2 .st15 { marker-end: url("#2-mrkr4-84"); marker-start: url("#2-mrkr4-82"); stroke: #000000; stroke-linecap: round; stroke-linejoin: round; stroke-width: 2 }
.svg-2 .st16 { fill: #000000; fill-opacity: 1; stroke: #000000; stroke-opacity: 1; stroke-width: 0.44247787610619 }
.svg-2 .st17 { fill: #ffffff; stroke: none; stroke-linecap: butt }
.svg-2 .st18 { fill: #000000; font-family: Roboto; font-size: 0.666664em; letter-spacing: 0.125em }
.svg-2 .st19 { marker-end: url("#2-mrkr4-158"); marker-start: url("#2-mrkr4-156"); stroke: #f8cb9c; stroke-linecap: round; stroke-linejoin: round; stroke-width: 2 }
.svg-2 .st20 { fill: #f8cb9c; fill-opacity: 1; stroke: #f8cb9c; stroke-opacity: 1; stroke-width: 0.44247787610619 }
.svg-2 .st21 { fill: #2a2aea; stroke: none; stroke-linecap: round; stroke-linejoin: round; stroke-width: 1 }
.svg-2 .st22 { fill: #007884; stroke: none; stroke-linecap: round; stroke-linejoin: round; stroke-width: 1 }
.svg-2 .st23 { fill: #d2d7e1; stroke: none; stroke-linecap: round; stroke-linejoin: round; stroke-width: 1 }
.svg-2 .st24 { marker-end: url("#2-mrkr4-84"); stroke: #000000; stroke-dasharray: 14, 10; stroke-linecap: round; stroke-linejoin: round; stroke-width: 2 }
.svg-2 .st25 { fill: none; stroke: none; stroke-linecap: round; stroke-linejoin: round; stroke-width: 1 }
.svg-2 .st26 { fill: none; fill-rule: evenodd; font-size: 12px; overflow: visible; stroke-linecap: square; stroke-miterlimit: 3 }</style>
<defs id="Markers">	<g id="lend4">		<path d="M 2 1 L 0 0 L 2 -1 L 2 1 " style="stroke:none"></path>	</g>	<marker id="2-mrkr4-82" class="st16" v:arrowtype="4" v:arrowsize="2" v:setback="4.34" refx="4.34" orient="auto" markerunits="strokeWidth" overflow="visible">		<use xlink:href="#lend4" transform="scale(2.26) "></use>	</marker>	<marker id="2-mrkr4-84" class="st16" v:arrowtype="4" v:arrowsize="2" v:setback="4.52" refx="-4.52" orient="auto" markerunits="strokeWidth" overflow="visible">		<use xlink:href="#lend4" transform="scale(-2.26,-2.26) "></use>	</marker>	<marker id="2-mrkr4-156" class="st20" v:arrowtype="4" v:arrowsize="2" v:setback="4.34" refx="4.34" orient="auto" markerunits="strokeWidth" overflow="visible">		<use xlink:href="#lend4" transform="scale(2.26) "></use>	</marker>	<marker id="2-mrkr4-158" class="st20" v:arrowtype="4" v:arrowsize="2" v:setback="4.52" refx="-4.52" orient="auto" markerunits="strokeWidth" overflow="visible">		<use xlink:href="#lend4" transform="scale(-2.26,-2.26) "></use>	</marker></defs><g v:mid="4" v:index="1" v:groupcontext="backgroundPage">	<v:userdefs>		<v:ud v:nameu="msvVisioCreated" v:prompt="" v:val="VT0(0):26"></v:ud>	</v:userdefs>	<title>VBackground-1</title>	<v:pageproperties width="14.9931" height="9.26389" v:drawingscale="0.0138889" v:pagescale="0.0138889" v:drawingunits="29" v:shadowoffsetx="9" v:shadowoffsety="-9"></v:pageproperties>	<g id="shape1-1" v:mid="1" v:groupcontext="shape">		<title>Solid</title>		<v:userdefs>			<v:ud v:nameu="Background" v:val="VT0(0):26"></v:ud>			<v:ud v:nameu="visVersion" v:val="VT0(15):26"></v:ud>			<v:ud v:nameu="msvShapeCategories" v:prompt="" v:val="VT4(DoNotContain)"></v:ud>			<v:ud v:nameu="msvVisioCreated" v:prompt="" v:val="VT0(0):26"></v:ud>		</v:userdefs>		<rect x="0" y="0" width="1079.5" height="667" rx="4.5" ry="4.5" class="st1"></rect>	</g></g><g v:mid="0" v:index="2" v:groupcontext="foregroundPage">	<title>Page-1</title>	<v:pageproperties v:drawingscale="0.0138889" v:pagescale="0.0138889" v:drawingunits="29" v:shadowoffsetx="9" v:shadowoffsety="-9"></v:pageproperties>	<v:layer v:name="Connector" v:index="0"></v:layer>	<g id="shape116-3" v:mid="116" v:groupcontext="shape" transform="translate(18.5,-18.5)">		<title>Sheet.116</title>		<rect x="0" y="37" width="1042.5" height="630" rx="4.5" ry="4.5" class="st2"></rect>	</g>	<g id="shape117-5" v:mid="117" v:groupcontext="shape" transform="translate(890.5,-36.5)">		<title>Sheet.117</title>		<desc>Legend</desc>		<v:textblock v:margins="rect(4,4,4,4)" v:verticalalign="0"></v:textblock>		<v:textrect cx="76" cy="593.25" width="152" height="147.5"></v:textrect>		<rect x="0" y="519.5" width="152" height="147.5" rx="4.5" ry="4.5" class="st3"></rect>		<text x="4" y="537" class="st4" v:langid="1033"><v:paragraph v:spline="-1.5"></v:paragraph><v:tablist></v:tablist>Legend</text>		</g>	<g id="shape19-8" v:mid="19" v:groupcontext="shape" transform="translate(221,-549.5)">		<title>Sheet.19</title>		<desc>Application layer</desc>		<v:textblock v:margins="rect(4,4,4,4)" v:verticalalign="0"></v:textblock>		<v:textrect cx="224" cy="627" width="448.01" height="80"></v:textrect>		<rect x="0" y="587" width="448" height="80" rx="4.5" ry="4.5" class="st5"></rect>		<text x="4" y="604.5" class="st6" v:langid="1033"><v:paragraph v:spline="-1.5"></v:paragraph><v:tablist></v:tablist>Application layer</text>		</g>	<g id="shape21-11" v:mid="21" v:groupcontext="shape" transform="translate(221,-389.5)">		<title>Sheet.21</title>		<desc>Middleware layer</desc>		<v:textblock v:margins="rect(4,4,4,4)" v:verticalalign="0"></v:textblock>		<v:textrect cx="224" cy="595" width="448.01" height="144"></v:textrect>		<rect x="0" y="523" width="448" height="144" rx="4.5" ry="4.5" class="st5"></rect>		<text x="4" y="540.5" class="st6" v:langid="1033"><v:paragraph v:spline="-1.5"></v:paragraph><v:tablist></v:tablist>Middleware layer</text>		</g>	<g id="shape25-14" v:mid="25" v:groupcontext="shape" transform="translate(221,-229.5)">		<title>Sheet.25</title>		<desc>Hardware abstraction layer</desc>		<v:textblock v:margins="rect(4,4,4,4)" v:verticalalign="0"></v:textblock>		<v:textrect cx="224" cy="595" width="448.01" height="144"></v:textrect>		<rect x="0" y="523" width="448" height="144" rx="4.5" ry="4.5" class="st5"></rect>		<text x="4" y="540.5" class="st6" v:langid="1033"><v:paragraph v:spline="-1.5"></v:paragraph><v:tablist></v:tablist>Hardware abstraction <v:lf></v:lf><tspan x="4" dy="1.5em" class="st7">layer</tspan></text>		</g>	<g id="shape26-18" v:mid="26" v:groupcontext="shape" transform="translate(221,-133.5)">		<title>Sheet.26</title>		<desc>Kernel space</desc>		<v:textblock v:margins="rect(4,4,4,4)" v:verticalalign="0"></v:textblock>		<v:textrect cx="224" cy="627" width="448.01" height="80"></v:textrect>		<rect x="0" y="587" width="448" height="80" rx="4.5" ry="4.5" class="st5"></rect>		<text x="4" y="604.5" class="st6" v:langid="1033"><v:paragraph v:spline="-1.5"></v:paragraph><v:tablist></v:tablist>Kernel space</text>		</g>	<g id="shape27-21" v:mid="27" v:groupcontext="shape" transform="translate(221,-37.5)">		<title>Sheet.27</title>		<desc>LPAI</desc>		<v:textblock v:margins="rect(4,4,4,4)" v:verticalalign="0"></v:textblock>		<v:textrect cx="224" cy="627" width="448.01" height="80"></v:textrect>		<rect x="0" y="587" width="448" height="80" rx="4.5" ry="4.5" class="st5"></rect>		<text x="4" y="604.5" class="st6" v:langid="1033"><v:paragraph v:spline="-1.5"></v:paragraph><v:tablist></v:tablist>LPAI</text>		</g>	<g id="shape41-24" v:mid="41" v:groupcontext="shape" transform="translate(37,-229.5)">		<title>Sheet.41</title>		<desc>PC</desc>		<v:textblock v:margins="rect(4,4,4,4)" v:verticalalign="0"></v:textblock>		<v:textrect cx="76" cy="635" width="152" height="64"></v:textrect>		<rect x="0" y="603" width="152" height="64" rx="4.5" ry="4.5" class="st5"></rect>		<text x="4" y="620.5" class="st6" v:langid="1033"><v:paragraph v:spline="-1.5"></v:paragraph><v:tablist></v:tablist>PC</text>		</g>	<g id="shape3-27" v:mid="3" v:groupcontext="shape" transform="translate(309,-405.5)">		<title>Sheet.3</title>		<rect x="0" y="571" width="336" height="96" rx="4.5" ry="4.5" class="st5"></rect>	</g>	<g id="shape1-29" v:mid="1" v:groupcontext="shape" transform="translate(325,-421.5)">		<title>Sheet.1</title>		<desc>PulseAudio</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="72" cy="651" width="144" height="32"></v:textrect>		<rect x="0" y="635" width="144" height="32" rx="4.5" ry="4.5" class="st8"></rect>		<text x="36.69" y="655.5" class="st9" v:langid="1033"><v:paragraph v:spline="-1.5" v:horizalign="1"></v:paragraph><v:tablist></v:tablist>PulseAudio</text>		</g>	<g id="shape2-32" v:mid="2" v:groupcontext="shape" transform="translate(493,-421.5)">		<title>Sheet.2</title>		<desc>Gstreamer</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="72" cy="651" width="144" height="32"></v:textrect>		<rect x="0" y="635" width="144" height="32" rx="4.5" ry="4.5" class="st8"></rect>		<text x="39.42" y="655.5" class="st9" v:langid="1033"><v:paragraph v:spline="-1.5" v:horizalign="1"></v:paragraph><v:tablist></v:tablist>Gstreamer</text>		</g>	<g id="shape4-35" v:mid="4" v:groupcontext="shape" transform="translate(333,-309.5)">		<title>Sheet.4</title>		<desc>PAL</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="144" cy="651" width="288" height="32"></v:textrect>		<rect x="0" y="635" width="288" height="32" rx="4.5" ry="4.5" class="st10"></rect>		<text x="131.57" y="655.5" class="st9" v:langid="1033"><v:paragraph v:spline="-1.5" v:horizalign="1"></v:paragraph><v:tablist></v:tablist>PAL</text>		</g>	<g id="shape5-38" v:mid="5" v:groupcontext="shape" transform="translate(333,-245.5)">		<title>Sheet.5</title>		<desc>ARGS</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="40" cy="651" width="80" height="32"></v:textrect>		<rect x="0" y="635" width="80" height="32" rx="4.5" ry="4.5" class="st10"></rect>		<text x="22.74" y="655.5" class="st9" v:langid="1033"><v:paragraph v:spline="-1.5" v:horizalign="1"></v:paragraph><v:tablist></v:tablist>ARGS</text>		</g>	<g id="shape8-41" v:mid="8" v:groupcontext="shape" transform="translate(437,-245.5)">		<title>Sheet.8</title>		<desc>AGM</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="40" cy="651" width="80" height="32"></v:textrect>		<rect x="0" y="635" width="80" height="32" rx="4.5" ry="4.5" class="st10"></rect>		<text x="25.26" y="655.5" class="st9" v:langid="1033"><v:paragraph v:spline="-1.5" v:horizalign="1"></v:paragraph><v:tablist></v:tablist>AGM</text>		</g>	<g id="shape9-44" v:mid="9" v:groupcontext="shape" transform="translate(541,-245.5)">		<title>Sheet.9</title>		<desc>TinyALSA</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="40" cy="651" width="80" height="32"></v:textrect>		<rect x="0" y="635" width="80" height="32" rx="4.5" ry="4.5" class="st8"></rect>		<text x="10.2" y="655.5" class="st9" v:langid="1033"><v:paragraph v:spline="-1.5" v:horizalign="1"></v:paragraph><v:tablist></v:tablist>TinyALSA</text>		</g>	<g id="shape10-47" v:mid="10" v:groupcontext="shape" transform="translate(317,-565.5)">		<title>Sheet.10</title>		<desc>Application</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="160" cy="651" width="320" height="32"></v:textrect>		<rect x="0" y="635" width="320" height="32" rx="4.5" ry="4.5" class="st5"></rect>		<text x="124.39" y="655.5" class="st6" v:langid="1033"><v:paragraph v:spline="-1.5" v:horizalign="1"></v:paragraph><v:tablist></v:tablist>Application</text>		</g>	<g id="group11-50" transform="translate(233,-236.5)" v:mid="11" v:groupcontext="group">		<v:userdefs>			<v:ud v:nameu="visVersion" v:prompt="" v:val="VT0(15):26"></v:ud>		</v:userdefs>		<title>Can</title>		<desc>ACDB</desc>		<g id="shape12-51" v:mid="12" v:groupcontext="shape">			<title>Sheet.12</title>			<v:userdefs>				<v:ud v:nameu="ControlHalfHeight" v:prompt="" v:val="VT0(0.125):1"></v:ud>				<v:ud v:nameu="FillForegnd" v:prompt="" v:val="VT0(1):26"></v:ud>				<v:ud v:nameu="ControlHalfHeight" v:prompt="" v:val="VT0(0.069444444444444):1"></v:ud>				<v:ud v:nameu="FillForegnd" v:prompt="" v:val="VT5(#2a2aea)"></v:ud>			</v:userdefs>			<path d="M2.73 664.52 A20 5 -180 0 0 40 662 L40 626.5 A4.5 4.5 -180 0 0 35.5 622 L4.5 622 A4.5 4.5 -180 0 0 0 626.5						 L0 660.38 A4.5 4.5 -180 0 0 2.73 664.52 Z" class="st11"></path>		</g>		<g id="shape11-53" v:mid="11" v:groupcontext="groupContent">			<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>			<v:textrect cx="20" cy="642" width="40" height="50"></v:textrect>			<ellipse cx="20" cy="622" rx="20" ry="5" class="st11"></ellipse>			<text x="5.09" y="645.75" class="st12" v:langid="1033"><v:paragraph v:spline="-1.5" v:horizalign="1"></v:paragraph><v:tablist></v:tablist>ACDB</text>			</g>	</g>	<g id="shape15-56" v:mid="15" v:groupcontext="shape" transform="translate(93,-245.5)">		<title>Sheet.15</title>		<desc>QACT</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="40" cy="651" width="80" height="32"></v:textrect>		<rect x="0" y="635" width="80" height="32" rx="4.5" ry="4.5" class="st10"></rect>		<text x="22.48" y="655.5" class="st9" v:langid="1033"><v:paragraph v:spline="-1.5" v:horizalign="1"></v:paragraph><v:tablist></v:tablist>QACT</text>		</g>	<g id="shape16-59" v:mid="16" v:groupcontext="shape" transform="translate(437,-149.5)">		<title>Sheet.16</title>		<desc>ASOC</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="92" cy="651" width="184" height="32"></v:textrect>		<rect x="0" y="635" width="184" height="32" rx="4.5" ry="4.5" class="st8"></rect>		<text x="74.5" y="655.5" class="st9" v:langid="1033"><v:paragraph v:spline="-1.5" v:horizalign="1"></v:paragraph><v:tablist></v:tablist>ASOC</text>		</g>	<g id="shape17-62" v:mid="17" v:groupcontext="shape" transform="translate(333,-53.5)">		<title>Sheet.17</title>		<desc>SPF</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="144" cy="651" width="288" height="32"></v:textrect>		<rect x="0" y="635" width="288" height="32" rx="4.5" ry="4.5" class="st10"></rect>		<text x="131.84" y="655.5" class="st9" v:langid="1033"><v:paragraph v:spline="-1.5" v:horizalign="1"></v:paragraph><v:tablist></v:tablist>SPF</text>		</g>	<g id="shape18-65" v:mid="18" v:groupcontext="shape" transform="translate(706,-53.5)">		<title>Sheet.18</title>		<desc>Codec</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="40" cy="651" width="80" height="32"></v:textrect>		<rect x="0" y="635" width="80" height="32" rx="4.5" ry="4.5" class="st13"></rect>		<text x="20.47" y="655.5" class="st6" v:langid="1033"><v:paragraph v:spline="-1.5" v:horizalign="1"></v:paragraph><v:tablist></v:tablist>Codec</text>		</g>	<g id="shape32-68" v:mid="32" v:groupcontext="shape" transform="translate(329.462,-469.5)">		<title>Sheet.32</title>		<desc>Client middleware</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="45.7692" cy="657" width="91.54" height="20"></v:textrect>		<rect x="0" y="647" width="91.5385" height="20" rx="4.5" ry="4.5" class="st14"></rect>		<text x="27.5" y="652.5" class="st6" v:langid="1033"><v:paragraph v:spline="-1.5" v:horizalign="1"></v:paragraph><v:tablist></v:tablist>Client <tspan x="9.67" dy="1.5em" class="st7">middleware</tspan></text>		</g>	<g id="shape34-72" v:mid="34" v:groupcontext="shape" transform="translate(525,-469.5)">		<title>Sheet.34</title>		<desc>MM framework</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="45.7692" cy="657" width="91.54" height="20"></v:textrect>		<rect x="0" y="647" width="91.5385" height="20" rx="4.5" ry="4.5" class="st14"></rect>		<text x="34.29" y="652.5" class="st6" v:langid="1033"><v:paragraph v:spline="-1.5" v:horizalign="1"></v:paragraph><v:tablist></v:tablist>MM <tspan x="12.45" dy="1.5em" class="st7">framework</tspan></text>		</g>	<g id="shape39-76" v:mid="39" v:groupcontext="shape" v:layermember="0" transform="translate(360.5,-245.5)">		<title>Dynamic connector</title>		<path d="M12.5 675.68 L12.5 676.04 L12.5 817.96" class="st15"></path>	</g>	<g id="shape42-85" v:mid="42" v:groupcontext="shape" v:layermember="0" transform="translate(173,-249)">		<title>Dynamic connector.42</title>		<desc>USB</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="30" cy="657.682" width="40" height="20.0036"></v:textrect>		<path d="M8.68 654.5 L9.04 654.5 L50.96 654.5" class="st15"></path>		<rect v:rectcontext="textBkgnd" x="21.0429" y="651.682" width="17.914" height="12.0001" class="st17"></rect>		<text x="21.04" y="660.68" class="st18" v:langid="1033"><v:paragraph v:spline="-1.5" v:horizalign="1"></v:paragraph><v:tablist></v:tablist>USB</text>		</g>	<g id="shape43-94" v:mid="43" v:groupcontext="shape" v:layermember="0" transform="translate(273,-249)">		<title>Dynamic connector.43</title>		<path d="M8.68 654.5 L9.04 654.5 L50.96 654.5" class="st15"></path>	</g>	<g id="shape44-101" v:mid="44" v:groupcontext="shape" v:layermember="0" transform="translate(412.5,-249)">		<title>Dynamic connector.44</title>		<path d="M9.18 654.5 L9.54 654.5 L15.46 654.5" class="st15"></path>	</g>	<g id="shape46-108" v:mid="46" v:groupcontext="shape" v:layermember="0" transform="translate(516.5,-249)">		<title>Dynamic connector.46</title>		<path d="M9.18 654.5 L9.54 654.5 L15.46 654.5" class="st15"></path>	</g>	<g id="shape47-115" v:mid="47" v:groupcontext="shape" v:layermember="0" transform="translate(568.5,-309.5)">		<title>Dynamic connector.47</title>		<path d="M12.5 675.68 L12.5 676.04 L12.5 689.96" class="st15"></path>	</g>	<g id="shape48-122" v:mid="48" v:groupcontext="shape" v:layermember="0" transform="translate(384.5,-421.5)">		<title>Dynamic connector.48</title>		<path d="M12.5 675.68 L12.5 676.04 L12.5 737.96" class="st15"></path>	</g>	<g id="shape49-129" v:mid="49" v:groupcontext="shape" v:layermember="0" transform="translate(468.5,-425)">		<title>Dynamic connector.49</title>		<path d="M9.18 654.5 L9.54 654.5 L15.46 654.5" class="st15"></path>	</g>	<g id="shape51-136" v:mid="51" v:groupcontext="shape" v:layermember="0" transform="translate(568.5,-245.5)">		<title>Dynamic connector.51</title>		<path d="M12.5 675.68 L12.5 676.04 L12.5 721.96" class="st15"></path>	</g>	<g id="shape52-143" v:mid="52" v:groupcontext="shape" v:layermember="0" transform="translate(464.5,-245.5)">		<title>Dynamic connector.52</title>		<path d="M12.5 675.68 L12.5 676.04 L12.5 721.96" class="st15"></path>	</g>	<g id="shape54-150" v:mid="54" v:groupcontext="shape" v:layermember="0" transform="translate(621,-81.95)">		<title>Dynamic connector.54</title>		<path d="M8.68 679.46 L9.04 679.46 L75.96 679.54" class="st19"></path>	</g>	<g id="shape55-159" v:mid="55" v:groupcontext="shape" v:layermember="0" transform="translate(424.577,-565.5)">		<title>Dynamic connector.55</title>		<path d="M12.44 675.68 L12.44 676.04 L12.56 769.96" class="st15"></path>	</g>	<g id="shape56-166" v:mid="56" v:groupcontext="shape" v:layermember="0" transform="translate(504.5,-565.5)">		<title>Dynamic connector.56</title>		<path d="M12.5 675.68 L12.5 676.04 L12.5 769.96" class="st15"></path>	</g>	<g id="shape57-173" v:mid="57" v:groupcontext="shape" transform="translate(892.5,-142.5)">		<title>Sheet.57</title>		<rect x="0" y="651" width="40" height="16" rx="4.5" ry="4.5" class="st21"></rect>	</g>	<g id="shape94-175" v:mid="94" v:groupcontext="shape" transform="translate(892.5,-118.5)">		<title>Sheet.94</title>		<rect x="0" y="651" width="40" height="16" rx="4.5" ry="4.5" class="st22"></rect>	</g>	<g id="shape95-177" v:mid="95" v:groupcontext="shape" transform="translate(892.5,-94.5)">		<title>Sheet.95</title>		<rect x="0" y="651" width="40" height="16" rx="4.5" ry="4.5" class="st23"></rect>	</g>	<g id="shape96-179" v:mid="96" v:groupcontext="shape" v:layermember="0" transform="translate(892.5,-66)">		<title>Dynamic connector.96</title>		<path d="M8.68 654.5 L9.04 654.5 L30.96 654.5" class="st15"></path>	</g>	<g id="shape97-186" v:mid="97" v:groupcontext="shape" v:layermember="0" transform="translate(892.5,-50)">		<title>Dynamic connector.97</title>		<path d="M0 654.5 L30.96 654.5" class="st24"></path>	</g>	<g id="shape98-191" v:mid="98" v:groupcontext="shape" v:layermember="0" transform="translate(892.5,-34)">		<title>Dynamic connector.98</title>		<path d="M8.68 654.5 L9.04 654.5 L30.96 654.5" class="st19"></path>	</g>	<g id="shape101-198" v:mid="101" v:groupcontext="shape" v:layermember="0" transform="translate(621,-165.5)">		<title>Dynamic connector.101</title>		<path d="M0 667 L125 667 L125 737.96" class="st24"></path>	</g>	<g id="shape102-203" v:mid="102" v:groupcontext="shape" transform="translate(941.3,-139.25)">		<title>Sheet.102</title>		<desc>Qualcomm</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="39.2" cy="655.75" width="78.4" height="22.5"></v:textrect>		<rect x="0" y="644.5" width="78.4" height="22.5" rx="4.5" ry="4.5" class="st25"></rect>		<text x="5.97" y="660.25" class="st6" v:langid="1033"><v:paragraph v:spline="-1.5" v:horizalign="1"></v:paragraph><v:tablist></v:tablist>Qualcomm</text>		</g>	<g id="shape104-206" v:mid="104" v:groupcontext="shape" transform="translate(942.2,-116.5)">		<title>Sheet.104</title>		<desc>Open source</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="44.15" cy="657" width="88.3" height="20"></v:textrect>		<rect x="0" y="647" width="88.3" height="20" rx="4.5" ry="4.5" class="st25"></rect>		<text x="5.01" y="661.5" class="st6" v:langid="1033"><v:paragraph v:spline="-1.5" v:horizalign="1"></v:paragraph><v:tablist></v:tablist>Open source</text>		</g>	<g id="shape105-209" v:mid="105" v:groupcontext="shape" transform="translate(942.7,-92.5)">		<title>Sheet.105</title>		<desc>Hardware</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="34.9" cy="657" width="69.81" height="20"></v:textrect>		<rect x="0" y="647" width="69.8" height="20" rx="4.5" ry="4.5" class="st25"></rect>		<text x="4.96" y="661.5" class="st6" v:langid="1033"><v:paragraph v:spline="-1.5" v:horizalign="1"></v:paragraph><v:tablist></v:tablist>Hardware</text>		</g>	<g id="shape106-212" v:mid="106" v:groupcontext="shape" transform="translate(942.7,-68.5)">		<title>Sheet.106</title>		<desc>Data flow</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="34.9" cy="657" width="69.81" height="20"></v:textrect>		<rect x="0" y="647" width="69.8" height="20" rx="4.5" ry="4.5" class="st25"></rect>		<text x="5.02" y="661.5" class="st6" v:langid="1033"><v:paragraph v:spline="-1.5" v:horizalign="1"></v:paragraph><v:tablist></v:tablist>Data flow</text>		</g>	<g id="shape107-215" v:mid="107" v:groupcontext="shape" transform="translate(942,-52.5)">		<title>Sheet.107</title>		<desc>Data + control</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="50.25" cy="657" width="100.5" height="20"></v:textrect>		<rect x="0" y="647" width="100.5" height="20" rx="4.5" ry="4.5" class="st25"></rect>		<text x="5.71" y="661.5" class="st6" v:langid="1033"><v:paragraph v:spline="-1.5" v:horizalign="1"></v:paragraph><v:tablist></v:tablist>Data + control</text>		</g>	<g id="shape108-218" v:mid="108" v:groupcontext="shape" transform="translate(938.7,-36.5)">		<title>Sheet.108</title>		<desc>Control</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="31.9" cy="657" width="63.8" height="20"></v:textrect>		<rect x="0" y="647" width="63.8" height="20" rx="4.5" ry="4.5" class="st25"></rect>		<text x="8.89" y="661.5" class="st6" v:langid="1033"><v:paragraph v:spline="-1.5" v:horizalign="1"></v:paragraph><v:tablist></v:tablist>Control</text>		</g>	<g id="shape111-221" v:mid="111" v:groupcontext="shape" v:layermember="0" transform="translate(850,-66)">		<title>Dynamic connector.111</title>		<path d="M-8.68 654.5 L-9.04 654.5 L-54.96 654.5" class="st19"></path>	</g>	<g id="shape112-228" v:mid="112" v:groupcontext="shape" v:layermember="0" transform="translate(850,-50)">		<title>Dynamic connector.112</title>		<path d="M-8.68 654.5 L-9.04 654.5 L-54.96 654.5" class="st19"></path>	</g>	<g id="shape113-235" v:mid="113" v:groupcontext="shape" transform="translate(849.6,-72.1)">		<title>Sheet.113</title>		<rect v:rectcontext="foreign" x="0" y="652.6" width="14.4" height="14.4" rx="4.5" ry="4.5" class="st25"></rect>		<image x="0" y="652.6" width="14.4" height="14.4" preserveaspectratio="none" xlink:href="data:image/png;base64,iVBOR					w0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAAEnQAABJ0Ad5mH					3gAAAGPSURBVEhLzZW9SkMxFIC/JGJROoio6CA6al9AfAAFbaE4+CQOroJDfQTduzk4iW6iWNEnUcFKXQRBieTntmm4t3pvKfSDQHJy/					nJuTi6MCXWUaklBB+gIaAHVWKkoNSQagQa0MnOknQO7sXIRTLYaxTlQsUOYuQkizN7QvPls1wOZCaQltANZYZJyRIgMeW5EUv+YLHlus					jLNkudGi9RMi5foxg9P90rGxPLbfrsMpDWy2SVo2b/uyqMASX8MRqQaZp0gdPj/kj0bxXlY9Ou2tN1r776lXKYirEz4PphbMt2unO2fX					LnrV9oxCwUtV7YJ08lrPpCZa1C+k1XVn+Ay8pWGbNi3By68oNYrU7cM2um4JARce5vjfl8pzMAq8OUdWQcoakLwAHwA78B98NDVve4ns					NLnbACHPssXKG3FmwHbwKsPcBBvZrJvS89TcIOa0y7ThVlYBvYUNIOSPbrPlY9J4AT4MU7ch+79F/z4BhpwZHSLMrUJnCm4Cxyb+SmwE					WsPSxJgZIw8QPQQjgG/bsOCSwo/KuEAAAAASUVORK5CYII="></image>		<rect v:rectcontext="foreign" x="0" y="652.6" width="14.4" height="14.4" rx="4.5" ry="4.5" class="st25"></rect>	</g>	<g id="shape114-239" v:mid="114" v:groupcontext="shape" transform="translate(851.6,-55.3)">		<title>Sheet.114</title>		<rect v:rectcontext="foreign" x="0" y="652.6" width="14.4" height="14.4" rx="4.5" ry="4.5" class="st25"></rect>		<image x="0" y="652.6" width="14.4" height="14.4" preserveaspectratio="none" xlink:href="data:image/png;base64,iVBOR					w0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAAEnQAABJ0Ad5mH					3gAAADdSURBVEhL7ZQ9CgIxFIS/TbplwRXRk9l4DI/kCTyGhRYqW4iKlZVY264k+0sw+iCx2w9SZd5MkbyBgQhMNKyBO7BwL0PJgSNQQ					lICD1cQQgZslTXnWoXYE4UUzaY2PGcwCw2YA6eeSXP25g1qTVBAQdIZK3gBK2DU0wQFCIbtI//Q+NCSAJHGi2RYovEiGZZovEiGJRovz					aZ+IyigAFUbJKVuv2luqqIhKMAs2qXahfY7mn2ItmguKXRVQYSq+IQpu501Tbj9I8AwBg4986criEA2NSG2thVL93YgmDdTZFX72mZti					wAAAABJRU5ErkJggg=="></image>		<rect v:rectcontext="foreign" x="0" y="652.6" width="14.4" height="14.4" rx="4.5" ry="4.5" class="st25"></rect>	</g></g>
</svg>

High-level audio software architecture

The following are the major audio software architecture components:

[PulseAudio](https://docs.qualcomm.com/doc/80-70020-16/topic/enable-audio.html#enable-pulseaudio)

A sound server for POSIX OSes (mostly targeting Linux) that acts as a
proxy and router between hardware device drivers and applications on
one or many hosts.

[Platform Abstration Layer (PAL)](https://docs.qualcomm.com/doc/80-70020-16/topic/pal.html#pal)

Provides higher-level audio-specific APIs to access the audio
hardware and drivers to enable audio features.

[Audio Graph Manager (AGM)](https://docs.qualcomm.com/doc/80-70020-16/topic/agm.html#agm)

Provides interfaces to allow TinyALSA-based mixer controls and
PCM/compressed plug-ins to interact and enable audio features.

[AudioReach Graph Service (ARGS)](https://docs.qualcomm.com/doc/80-70020-16/topic/agm.html#args)

Consists of the Graph Service Layer (GSL), Generic Packet Router (GPR),
and acdb Management Layer (AML) modules. Handles initialization and
creation of graphs, and creation of packets for sending a series of
commands to the signal processing framework (SPF).

[Audio calibration database (acdb)](https://docs.qualcomm.com/doc/80-70020-16/topic/agm.html#section-rhd-fg4-zbc)

Includes information about various audio use cases such as
graphs, module calibration data, etc. The APPS processor parses acdb
files to get the graph information used by SPF to
enable the use case.

[Signal Processing Framework (SPF)](https://docs.qualcomm.com/doc/80-70020-16/topic/agm.html#spf-sw)

Modular framework that runs on the LPAI DSP. It helps
set up, configure, and run signal processing modules for audio features.

[Qualcomm Audio Calibration Tool (QACT™ Platform)](https://docs.qualcomm.com/bundle/resource/topics/80-70020-16A/tools.html)

PC-based software that provides a GUI to
visualize, configure, and store audio graphs in the acdb for
audio use cases.

Last Published: Jan 07, 2026

[Previous Topic
Audio documentation](https://docs.qualcomm.com/bundle/publicresource/80-70020-16/topics/audio.md) [Next Topic
Enable audio](https://docs.qualcomm.com/bundle/publicresource/80-70020-16/topics/enable-audio.md)