# 定制音频图

每个音频用例都是一个具有特定类型子图的图。每个子图都有一个或多个执行特定功能的功能软件块（称为模块）。

## 音频图术语

音频图术语

| **用例** | 从发送端端点到接收端端点的模块图，符合产品定义的用例。 |
| --- | --- |
| **图** | 对一组连接在一起以创建特定用例的一个或多个子图的逻辑解释。 |
| **子图** | 一组连接在一起并作为单个实体进行操作的模块的逻辑抽象。 |
| **Container** | 允许系统设计人员在单个软件线程中将音频处理模块分组并一起运行的对象。 |
| **模块** | 信号处理框架中最小的独立处理单元。 |
| **键值 (KV) 对** | 键向量中的单个键和关联值。例如，键可以是声音设备，值可以是耳机、扬声器或某些其他声音设备。 |
| **键向量** | 通过一组 KV 对唯一的标识图或子图。 |
| **图键向量 (GKV)** | GKV 是获取图的唯一标识符，由 KV 对表示。当从 QACT UI 画布创建子图时，图或系统设计器会将一组唯一的 &lt;keys&gt; 与 &lt;values&gt; 相关联。 |
| **校准键向量 (CKV)** | CKV 是获取校准数据的唯一标识符，由 KV 对表示。当存储校准数据时，图或系统设计器会将一组唯一的 &lt;keys&gt; 与 &lt;values&gt; 相关联。 |
| **标签和标签键向量 (TKV)** | 标签是为一个或多个模块设置 runtime 参数的标识符。它允许在 runtime 更新图中的模块配置（例如，启用/禁用回声消除或均衡等功能）。 |

## 图段

音频用例具有以下段。

前端代表Stream 和 StreamPP 子图，而后端代表 PSPD、DevicePP 和Device 子图。

图段

| **Stream** | 提供数据写入/读取接口并执行压缩数据的解码和编码。 |
| --- | --- |
| **StreamPP** | 具有基于流的处理模块（例如，均衡器）。 |
| **PSPD** | 包含用于将流媒体格式转换为设备媒体格式的模块 |
| **DevicePP** | 具有用于声音设备调节的处理模块。 |
| **Device** | 硬件端点，例如 CodecDMA (Soundwire)、I2S 或 TDM 端口 |

一旦前端使用路由混音器控件连接到后端，完整的 GKV 就会通过连接子图 GKV 和使用混音器控件分配的 CKV 来形成。打开前端 PCM 或 Compress设备后，AGM 会使用连接好的 GKV 和 CKV 调用 GSL API，以在 SPF 中搭建图并应用校准。同时，AGM 打开与连接的后端相对应的内核 PCM 设备，开始音频外设设置。

## 示例音频图

下图显示了播放场景的示例音频图。

<?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 sample_audio_graph.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="38.5208in" height="5.02083in" viewbox="0 0 2773.5 361.5" xml:space="preserve" color-interpolation-filters="sRGB" class="st20" aria-label="../../_images/sample_audio_graph.svg"><v:documentproperties v:langid="1033" v:viewmarkup="false"></v:documentproperties>
<style>.svg-1 .st1 { fill: #ffffff; stroke: #d2d7e1; stroke-linecap: round; stroke-linejoin: round; stroke-width: 1.5 }
.svg-1 .st2 { fill: #fafafa; stroke: #d2d7e1; stroke-dasharray: 14, 10; stroke-width: 2 }
.svg-1 .st3 { fill: #d2d7e1; fill-opacity: 1; stroke: #d2d7e1; stroke-opacity: 1; stroke-width: 0.44247787610619 }
.svg-1 .st4 { fill: #6280cc; stroke: none; stroke-width: 2 }
.svg-1 .st5 { fill: #000000; fill-opacity: 1; stroke: #000000; stroke-opacity: 1; stroke-width: 0.44247787610619 }
.svg-1 .st6 { fill: #ffffff; font-family: Roboto; font-size: 1.33333em }
.svg-1 .st7 { fill: none; stroke: #ffffff; stroke-width: 2 }
.svg-1 .st8 { fill: #ffffff; fill-opacity: 1; stroke: #ffffff; stroke-opacity: 1; stroke-width: 0.44247787610619 }
.svg-1 .st9 { fill: #ffffff; font-family: Roboto; font-size: 1.33333em; letter-spacing: 0.0625002em }
.svg-1 .st10 { font-family: Microsoft YaHei UI; font-size: 1em }
.svg-1 .st11 { fill: #ffffff; font-family: Microsoft YaHei UI; font-size: 1.33333em; letter-spacing: 0.0625002em }
.svg-1 .st12 { font-family: Roboto; font-size: 1em }
.svg-1 .st13 { marker-end: url("#mrkr4-19"); stroke: #000000; stroke-linecap: round; stroke-linejoin: round; stroke-width: 2 }
.svg-1 .st14 { fill: #ffffff; font-family: Microsoft YaHei UI; font-size: 1.33333em }
.svg-1 .st15 { fill: none; marker-end: url("#mrkr4-19"); stroke: none; stroke-linecap: round; stroke-linejoin: round; stroke-width: 2 }
.svg-1 .st16 { fill: #000000; font-family: Microsoft YaHei UI; font-size: 1.33333em; letter-spacing: 0.0625002em }
.svg-1 .st17 { font-size: 1em }
.svg-1 .st18 { fill: #d2d7e1; marker-end: url("#mrkr4-19"); stroke: none; stroke-linecap: round; stroke-linejoin: round; stroke-width: 2 }
.svg-1 .st19 { fill: #000000; font-family: Roboto; font-size: 1.33333em; letter-spacing: 0.0625002em }
.svg-1 .st20 { 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="mrkr4-6" class="st3" 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="mrkr4-19" class="st5" 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="mrkr4-24" 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="0" v:index="1" 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="shape37-1" v:mid="37" v:groupcontext="shape" transform="translate(0.75,-0.75)">		<title>Sheet.37</title>		<rect x="0" y="1.50001" width="2772" height="360" rx="4.5" ry="4.5" class="st1"></rect>	</g>	<g id="shape24-3" v:mid="24" v:groupcontext="shape" transform="translate(254.409,-117.436)">		<title>Round Corner Rectangle.36</title>		<v:userdefs>			<v:ud v:nameu="CTypeTopLeftSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CTypeTopRightSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CTypeBotLeftSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CTypeBotRightSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CornerLockHoriz" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CornerLockVert" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CornerLockDiag" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="TopLeftOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="TopRightOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="BotLeftOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="BotRightOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="visVersion" v:prompt="" v:val="VT0(15):26"></v:ud>			<v:ud v:nameu="TopLeftOffset" v:prompt="" v:val="VT0(0.6063408302163):1"></v:ud>			<v:ud v:nameu="TopRightOffset" v:prompt="" v:val="VT0(0.66146292589118):1"></v:ud>			<v:ud v:nameu="BotLeftOffset" v:prompt="" v:val="VT0(0.6063408302163):1"></v:ud>			<v:ud v:nameu="BotRightOffset" v:prompt="" v:val="VT0(0.66146292589118):1"></v:ud>		</v:userdefs>		<path d="M43.66 361.5 L1202.54 361.5 A47.6246 47.6246 -180 0 0 1250.16 313.87 L1250.16 194.81 A47.6246 47.6246 -180 0					 0 1202.54 147.19 L43.66 147.19 A43.6558 43.6558 -180 0 0 0 190.84 L0 317.84 A43.6558 43.6558 -180 0 0 43.66					 361.5 Z" class="st2"></path>	</g>	<g id="shape25-7" v:mid="25" v:groupcontext="shape" transform="translate(1523.61,-117.436)">		<title>Round Corner Rectangle.41</title>		<v:userdefs>			<v:ud v:nameu="CTypeTopLeftSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CTypeTopRightSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CTypeBotLeftSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CTypeBotRightSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CornerLockHoriz" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CornerLockVert" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CornerLockDiag" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="TopLeftOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="TopRightOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="BotLeftOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="BotRightOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="visVersion" v:prompt="" v:val="VT0(15):26"></v:ud>			<v:ud v:nameu="TopLeftOffset" v:prompt="" v:val="VT0(0.50726662352512):1"></v:ud>			<v:ud v:nameu="TopRightOffset" v:prompt="" v:val="VT0(0.55658621490365):1"></v:ud>			<v:ud v:nameu="BotLeftOffset" v:prompt="" v:val="VT0(0.61751044211753):1"></v:ud>			<v:ud v:nameu="BotRightOffset" v:prompt="" v:val="VT0(0.50146430560743):1"></v:ud>		</v:userdefs>		<path d="M44.46 361.5 L234.96 361.5 A36.1048 36.1048 -180 0 0 271.07 325.39 L271.07 187.26 A40.0736 40.0736 -180 0 0					 230.99 147.19 L36.52 147.19 A36.5226 36.5226 -180 0 0 0 183.71 L0 317.04 A44.46 44.46 -180 0 0 44.46 361.5					 Z" class="st2"></path>	</g>	<g id="shape26-10" v:mid="26" v:groupcontext="shape" transform="translate(2473.47,-117.366)">		<title>Round Corner Rectangle.42</title>		<v:userdefs>			<v:ud v:nameu="CTypeTopLeftSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CTypeTopRightSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CTypeBotLeftSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CTypeBotRightSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CornerLockHoriz" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CornerLockVert" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CornerLockDiag" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="TopLeftOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="TopRightOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="BotLeftOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="BotRightOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="visVersion" v:prompt="" v:val="VT0(15):26"></v:ud>			<v:ud v:nameu="TopLeftOffset" v:prompt="" v:val="VT0(0.50726662352512):1"></v:ud>			<v:ud v:nameu="TopRightOffset" v:prompt="" v:val="VT0(0.55658621490365):1"></v:ud>			<v:ud v:nameu="BotLeftOffset" v:prompt="" v:val="VT0(0.61751044211753):1"></v:ud>			<v:ud v:nameu="BotRightOffset" v:prompt="" v:val="VT0(0.50146430560743):1"></v:ud>		</v:userdefs>		<path d="M44.46 361.5 L234.96 361.5 A36.1048 36.1048 -180 0 0 271.07 325.39 L271.07 187.26 A40.0736 40.0736 -180 0 0					 230.99 147.19 L36.52 147.19 A36.5226 36.5226 -180 0 0 0 183.71 L0 317.04 A44.46 44.46 -180 0 0 44.46 361.5					 Z" class="st2"></path>	</g>	<g id="shape27-13" v:mid="27" v:groupcontext="shape" transform="translate(1841.92,-117.436)">		<title>Round Corner Rectangle.43</title>		<v:userdefs>			<v:ud v:nameu="CTypeTopLeftSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CTypeTopRightSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CTypeBotLeftSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CTypeBotRightSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CornerLockHoriz" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CornerLockVert" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CornerLockDiag" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="TopLeftOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="TopRightOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="BotLeftOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="BotRightOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="visVersion" v:prompt="" v:val="VT0(15):26"></v:ud>			<v:ud v:nameu="TopLeftOffset" v:prompt="" v:val="VT0(0.67208710592186):1"></v:ud>			<v:ud v:nameu="TopRightOffset" v:prompt="" v:val="VT0(0.64637809311804):1"></v:ud>			<v:ud v:nameu="BotLeftOffset" v:prompt="" v:val="VT0(0.67208710592186):1"></v:ud>			<v:ud v:nameu="BotRightOffset" v:prompt="" v:val="VT0(0.5386484109317):1"></v:ud>		</v:userdefs>		<path d="M48.39 361.5 L552.57 361.5 A38.7821 38.7821 -180 0 0 591.35 322.72 L591.35 193.73 A46.5385 46.5385 -180 0 0					 544.81 147.19 L48.39 147.19 A48.3895 48.3895 -180 0 0 0 195.58 L0 313.11 A48.3895 48.3895 -180 0 0 48.39					 361.5 Z" class="st2"></path>	</g>	<g id="shape1-16" v:mid="1" v:groupcontext="shape" transform="translate(271.606,-135.487)">		<title>Round Corner Rectangle</title>		<desc>CONT#1</desc>		<v:userdefs>			<v:ud v:nameu="CTypeTopLeftSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CTypeTopRightSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CTypeBotLeftSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CTypeBotRightSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CornerLockHoriz" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CornerLockVert" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CornerLockDiag" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="TopLeftOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="TopRightOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="BotLeftOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="BotRightOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="visVersion" v:prompt="" v:val="VT0(15):26"></v:ud>			<v:ud v:nameu="TopLeftOffset" v:prompt="" v:val="VT0(0.25812531377467):1"></v:ud>			<v:ud v:nameu="TopRightOffset" v:prompt="" v:val="VT0(0.35435277926234):1"></v:ud>			<v:ud v:nameu="BotLeftOffset" v:prompt="" v:val="VT0(0.25812531377467):1"></v:ud>			<v:ud v:nameu="BotRightOffset" v:prompt="" v:val="VT0(0.35435277926234):1"></v:ud>		</v:userdefs>		<v:textblock v:margins="rect(4,4,4,4)" v:verticalalign="0"></v:textblock>		<v:textrect cx="283.107" cy="271.306" width="566.22" height="180.388"></v:textrect>		<path d="M18.59 361.5 L540.7 361.5 A25.513 25.513 -180 0 0 566.21 335.99 L566.21 206.63 A25.513 25.513 -180 0 0 540.7					 181.11 L18.59 181.11 A18.5847 18.5847 -180 0 0 0 199.7 L0 342.91 A18.5847 18.5847 -180 0 0 18.59 361.5 Z" class="st4"></path>		<text x="252.51" y="203.11" class="st6" v:langid="1033"><v:paragraph v:spline="-1.5" v:horizalign="1"></v:paragraph><v:tablist></v:tablist>CONT#1</text>		</g>	<g id="shape2-21" v:mid="2" v:groupcontext="shape" transform="translate(665.627,-188.062)">		<title>Round Corner Rectangle.1017</title>		<desc>PCM 转换器</desc>		<v:userdefs>			<v:ud v:nameu="CTypeTopLeftSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CTypeTopRightSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CTypeBotLeftSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CTypeBotRightSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CornerLockHoriz" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CornerLockVert" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CornerLockDiag" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="TopLeftOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="TopRightOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="BotLeftOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="BotRightOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="visVersion" v:prompt="" v:val="VT0(15):26"></v:ud>			<v:ud v:nameu="TopLeftOffset" v:prompt="" v:val="VT0(0.20056939067748):1"></v:ud>			<v:ud v:nameu="TopRightOffset" v:prompt="" v:val="VT0(0.20056939067748):1"></v:ud>			<v:ud v:nameu="BotLeftOffset" v:prompt="" v:val="VT0(0.20056939067748):1"></v:ud>			<v:ud v:nameu="BotRightOffset" v:prompt="" v:val="VT0(0.20056939067748):1"></v:ud>		</v:userdefs>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="72.205" cy="321.812" width="144.41" height="79.3755"></v:textrect>		<path d="M14.44 361.5 L129.97 361.5 A14.4408 14.4408 -180 0 0 144.41 347.06 L144.41 296.57 A14.4408 14.4408 -180 0 0					 129.97 282.12 L14.44 282.12 A14.4408 14.4408 -180 0 0 -0 296.57 L0 347.06 A14.4408 14.4408 -180 0 0 14.44					 361.5 Z" class="st7"></path>		<text x="25.1" y="327.89" class="st9" v:langid="1033"><v:paragraph v:spline="-1.5" v:horizalign="1"></v:paragraph><v:tablist></v:tablist>PCM<tspan class="st10"> </tspan><tspan class="st10" v:langid="2052">转换器</tspan></text>		</g>	<g id="shape3-28" v:mid="3" v:groupcontext="shape" transform="translate(482.507,-188.062)">		<title>Round Corner Rectangle.1024</title>		<desc>PCM 解码器</desc>		<v:userdefs>			<v:ud v:nameu="CTypeTopLeftSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CTypeTopRightSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CTypeBotLeftSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CTypeBotRightSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CornerLockHoriz" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CornerLockVert" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CornerLockDiag" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="TopLeftOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="TopRightOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="BotLeftOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="BotRightOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="visVersion" v:prompt="" v:val="VT0(15):26"></v:ud>			<v:ud v:nameu="TopLeftOffset" v:prompt="" v:val="VT0(0.20056939067748):1"></v:ud>			<v:ud v:nameu="TopRightOffset" v:prompt="" v:val="VT0(0.20056939067748):1"></v:ud>			<v:ud v:nameu="BotLeftOffset" v:prompt="" v:val="VT0(0.20056939067748):1"></v:ud>			<v:ud v:nameu="BotRightOffset" v:prompt="" v:val="VT0(0.20056939067748):1"></v:ud>		</v:userdefs>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="72.205" cy="321.812" width="144.41" height="79.3755"></v:textrect>		<path d="M14.44 361.5 L129.97 361.5 A14.4408 14.4408 -180 0 0 144.41 347.06 L144.41 296.57 A14.4408 14.4408 -180 0 0					 129.97 282.12 L14.44 282.12 A14.4408 14.4408 -180 0 0 -0 296.57 L0 347.06 A14.4408 14.4408 -180 0 0 14.44					 361.5 Z" class="st7"></path>		<text x="25.1" y="327.89" class="st9" v:langid="1033"><v:paragraph v:spline="-1.5" v:horizalign="1"></v:paragraph><v:tablist></v:tablist>PCM<tspan class="st10"> </tspan><tspan class="st10" v:langid="2052">解码器</tspan></text>		</g>	<g id="shape4-34" v:mid="4" v:groupcontext="shape" transform="translate(299.387,-188.062)">		<title>Round Corner Rectangle.1025</title>		<desc>写入 SHMEM EP</desc>		<v:userdefs>			<v:ud v:nameu="CTypeTopLeftSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CTypeTopRightSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CTypeBotLeftSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CTypeBotRightSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CornerLockHoriz" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CornerLockVert" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CornerLockDiag" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="TopLeftOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="TopRightOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="BotLeftOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="BotRightOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="visVersion" v:prompt="" v:val="VT0(15):26"></v:ud>			<v:ud v:nameu="TopLeftOffset" v:prompt="" v:val="VT0(0.20056939067748):1"></v:ud>			<v:ud v:nameu="TopRightOffset" v:prompt="" v:val="VT0(0.20056939067748):1"></v:ud>			<v:ud v:nameu="BotLeftOffset" v:prompt="" v:val="VT0(0.20056939067748):1"></v:ud>			<v:ud v:nameu="BotRightOffset" v:prompt="" v:val="VT0(0.20056939067748):1"></v:ud>		</v:userdefs>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="72.205" cy="321.812" width="144.41" height="79.3755"></v:textrect>		<path d="M14.44 361.5 L129.97 361.5 A14.4408 14.4408 -180 0 0 144.41 347.06 L144.41 296.57 A14.4408 14.4408 -180 0 0					 129.97 282.12 L14.44 282.12 A14.4408 14.4408 -180 0 0 -0 296.57 L0 347.06 A14.4408 14.4408 -180 0 0 14.44					 361.5 Z" class="st7"></path>		<text x="7.8" y="327.89" class="st11" v:langid="2052"><v:paragraph v:spline="-1.5" v:horizalign="1"></v:paragraph><v:tablist></v:tablist>写入 <tspan class="st12" v:langid="1033">SHMEM EP</tspan></text>		</g>	<g id="shape5-39" v:mid="5" v:groupcontext="shape" v:layermember="0" transform="translate(443.797,-215.25)">		<title>Dynamic connector.1032</title>		<path d="M0 349 L29.67 349" class="st13"></path>	</g>	<g id="shape6-44" v:mid="6" v:groupcontext="shape" v:layermember="0" transform="translate(626.917,-215.25)">		<title>Dynamic connector.1033</title>		<path d="M0 349 L29.67 349" class="st13"></path>	</g>	<g id="shape7-49" v:mid="7" v:groupcontext="shape" transform="translate(1536.32,-133.172)">		<title>Round Corner Rectangle.7</title>		<desc>CONT#6</desc>		<v:userdefs>			<v:ud v:nameu="CTypeTopLeftSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CTypeTopRightSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CTypeBotLeftSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CTypeBotRightSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CornerLockHoriz" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CornerLockVert" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CornerLockDiag" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="TopLeftOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="TopRightOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="BotLeftOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="BotRightOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="visVersion" v:prompt="" v:val="VT0(15):26"></v:ud>			<v:ud v:nameu="TopLeftOffset" v:prompt="" v:val="VT0(0.13561996870824):1"></v:ud>			<v:ud v:nameu="TopRightOffset" v:prompt="" v:val="VT0(0.14031184847638):1"></v:ud>			<v:ud v:nameu="BotLeftOffset" v:prompt="" v:val="VT0(0.13561996870824):1"></v:ud>			<v:ud v:nameu="BotRightOffset" v:prompt="" v:val="VT0(0.14031184847638):1"></v:ud>		</v:userdefs>		<v:textblock v:margins="rect(4,4,4,4)" v:verticalalign="0"></v:textblock>		<v:textrect cx="122.823" cy="270.148" width="245.65" height="182.703"></v:textrect>		<path d="M9.76 361.5 L235.54 361.5 A10.1023 10.1023 -180 0 0 245.65 351.4 L245.65 188.9 A10.1023 10.1023 -180 0 0 235.54					 178.8 L9.76 178.8 A9.76448 9.76448 -180 0 0 0 188.56 L0 351.74 A9.76448 9.76448 -180 0 0 9.76 361.5 Z" class="st4"></path>		<text x="92.22" y="200.8" class="st6" v:langid="1033"><v:paragraph v:spline="-1.5" v:horizalign="1"></v:paragraph><v:tablist></v:tablist>CONT#6</text>		</g>	<g id="shape8-53" v:mid="8" v:groupcontext="shape" transform="translate(1586.94,-188.062)">		<title>Round Corner Rectangle.8</title>		<desc>媒体格式转换器</desc>		<v:userdefs>			<v:ud v:nameu="CTypeTopLeftSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CTypeTopRightSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CTypeBotLeftSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CTypeBotRightSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CornerLockHoriz" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CornerLockVert" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CornerLockDiag" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="TopLeftOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="TopRightOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="BotLeftOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="BotRightOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="visVersion" v:prompt="" v:val="VT0(15):26"></v:ud>			<v:ud v:nameu="TopLeftOffset" v:prompt="" v:val="VT0(0.20056939067748):1"></v:ud>			<v:ud v:nameu="TopRightOffset" v:prompt="" v:val="VT0(0.20056939067748):1"></v:ud>			<v:ud v:nameu="BotLeftOffset" v:prompt="" v:val="VT0(0.20056939067748):1"></v:ud>			<v:ud v:nameu="BotRightOffset" v:prompt="" v:val="VT0(0.20056939067748):1"></v:ud>		</v:userdefs>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="72.205" cy="321.812" width="144.41" height="79.3755"></v:textrect>		<path d="M14.44 361.5 L129.97 361.5 A14.4408 14.4408 -180 0 0 144.41 347.06 L144.41 296.57 A14.4408 14.4408 -180 0 0					 129.97 282.12 L14.44 282.12 A14.4408 14.4408 -180 0 0 -0 296.57 L0 347.06 A14.4408 14.4408 -180 0 0 14.44					 361.5 Z" class="st7"></path>		<text x="16.21" y="327.81" class="st14" v:langid="2052"><v:paragraph v:spline="-1.5" v:horizalign="1"></v:paragraph><v:tablist></v:tablist>媒体格式转换器</text>		</g>	<g id="shape9-57" v:mid="9" v:groupcontext="shape" transform="translate(903.965,-135.487)">		<title>Round Corner Rectangle.9</title>		<desc>CONT#2</desc>		<v:userdefs>			<v:ud v:nameu="CTypeTopLeftSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CTypeTopRightSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CTypeBotLeftSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CTypeBotRightSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CornerLockHoriz" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CornerLockVert" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CornerLockDiag" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="TopLeftOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="TopRightOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="BotLeftOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="BotRightOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="visVersion" v:prompt="" v:val="VT0(15):26"></v:ud>			<v:ud v:nameu="TopLeftOffset" v:prompt="" v:val="VT0(0.29486714878089):1"></v:ud>			<v:ud v:nameu="TopRightOffset" v:prompt="" v:val="VT0(0.31761094425612):1"></v:ud>			<v:ud v:nameu="BotLeftOffset" v:prompt="" v:val="VT0(0.29486714878089):1"></v:ud>			<v:ud v:nameu="BotRightOffset" v:prompt="" v:val="VT0(0.31761094425612):1"></v:ud>		</v:userdefs>		<v:textblock v:margins="rect(4,4,4,4)" v:verticalalign="0"></v:textblock>		<v:textrect cx="283.107" cy="271.306" width="566.22" height="180.388"></v:textrect>		<path d="M21.23 361.5 L543.35 361.5 A22.8676 22.8676 -180 0 0 566.21 338.63 L566.21 203.98 A22.8676 22.8676 -180 0 0					 543.35 181.11 L21.23 181.11 A21.2301 21.2301 -180 0 0 0 202.34 L0 340.27 A21.2301 21.2301 -180 0 0 21.23					 361.5 Z" class="st4"></path>		<text x="252.51" y="203.11" class="st6" v:langid="1033"><v:paragraph v:spline="-1.5" v:horizalign="1"></v:paragraph><v:tablist></v:tablist>CONT#2</text>		</g>	<g id="shape10-61" v:mid="10" v:groupcontext="shape" transform="translate(1297.99,-188.062)">		<title>Round Corner Rectangle.10</title>		<desc>功分器</desc>		<v:userdefs>			<v:ud v:nameu="CTypeTopLeftSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CTypeTopRightSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CTypeBotLeftSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CTypeBotRightSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CornerLockHoriz" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CornerLockVert" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CornerLockDiag" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="TopLeftOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="TopRightOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="BotLeftOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="BotRightOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="visVersion" v:prompt="" v:val="VT0(15):26"></v:ud>			<v:ud v:nameu="TopLeftOffset" v:prompt="" v:val="VT0(0.20056939067748):1"></v:ud>			<v:ud v:nameu="TopRightOffset" v:prompt="" v:val="VT0(0.20056939067748):1"></v:ud>			<v:ud v:nameu="BotLeftOffset" v:prompt="" v:val="VT0(0.20056939067748):1"></v:ud>			<v:ud v:nameu="BotRightOffset" v:prompt="" v:val="VT0(0.20056939067748):1"></v:ud>		</v:userdefs>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="72.205" cy="321.812" width="144.41" height="79.3755"></v:textrect>		<path d="M14.44 361.5 L129.97 361.5 A14.4408 14.4408 -180 0 0 144.41 347.06 L144.41 296.57 A14.4408 14.4408 -180 0 0					 129.97 282.12 L14.44 282.12 A14.4408 14.4408 -180 0 0 -0 296.57 L0 347.06 A14.4408 14.4408 -180 0 0 14.44					 361.5 Z" class="st7"></path>		<text x="48.21" y="327.81" class="st14" v:langid="2052"><v:paragraph v:spline="-1.5" v:horizalign="1"></v:paragraph><v:tablist></v:tablist>功分器</text>		</g>	<g id="shape11-65" v:mid="11" v:groupcontext="shape" transform="translate(1114.87,-188.062)">		<title>Round Corner Rectangle.11</title>		<desc>PP2</desc>		<v:userdefs>			<v:ud v:nameu="CTypeTopLeftSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CTypeTopRightSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CTypeBotLeftSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CTypeBotRightSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CornerLockHoriz" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CornerLockVert" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CornerLockDiag" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="TopLeftOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="TopRightOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="BotLeftOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="BotRightOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="visVersion" v:prompt="" v:val="VT0(15):26"></v:ud>			<v:ud v:nameu="TopLeftOffset" v:prompt="" v:val="VT0(0.20056939067748):1"></v:ud>			<v:ud v:nameu="TopRightOffset" v:prompt="" v:val="VT0(0.20056939067748):1"></v:ud>			<v:ud v:nameu="BotLeftOffset" v:prompt="" v:val="VT0(0.20056939067748):1"></v:ud>			<v:ud v:nameu="BotRightOffset" v:prompt="" v:val="VT0(0.20056939067748):1"></v:ud>		</v:userdefs>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="72.205" cy="321.812" width="144.41" height="79.3755"></v:textrect>		<path d="M14.44 361.5 L129.97 361.5 A14.4408 14.4408 -180 0 0 144.41 347.06 L144.41 296.57 A14.4408 14.4408 -180 0 0					 129.97 282.12 L14.44 282.12 A14.4408 14.4408 -180 0 0 -0 296.57 L0 347.06 A14.4408 14.4408 -180 0 0 14.44					 361.5 Z" class="st7"></path>		<text x="57.62" y="327.81" class="st6" v:langid="1033"><v:paragraph v:spline="-1.5" v:horizalign="1"></v:paragraph><v:tablist></v:tablist>PP2</text>		</g>	<g id="shape12-69" v:mid="12" v:groupcontext="shape" transform="translate(931.746,-188.062)">		<title>Round Corner Rectangle.21</title>		<desc>PP1</desc>		<v:userdefs>			<v:ud v:nameu="CTypeTopLeftSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CTypeTopRightSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CTypeBotLeftSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CTypeBotRightSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CornerLockHoriz" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CornerLockVert" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CornerLockDiag" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="TopLeftOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="TopRightOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="BotLeftOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="BotRightOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="visVersion" v:prompt="" v:val="VT0(15):26"></v:ud>			<v:ud v:nameu="TopLeftOffset" v:prompt="" v:val="VT0(0.20056939067748):1"></v:ud>			<v:ud v:nameu="TopRightOffset" v:prompt="" v:val="VT0(0.20056939067748):1"></v:ud>			<v:ud v:nameu="BotLeftOffset" v:prompt="" v:val="VT0(0.20056939067748):1"></v:ud>			<v:ud v:nameu="BotRightOffset" v:prompt="" v:val="VT0(0.20056939067748):1"></v:ud>		</v:userdefs>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="72.205" cy="321.812" width="144.41" height="79.3755"></v:textrect>		<path d="M14.44 361.5 L129.97 361.5 A14.4408 14.4408 -180 0 0 144.41 347.06 L144.41 296.57 A14.4408 14.4408 -180 0 0					 129.97 282.12 L14.44 282.12 A14.4408 14.4408 -180 0 0 -0 296.57 L0 347.06 A14.4408 14.4408 -180 0 0 14.44					 361.5 Z" class="st7"></path>		<text x="57.62" y="327.81" class="st6" v:langid="1033"><v:paragraph v:spline="-1.5" v:horizalign="1"></v:paragraph><v:tablist></v:tablist>PP1</text>		</g>	<g id="shape13-73" v:mid="13" v:groupcontext="shape" v:layermember="0" transform="translate(1076.16,-215.25)">		<title>Dynamic connector.13</title>		<path d="M0 349 L29.67 349" class="st13"></path>	</g>	<g id="shape14-78" v:mid="14" v:groupcontext="shape" v:layermember="0" transform="translate(1259.28,-215.25)">		<title>Dynamic connector.23</title>		<path d="M0 349 L29.67 349" class="st13"></path>	</g>	<g id="shape15-83" v:mid="15" v:groupcontext="shape" transform="translate(2486.18,-133.172)">		<title>Round Corner Rectangle.15</title>		<desc>CONT#8</desc>		<v:userdefs>			<v:ud v:nameu="CTypeTopLeftSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CTypeTopRightSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CTypeBotLeftSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CTypeBotRightSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CornerLockHoriz" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CornerLockVert" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CornerLockDiag" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="TopLeftOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="TopRightOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="BotLeftOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="BotRightOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="visVersion" v:prompt="" v:val="VT0(15):26"></v:ud>			<v:ud v:nameu="TopLeftOffset" v:prompt="" v:val="VT0(0.34117560584466):1"></v:ud>			<v:ud v:nameu="TopRightOffset" v:prompt="" v:val="VT0(0.34117560584466):1"></v:ud>			<v:ud v:nameu="BotLeftOffset" v:prompt="" v:val="VT0(0.34117560584466):1"></v:ud>			<v:ud v:nameu="BotRightOffset" v:prompt="" v:val="VT0(0.34117560584466):1"></v:ud>		</v:userdefs>		<v:textblock v:margins="rect(4,4,4,4)" v:verticalalign="0"></v:textblock>		<v:textrect cx="122.823" cy="270.148" width="245.65" height="182.703"></v:textrect>		<path d="M24.56 361.5 L221.08 361.5 A24.5642 24.5642 -180 0 0 245.65 336.94 L245.65 203.36 A24.5642 24.5642 -180 0 0					 221.08 178.8 L24.56 178.8 A24.5642 24.5642 -180 0 0 -0 203.36 L0 336.94 A24.5642 24.5642 -180 0 0 24.56					 361.5 Z" class="st4"></path>		<text x="92.22" y="200.8" class="st6" v:langid="1033"><v:paragraph v:spline="-1.5" v:horizalign="1"></v:paragraph><v:tablist></v:tablist>CONT#8</text>		</g>	<g id="shape16-87" v:mid="16" v:groupcontext="shape" transform="translate(2536.8,-188.062)">		<title>Round Corner Rectangle.16</title>		<desc>HW EP</desc>		<v:userdefs>			<v:ud v:nameu="CTypeTopLeftSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CTypeTopRightSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CTypeBotLeftSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CTypeBotRightSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CornerLockHoriz" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CornerLockVert" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CornerLockDiag" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="TopLeftOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="TopRightOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="BotLeftOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="BotRightOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="visVersion" v:prompt="" v:val="VT0(15):26"></v:ud>			<v:ud v:nameu="TopLeftOffset" v:prompt="" v:val="VT0(0.081795931854436):1"></v:ud>			<v:ud v:nameu="TopRightOffset" v:prompt="" v:val="VT0(0.086500394831487):1"></v:ud>			<v:ud v:nameu="BotLeftOffset" v:prompt="" v:val="VT0(0.081795931854436):1"></v:ud>			<v:ud v:nameu="BotRightOffset" v:prompt="" v:val="VT0(0.086500394831487):1"></v:ud>		</v:userdefs>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="72.205" cy="321.812" width="144.41" height="79.3755"></v:textrect>		<path d="M5.89 361.5 L138.18 361.5 A6.22793 6.22793 -180 0 0 144.41 355.27 L144.41 288.35 A6.22793 6.22793 -180 0 0 138.18					 282.12 L5.89 282.12 A5.88921 5.88921 -180 0 0 0 288.01 L0 355.61 A5.88921 5.88921 -180 0 0 5.89 361.5 Z" class="st7"></path>		<text x="47.83" y="327.81" class="st6" v:langid="1033"><v:paragraph v:spline="-1.5" v:horizalign="1"></v:paragraph><v:tablist></v:tablist>HW EP</text>		</g>	<g id="shape17-91" v:mid="17" v:groupcontext="shape" transform="translate(1853.83,-135.487)">		<title>Round Corner Rectangle.17</title>		<desc>CONT#7</desc>		<v:userdefs>			<v:ud v:nameu="CTypeTopLeftSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CTypeTopRightSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CTypeBotLeftSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CTypeBotRightSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CornerLockHoriz" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CornerLockVert" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CornerLockDiag" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="TopLeftOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="TopRightOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="BotLeftOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="BotRightOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="visVersion" v:prompt="" v:val="VT0(15):26"></v:ud>			<v:ud v:nameu="TopLeftOffset" v:prompt="" v:val="VT0(0.23361457182648):1"></v:ud>			<v:ud v:nameu="TopRightOffset" v:prompt="" v:val="VT0(0.18287450613166):1"></v:ud>			<v:ud v:nameu="BotLeftOffset" v:prompt="" v:val="VT0(0.23361457182648):1"></v:ud>			<v:ud v:nameu="BotRightOffset" v:prompt="" v:val="VT0(0.18287450613166):1"></v:ud>		</v:userdefs>		<v:textblock v:margins="rect(4,4,4,4)" v:verticalalign="0"></v:textblock>		<v:textrect cx="283.107" cy="271.306" width="566.22" height="180.388"></v:textrect>		<path d="M16.82 361.5 L553.05 361.5 A13.1667 13.1667 -180 0 0 566.21 348.33 L566.21 194.28 A13.1667 13.1667 -180 0 0					 553.05 181.11 L16.82 181.11 A16.82 16.82 -180 0 0 0 197.93 L0 344.68 A16.82 16.82 -180 0 0 16.82 361.5 Z" class="st4"></path>		<text x="252.51" y="203.11" class="st6" v:langid="1033"><v:paragraph v:spline="-1.5" v:horizalign="1"></v:paragraph><v:tablist></v:tablist>CONT#7</text>		</g>	<g id="shape18-95" v:mid="18" v:groupcontext="shape" transform="translate(2247.85,-188.062)">		<title>Round Corner Rectangle.28</title>		<desc>PP6</desc>		<v:userdefs>			<v:ud v:nameu="CTypeTopLeftSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CTypeTopRightSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CTypeBotLeftSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CTypeBotRightSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CornerLockHoriz" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CornerLockVert" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CornerLockDiag" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="TopLeftOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="TopRightOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="BotLeftOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="BotRightOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="visVersion" v:prompt="" v:val="VT0(15):26"></v:ud>			<v:ud v:nameu="TopLeftOffset" v:prompt="" v:val="VT0(0.20056939067748):1"></v:ud>			<v:ud v:nameu="TopRightOffset" v:prompt="" v:val="VT0(0.20056939067748):1"></v:ud>			<v:ud v:nameu="BotLeftOffset" v:prompt="" v:val="VT0(0.20056939067748):1"></v:ud>			<v:ud v:nameu="BotRightOffset" v:prompt="" v:val="VT0(0.20056939067748):1"></v:ud>		</v:userdefs>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="72.205" cy="321.812" width="144.41" height="79.3755"></v:textrect>		<path d="M14.44 361.5 L129.97 361.5 A14.4408 14.4408 -180 0 0 144.41 347.06 L144.41 296.57 A14.4408 14.4408 -180 0 0					 129.97 282.12 L14.44 282.12 A14.4408 14.4408 -180 0 0 -0 296.57 L0 347.06 A14.4408 14.4408 -180 0 0 14.44					 361.5 Z" class="st7"></path>		<text x="57.62" y="327.81" class="st6" v:langid="1033"><v:paragraph v:spline="-1.5" v:horizalign="1"></v:paragraph><v:tablist></v:tablist>PP6</text>		</g>	<g id="shape19-99" v:mid="19" v:groupcontext="shape" transform="translate(2064.73,-188.062)">		<title>Round Corner Rectangle.29</title>		<desc>PP5</desc>		<v:userdefs>			<v:ud v:nameu="CTypeTopLeftSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CTypeTopRightSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CTypeBotLeftSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CTypeBotRightSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CornerLockHoriz" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CornerLockVert" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CornerLockDiag" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="TopLeftOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="TopRightOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="BotLeftOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="BotRightOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="visVersion" v:prompt="" v:val="VT0(15):26"></v:ud>			<v:ud v:nameu="TopLeftOffset" v:prompt="" v:val="VT0(0.20056939067748):1"></v:ud>			<v:ud v:nameu="TopRightOffset" v:prompt="" v:val="VT0(0.20056939067748):1"></v:ud>			<v:ud v:nameu="BotLeftOffset" v:prompt="" v:val="VT0(0.20056939067748):1"></v:ud>			<v:ud v:nameu="BotRightOffset" v:prompt="" v:val="VT0(0.20056939067748):1"></v:ud>		</v:userdefs>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="72.205" cy="321.812" width="144.41" height="79.3755"></v:textrect>		<path d="M14.44 361.5 L129.97 361.5 A14.4408 14.4408 -180 0 0 144.41 347.06 L144.41 296.57 A14.4408 14.4408 -180 0 0					 129.97 282.12 L14.44 282.12 A14.4408 14.4408 -180 0 0 -0 296.57 L0 347.06 A14.4408 14.4408 -180 0 0 14.44					 361.5 Z" class="st7"></path>		<text x="57.62" y="327.81" class="st6" v:langid="1033"><v:paragraph v:spline="-1.5" v:horizalign="1"></v:paragraph><v:tablist></v:tablist>PP5</text>		</g>	<g id="shape20-103" v:mid="20" v:groupcontext="shape" transform="translate(1881.61,-188.062)">		<title>Round Corner Rectangle.30</title>		<desc>混音器</desc>		<v:userdefs>			<v:ud v:nameu="CTypeTopLeftSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CTypeTopRightSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CTypeBotLeftSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CTypeBotRightSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CornerLockHoriz" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CornerLockVert" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CornerLockDiag" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="TopLeftOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="TopRightOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="BotLeftOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="BotRightOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="visVersion" v:prompt="" v:val="VT0(15):26"></v:ud>			<v:ud v:nameu="TopLeftOffset" v:prompt="" v:val="VT0(0.20056939067748):1"></v:ud>			<v:ud v:nameu="TopRightOffset" v:prompt="" v:val="VT0(0.20056939067748):1"></v:ud>			<v:ud v:nameu="BotLeftOffset" v:prompt="" v:val="VT0(0.20056939067748):1"></v:ud>			<v:ud v:nameu="BotRightOffset" v:prompt="" v:val="VT0(0.20056939067748):1"></v:ud>		</v:userdefs>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="72.205" cy="321.812" width="144.41" height="79.3755"></v:textrect>		<path d="M14.44 361.5 L129.97 361.5 A14.4408 14.4408 -180 0 0 144.41 347.06 L144.41 296.57 A14.4408 14.4408 -180 0 0					 129.97 282.12 L14.44 282.12 A14.4408 14.4408 -180 0 0 -0 296.57 L0 347.06 A14.4408 14.4408 -180 0 0 14.44					 361.5 Z" class="st7"></path>		<text x="48.21" y="327.81" class="st14" v:langid="2052"><v:paragraph v:spline="-1.5" v:horizalign="1"></v:paragraph><v:tablist></v:tablist>混音器</text>		</g>	<g id="shape21-107" v:mid="21" v:groupcontext="shape" v:layermember="0" transform="translate(2026.02,-215.25)">		<title>Dynamic connector.21</title>		<path d="M0 349 L29.67 349" class="st13"></path>	</g>	<g id="shape22-112" v:mid="22" v:groupcontext="shape" v:layermember="0" transform="translate(2209.14,-215.25)">		<title>Dynamic connector.22</title>		<path d="M0 349 L29.67 349" class="st13"></path>	</g>	<g id="shape23-117" v:mid="23" v:groupcontext="shape" transform="translate(17.75,-210.111)">		<title>Sheet.23</title>		<desc>客户端 PCM 数据</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="87.8643" cy="343.861" width="175.73" height="35.278"></v:textrect>		<rect x="0" y="326.222" width="175.729" height="35.278" rx="4.5" ry="4.5" class="st15"></rect>		<text x="4" y="349.93" class="st16" v:langid="2052"><v:paragraph v:spline="-1.5"></v:paragraph><v:tablist></v:tablist>客户端 <tspan class="st12" v:langid="1033">PCM</tspan><tspan class="st17" v:langid="1033"> </tspan>数据</text>		</g>	<g id="shape28-123" v:mid="28" v:groupcontext="shape" v:layermember="0" transform="translate(810.037,-215.25)">		<title>Dynamic connector.46</title>		<path d="M0 349 L112.67 349" class="st13"></path>	</g>	<g id="shape29-128" v:mid="29" v:groupcontext="shape" v:layermember="0" transform="translate(1442.4,-215.25)">		<title>Dynamic connector.47</title>		<path d="M0 349 L135.51 349" class="st13"></path>	</g>	<g id="shape30-133" v:mid="30" v:groupcontext="shape" v:layermember="0" transform="translate(1731.35,-240.25)">		<title>Dynamic connector.48</title>		<path d="M0 374 L141.22 374" class="st13"></path>	</g>	<g id="shape31-138" v:mid="31" v:groupcontext="shape" v:layermember="0" transform="translate(2392.26,-215.25)">		<title>Dynamic connector.49</title>		<path d="M0 349 L135.51 349" class="st13"></path>	</g>	<g id="shape32-143" v:mid="32" v:groupcontext="shape" v:layermember="0" transform="translate(169.479,-238.215)">		<title>Dynamic connector.50</title>		<path d="M0 373.97 L93.09 374.03" class="st13"></path>	</g>	<g id="shape33-148" v:mid="33" v:groupcontext="shape" transform="translate(655.034,-53.9356)">		<title>Sheet.33</title>		<desc>SGKV: [StreamRx: PCM 低延迟播放 实例: 实例 1]</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="215.857" cy="325.428" width="431.72" height="72.1435"></v:textrect>		<rect x="0" y="289.356" width="431.715" height="72.1435" rx="4.5" ry="4.5" class="st18"></rect>		<text x="26.18" y="331.5" class="st19" v:langid="1033"><v:paragraph v:spline="-1.5" v:horizalign="1"></v:paragraph><v:tablist></v:tablist>SGKV: [StreamRx: PCM <tspan class="st10" v:langid="2052">低延迟播放</tspan><tspan class="st10" v:langid="2052"> </tspan><tspan class="st10" v:langid="2052">实例</tspan><tspan class="st10" v:langid="2052">: </tspan><tspan class="st10" v:langid="2052">实例</tspan><tspan class="st10" v:langid="2052"> </tspan><tspan class="st17" v:langid="2052">1]</tspan></text>		</g>	<g id="shape34-159" v:mid="34" v:groupcontext="shape" transform="translate(1523.61,-53.9356)">		<title>Sheet.34</title>		<desc>SGKV: [StreamRx: PCM 低延迟播放设备: 扬声器实例: 实例 1]</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="135.534" cy="325.428" width="271.07" height="72.1435"></v:textrect>		<rect x="0" y="289.356" width="271.068" height="72.1435" rx="4.5" ry="4.5" class="st18"></rect>		<text x="7" y="319.36" class="st19" v:langid="1033"><v:paragraph v:spline="-1.5" v:horizalign="1"></v:paragraph><v:tablist></v:tablist>SGKV: [StreamRx: PCM <tspan class="st10" v:langid="2052">低延迟播</tspan><tspan x="29.47" dy="1.518em" class="st10" v:langid="2052">放设备</tspan><tspan class="st10" v:langid="2052">: </tspan><tspan class="st10" v:langid="2052">扬声器实例</tspan><tspan class="st10" v:langid="2052">: </tspan><tspan class="st10" v:langid="2052">实例</tspan><tspan class="st10" v:langid="2052"> </tspan><tspan class="st17" v:langid="2052">1]</tspan></text>		</g>	<g id="shape35-171" v:mid="35" v:groupcontext="shape" transform="translate(2001.4,-53.9356)">		<title>Sheet.35</title>		<desc>SGKV: [DeviceRx:Speaker DevicePP Rx: 扬声器 PP]</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="135.534" cy="325.428" width="271.07" height="72.1435"></v:textrect>		<rect x="0" y="289.356" width="271.068" height="72.1435" rx="4.5" ry="4.5" class="st18"></rect>		<text x="34.32" y="319.28" class="st19" v:langid="1033"><v:paragraph v:spline="-1.5" v:horizalign="1"></v:paragraph><v:tablist></v:tablist>SGKV: [DeviceRx:Speaker <tspan x="38.73" dy="1.514em" class="st17">DevicePP Rx: </tspan><tspan class="st10" v:langid="2052">扬声器</tspan><tspan class="st17" v:langid="2052"> </tspan>PP]</text>		</g>	<g id="shape36-178" v:mid="36" v:groupcontext="shape" transform="translate(2473.47,-53.9356)">		<title>Sheet.36</title>		<desc>SGKV: [DeviceRx:Speaker]</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="135.534" cy="325.428" width="271.07" height="72.1435"></v:textrect>		<rect x="0" y="289.356" width="271.068" height="72.1435" rx="4.5" ry="4.5" class="st18"></rect>		<text x="31.69" y="331.43" class="st19" v:langid="1033"><v:paragraph v:spline="-1.5" v:horizalign="1"></v:paragraph><v:tablist></v:tablist>SGKV: [DeviceRx:Speaker]</text>		</g></g>
</svg>

播放的示例音频图

在此图中：

1. 流子图具有写入共享内存端点、PCM 解码器和 PCM 转换器。客户端传递 PCM 样本以写入共享内存端点。
2. 如果需要转换，PCM 转换器将 PCM 样本转换为特定于流的后处理模块支持的格式。
3. Stream 子图被输出到包含媒体格式转换器 (MFC) 的流 Device 子图中。MFC 将 Stream 子图 PCM 转换为 Device 子图 PCM 格式。
4. 转换后，stream-device 子图被输出到 devicePP 子图中，用于特定设备的后处理。混音器放置在子图的开头，用于混合输入流。
5. 然后，DevicePP 子图的输出被流到 Device 子图中，该子图包含 I2S 驱动程序等硬件端点模块。

以下是此示例图的 GKV：

GKV1: <StreamRX1 KVs, StreamRX2 PP KVs, StreamRX1DeviceRX KVs, DeviceRX PP KVs, DeviceRX KVs>
    
    GKV2: <StreamRX2 KVs, StreamRX2 PP KVs, StreamRX2DeviceRX KVs, DeviceRX PP KVs, DeviceRX KVs>
    Copy to clipboard

### 音频图管理器

音频图管理器 (AGM) 提供接口，允许基于 TinyALSA 的混音器控件和 PCM/压缩插件进行交互并启用音频用例。AGM 作为 PulseAudio 服务的一部分运行，运行在用户空间。

AGM 为混音器插件提供 API 和 PCM/压缩 API 来设置音频用例。它维护许多 ALSA 客户端来设置用例。AGM 还管理前端到后端的连接。

下图显示了 AGM 块的高层结构。

<?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 AGM_service_blocks.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="6.85417in" height="5.99306in" viewbox="0 0 493.5 431.5" xml:space="preserve" color-interpolation-filters="sRGB" class="st16" aria-label="../../_images/AGM_service_blocks.svg"><v:documentproperties v:langid="1033" v:viewmarkup="false"></v:documentproperties>
<style>.svg-2 .st1 { fill: #fafafa; stroke: #d2d7e1; stroke-linecap: round; stroke-linejoin: round; stroke-width: 1.5 }
.svg-2 .st2 { fill: #fafafa; stroke: none; stroke-linecap: round; stroke-linejoin: round; stroke-width: 0.24 }
.svg-2 .st3 { fill: #000000; font-family: Microsoft YaHei UI; font-size: 1.16666em }
.svg-2 .st4 { fill: #ffffff; stroke: #d2d7e1; stroke-linecap: round; stroke-linejoin: round; stroke-width: 2 }
.svg-2 .st5 { fill: #000000; font-family: Roboto; font-size: 1.16666em }
.svg-2 .st6 { font-family: Microsoft YaHei UI; font-size: 1em }
.svg-2 .st7 { fill: #d2d7e1; stroke: #ffffff; stroke-linecap: round; stroke-linejoin: round; stroke-width: 2 }
.svg-2 .st8 { fill: #000000; font-family: Roboto; font-size: 1.16666em; letter-spacing: 0.0714292em }
.svg-2 .st9 { fill: #d2d7e1; stroke: #d2d7e1; stroke-linecap: round; stroke-linejoin: round; stroke-width: 2 }
.svg-2 .st10 { fill: #000000; font-family: Microsoft YaHei UI; font-size: 1.16666em; letter-spacing: 0.0714292em }
.svg-2 .st11 { fill: none; stroke: none; stroke-width: 1 }
.svg-2 .st12 { fill: none }
.svg-2 .st13 { stroke: #d2d7e1; stroke-linecap: round; stroke-linejoin: round; stroke-width: 2 }
.svg-2 .st14 { marker-end: url("#mrkr4-52"); stroke: #000000; stroke-linecap: round; stroke-linejoin: round; stroke-width: 2 }
.svg-2 .st15 { fill: #000000; fill-opacity: 1; stroke: #000000; stroke-opacity: 1; stroke-width: 0.44247787610619 }
.svg-2 .st16 { 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="mrkr4-52" class="st15" 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="0" v:index="1" 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="shape1-1" v:mid="1" v:groupcontext="shape" transform="translate(0.75,-0.75)">		<title>Sheet.1</title>		<path d="M-0 427 A4.50011 4.50011 -180 0 0 4.5 431.5 L487.5 431.5 A4.50011 4.50011 -180 0 0 492 427 L492 6 A4.50011 4.50011					 -180 0 0 487.5 1.5 L4.5 1.5 A4.50011 4.50011 -180 0 0 0 6 L0 427 Z" class="st1"></path>	</g>	<g id="shape2-3" v:mid="2" v:groupcontext="shape" transform="translate(19.87,-18.87)">		<title>Rectangle</title>		<desc>Kernel space</desc>		<v:userdefs>			<v:ud v:nameu="visVersion" v:val="VT0(15):26"></v:ud>		</v:userdefs>		<v:textblock v:margins="rect(4,4,4,4)" v:verticalalign="0"></v:textblock>		<v:textrect cx="227" cy="405.5" width="454.02" height="52"></v:textrect>		<path d="M-0 427 A4.50011 4.50011 -180 0 0 4.5 431.5 L449.5 431.5 A4.50011 4.50011 -180 0 0 454 427 L454 384 A4.50011					 4.50011 -180 0 0 449.5 379.5 L4.5 379.5 A4.50011 4.50011 -180 0 0 -0 384 L0 427 Z" class="st2"></path>		<text x="4" y="399.25" class="st3" v:langid="1033"><v:paragraph v:spline="-1.5"></v:paragraph><v:tablist></v:tablist>内核空间</text>		</g>	<g id="shape3-6" v:mid="3" v:groupcontext="shape" transform="translate(19.87,-90.8699)">		<title>Rectangle.23</title>		<desc>Userspace</desc>		<v:userdefs>			<v:ud v:nameu="visVersion" v:val="VT0(15):26"></v:ud>		</v:userdefs>		<v:textblock v:margins="rect(4,4,4,4)" v:verticalalign="2"></v:textblock>		<v:textrect cx="227" cy="270.5" width="454.02" height="322"></v:textrect>		<path d="M-0 427 A4.50011 4.50011 -180 0 0 4.5 431.5 L449.5 431.5 A4.50011 4.50011 -180 0 0 454 427 L454 114 A4.50011					 4.50011 -180 0 0 449.5 109.5 L4.5 109.5 A4.50011 4.50011 -180 0 0 0 114 L0 427 Z" class="st2"></path>		<text x="4" y="422.25" class="st3" v:langid="1033"><v:paragraph v:spline="-1.5"></v:paragraph><v:tablist></v:tablist>用户空间</text>		</g>	<g id="shape4-9" v:mid="4" v:groupcontext="shape" transform="translate(153.87,-94.8699)">		<title>Square</title>		<desc>AGM service</desc>		<v:userdefs>			<v:ud v:nameu="visVersion" v:val="VT0(15):26"></v:ud>		</v:userdefs>		<v:textblock v:margins="rect(4,4,4,4)" v:verticalalign="0"></v:textblock>		<v:textrect cx="156" cy="275.5" width="312.03" height="312"></v:textrect>		<path d="M-0 427 A4.50011 4.50011 -180 0 0 4.5 431.5 L307.5 431.5 A4.50011 4.50011 -180 0 0 312 427 L312 124 A4.50011					 4.50011 -180 0 0 307.5 119.5 L4.5 119.5 A4.50011 4.50011 -180 0 0 0 124 L0 427 Z" class="st4"></path>		<text x="3.99" y="139.44" class="st5" v:langid="1033"><v:paragraph v:spline="-1.5"></v:paragraph><v:tablist></v:tablist>AGM<tspan class="st6"> </tspan><tspan class="st6">服务</tspan></text>		</g>	<g id="shape5-14" v:mid="5" v:groupcontext="shape" transform="translate(185.87,-310.87)">		<title>Sheet.5</title>		<desc>AGM API</desc>		<v:userdefs></v:userdefs>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="124" cy="415.5" width="248.03" height="32"></v:textrect>		<path d="M-0 427 A4.50011 4.50011 -180 0 0 4.5 431.5 L243.5 431.5 A4.50011 4.50011 -180 0 0 248 427 L248 404 A4.50011					 4.50011 -180 0 0 243.5 399.5 L4.5 399.5 A4.50011 4.50011 -180 0 0 0 404 L0 427 Z" class="st7"></path>		<text x="92.44" y="420.75" class="st8" v:langid="1033"><v:paragraph v:spline="-1.5" v:horizalign="1"></v:paragraph><v:tablist></v:tablist>AGM API</text>		</g>	<g id="shape6-17" v:mid="6" v:groupcontext="shape" transform="translate(193.87,-246.87)">		<title>Sheet.6</title>		<desc>PAL</desc>		<v:userdefs></v:userdefs>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="124" cy="415.5" width="248.03" height="32"></v:textrect>		<path d="M-0 427 A4.50011 4.50011 -180 0 0 4.5 431.5 L243.5 431.5 A4.50011 4.50011 -180 0 0 248 427 L248 404 A4.50011					 4.50011 -180 0 0 243.5 399.5 L4.5 399.5 A4.50011 4.50011 -180 0 0 -0 404 L0 427 Z" class="st9"></path>		<text x="109.7" y="420.75" class="st10" v:langid="1033"><v:paragraph v:spline="-1.5" v:horizalign="1"></v:paragraph><v:tablist></v:tablist>PAL</text>		</g>	<g id="shape7-20" v:mid="7" v:groupcontext="shape" transform="translate(185.87,-254.87)">		<title>Sheet.7</title>		<desc>Session objects</desc>		<v:userdefs></v:userdefs>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="124" cy="415.5" width="248.03" height="32"></v:textrect>		<path d="M-0 427 A4.50011 4.50011 -180 0 0 4.5 431.5 L243.5 431.5 A4.50011 4.50011 -180 0 0 248 427 L248 404 A4.50011					 4.50011 -180 0 0 243.5 399.5 L4.5 399.5 A4.50011 4.50011 -180 0 0 0 404 L0 427 Z" class="st7"></path>		<text x="96" y="420.75" class="st3" v:langid="1033"><v:paragraph v:spline="-1.5" v:horizalign="1"></v:paragraph><v:tablist></v:tablist>会话对象</text>		</g>	<g id="shape8-23" v:mid="8" v:groupcontext="shape" transform="translate(185.87,-126.87)">		<title>Sheet.8</title>		<desc>GSL</desc>		<v:userdefs></v:userdefs>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="56" cy="415.5" width="112.03" height="32"></v:textrect>		<path d="M-0 427 A4.50011 4.50011 -180 0 0 4.5 431.5 L107.5 431.5 A4.50011 4.50011 -180 0 0 112 427 L112 404 A4.50011					 4.50011 -180 0 0 107.5 399.5 L4.5 399.5 A4.50011 4.50011 -180 0 0 0 404 L0 427 Z" class="st7"></path>		<text x="41.81" y="420.75" class="st8" v:langid="1033"><v:paragraph v:spline="-1.5" v:horizalign="1"></v:paragraph><v:tablist></v:tablist>GSL</text>		</g>	<g id="shape9-26" v:mid="9" v:groupcontext="shape" transform="translate(317.37,-29.75)">		<title>Sheet.9</title>		<desc>ALSA devices</desc>		<v:userdefs></v:userdefs>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="58.25" cy="415.5" width="116.53" height="32"></v:textrect>		<path d="M0 427 A4.50011 4.50011 -180 0 0 4.5 431.5 L112 431.5 A4.50011 4.50011 -180 0 0 116.5 427 L116.5 404 A4.50011					 4.50011 -180 0 0 112 399.5 L4.5 399.5 A4.50011 4.50011 -180 0 0 -0 404 L0 427 Z" class="st9"></path>		<text x="25.13" y="420.81" class="st5" v:langid="1033"><v:paragraph v:spline="-1.5" v:horizalign="1"></v:paragraph><v:tablist></v:tablist>ALSA<tspan class="st6"> </tspan><tspan class="st6">设备</tspan></text>		</g>	<g id="shape10-31" v:mid="10" v:groupcontext="shape" transform="translate(193.87,-182.87)">		<title>Sheet.10</title>		<path d="M-0 427 A4.50011 4.50011 -180 0 0 4.5 431.5 L107.5 431.5 A4.50011 4.50011 -180 0 0 112 427 L112 412 A4.50011					 4.50011 -180 0 0 107.5 407.5 L4.5 407.5 A4.50011 4.50011 -180 0 0 0 412 L0 427 Z" class="st7"></path>	</g>	<g id="shape11-33" v:mid="11" v:groupcontext="shape" transform="translate(185.87,-190.87)">		<title>Sheet.11</title>		<desc>Graph objects</desc>		<v:userdefs></v:userdefs>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="56" cy="415.5" width="112.03" height="32"></v:textrect>		<path d="M-0 427 A4.50011 4.50011 -180 0 0 4.5 431.5 L107.5 431.5 A4.50011 4.50011 -180 0 0 112 427 L112 404 A4.50011					 4.50011 -180 0 0 107.5 399.5 L4.5 399.5 A4.50011 4.50011 -180 0 0 0 404 L0 427 Z" class="st7"></path>		<text x="35" y="420.75" class="st3" v:langid="1033"><v:paragraph v:spline="-1.5" v:horizalign="1"></v:paragraph><v:tablist></v:tablist>图对象</text>		</g>	<g id="shape12-36" v:mid="12" v:groupcontext="shape" transform="translate(325.37,-182.87)">		<title>Sheet.12</title>		<path d="M-0 427 A4.50011 4.50011 -180 0 0 4.5 431.5 L112 431.5 A4.50011 4.50011 -180 0 0 116.5 427 L116.5 412 A4.50011					 4.50011 -180 0 0 112 407.5 L4.5 407.5 A4.50011 4.50011 -180 0 0 0 412 L0 427 Z" class="st7"></path>	</g>	<g id="shape13-38" v:mid="13" v:groupcontext="shape" transform="translate(317.37,-190.87)">		<title>Sheet.13</title>		<desc>Device objects</desc>		<v:userdefs></v:userdefs>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="58.25" cy="415.5" width="116.53" height="32"></v:textrect>		<path d="M-0 427 A4.50011 4.50011 -180 0 0 4.5 431.5 L112 431.5 A4.50011 4.50011 -180 0 0 116.5 427 L116.5 404 A4.50011					 4.50011 -180 0 0 112 399.5 L4.5 399.5 A4.50011 4.50011 -180 0 0 0 404 L0 427 Z" class="st7"></path>		<text x="30.25" y="420.75" class="st3" v:langid="1033"><v:paragraph v:spline="-1.5" v:horizalign="1"></v:paragraph><v:tablist></v:tablist>设备对象</text>		</g>	<g id="group17-41" transform="translate(19.75,-80.75)" v:mid="17" v:groupcontext="group">		<title>Sheet.17</title>		<g id="shape18-42" v:mid="18" v:groupcontext="shape">			<title>Sheet.18</title>			<path d="M0 431.5 L454 431.5 L0 431.5 Z" class="st11"></path>		</g>		<g id="shape19-44" v:mid="19" v:groupcontext="shape">			<title>Sheet.19</title>			<path d="M0 431.5 L454 431.5 L0 431.5 Z" class="st12"></path>			<path d="M0 431.5 L454 431.5" class="st13"></path>		</g>	</g>	<g id="shape1007-47" v:mid="1007" v:groupcontext="shape" v:layermember="0" transform="translate(224.5,-254)">		<title>Dynamic connector.28</title>		<path d="M12.5 431.5 L12.5 454.46" class="st14"></path>	</g>	<g id="shape1008-53" v:mid="1008" v:groupcontext="shape" v:layermember="0" transform="translate(224.5,-191.12)">		<title>Dynamic connector.30</title>		<path d="M12.5 431.5 L12.5 454.46" class="st14"></path>	</g>	<g id="shape1009-58" v:mid="1009" v:groupcontext="shape" v:layermember="0" transform="translate(361.5,-254)">		<title>Dynamic connector.31</title>		<path d="M12.5 431.5 L12.5 454.46" class="st14"></path>	</g>	<g id="shape1010-63" v:mid="1010" v:groupcontext="shape" v:layermember="0" transform="translate(362.5,-191.12)">		<title>Dynamic connector</title>		<path d="M12.5 431.5 L12.5 551.58" class="st14"></path>	</g></g>
</svg>

高级 AGM 软件块

AGM 对象

| 对象 | 说明 |
| --- | --- |
| **会话** | <ul class="simple"><br><li><p>会话对象是音频播放或采集会话。</p></li><br><li><p>调用特定于会话的混音器控件或 API 可创建会话。</p></li><br><li><p>为 TinyALSA 插件提供 API 以配置流并管理图和设备对象的状态转换。</p></li><br></ul> |
| **图** | <ul class="simple"><br><li><p>图对象是音频用例。</p></li><br><li><p>它与 GSL 交互以打开、管理和关闭图。</p></li><br><li><p>提供用于图创建的 API、管理图以及配置流和设备端点。</p></li><br></ul> |
| **设备** | <ul class="simple"><br><li><p>设备对象是来自 ALSA 声卡的 ALSA 设备。</p></li><br><li><p>枚举可用的音频接口并提供用于转换设备状态的设备 API。</p></li><br></ul> |

### AudioReach 图服务

AudioReach Graph Service (ARGS) 由图服务层 (GSL)、通用包路由器 (GPR) 和 ACDB 管理层 (AML) 组成。它处理图的初始化和创建，以及创建用于向 SPF 发送一系列命令的数据包。

ARGS 组件

| 组件 | 说明 |
| --- | --- |
| **GSL** | <ul class="simple"><br><li><p>图服务层 (GSL) 是 SPF 的软件驱动程序，用于管理图、子图、缓存和配置。</p></li><br><li><p>GSL 使用图键向量 (GKV) 加载并初始化图。</p></li><br><li><p>其处理数据命令和 SPF 模块校准。</p></li><br></ul> |
| **GPR** | <ul class="simple"><br><li><p>通用包路由器 (GPR) 通过 SPF 和图服务库路由音频消息数据包。</p></li><br><li><p>处理用于构造音频图和处理音频的命令。</p></li><br></ul> |
| **AML** | <ul class="simple"><br><li><p>acdb 管理层 (AML) 提供获取/设置 API 以获取和调整 acdb 文件中的数据。</p></li><br><li><p>为音频驱动程序及其组件如何使用校准数据提供数据抽象和组织。</p></li><br></ul> |

## 音频校准数据库 (Audio calibration database)

acdb 是应用处理器上的静态数据库。它具有 LPAI 的所有调整/校准参数。`*.acdb` 文件格式为各种用例组织各种音频模块的校准数据。

使用 QACT（一种 PC 工具）编辑此文件格式，并将其放在设备文件系统中的 `/etc/acdbdata/` 文件夹中。在用例初始化或设备切换期间，AML 通过给定的 GKV 查询 ACDB 数据库，并将设备校准数据传送到 SPF。

### 信号处理框架

信号处理框架 (SPF) 在 LPAI 子系统中运行并执行音频数据处理。

下图给出了 SPF 中使用的功能块的高级概述。

<?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 spf_blocks.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="11.8542in" height="11.6597in" viewbox="0 0 853.5 839.5" xml:space="preserve" color-interpolation-filters="sRGB" class="st15" aria-label="../../_images/spf_blocks.svg"><v:documentproperties v:langid="1033" v:viewmarkup="false"></v:documentproperties>
<style>.svg-3 .st1 { fill: #fafafa; stroke: #d2d7e1; stroke-linecap: round; stroke-linejoin: round; stroke-width: 1.5 }
.svg-3 .st2 { fill: #ffffff; stroke: #d2d7e1; stroke-linecap: round; stroke-linejoin: round; stroke-width: 2 }
.svg-3 .st3 { fill: #000000; font-family: Microsoft YaHei UI; font-size: 1.00001em; letter-spacing: 0.0833327em }
.svg-3 .st4 { font-family: Roboto; font-size: 1em }
.svg-3 .st5 { fill: #d2d7e1; stroke: #d2d7e1; stroke-linecap: round; stroke-linejoin: round; stroke-width: 2 }
.svg-3 .st6 { fill: #ffffff; stroke: none; stroke-linecap: round; stroke-linejoin: round; stroke-width: 2 }
.svg-3 .st7 { fill: none; stroke: none; stroke-linecap: round; stroke-linejoin: round; stroke-width: 1 }
.svg-3 .st8 { fill: #000000; font-family: Roboto; font-size: 1.00001em; font-style: italic; letter-spacing: 0.0833327em }
.svg-3 .st9 { fill: #000000; font-family: Roboto; font-size: 1.00001em; letter-spacing: 0.0833327em }
.svg-3 .st10 { marker-end: url("#mrkr4-56"); stroke: #000000; stroke-linecap: round; stroke-linejoin: round; stroke-width: 2 }
.svg-3 .st11 { fill: #000000; fill-opacity: 1; stroke: #000000; stroke-opacity: 1; stroke-width: 0.44247787610619 }
.svg-3 .st12 { stroke: #000000; stroke-dasharray: 0, 6; stroke-linecap: round; stroke-linejoin: round; stroke-width: 2 }
.svg-3 .st13 { font-size: 1em }
.svg-3 .st14 { fill: #000000; font-family: Roboto; font-size: 0.833336em; letter-spacing: 0.0999997em }
.svg-3 .st15 { 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="mrkr4-56" class="st11" 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="0" v:index="1" 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="shape52-1" v:mid="52" v:groupcontext="shape" transform="translate(0.75,-0.75)">		<title>Sheet.52</title>		<rect x="0" y="1.50003" width="852" height="838" rx="4.5" ry="4.5" class="st1"></rect>	</g>	<g id="shape1-3" v:mid="1" v:groupcontext="shape" transform="translate(21.8182,-727.25)">		<title>Sheet.1</title>		<desc>处理域 B</desc>		<v:textblock v:margins="rect(4,4,4,4)" v:verticalalign="2"></v:textblock>		<v:textrect cx="405.966" cy="793.5" width="811.94" height="92"></v:textrect>		<rect x="0" y="747.5" width="811.932" height="92" rx="4.5" ry="4.5" class="st2"></rect>		<text x="4" y="830.95" class="st3" v:langid="2052"><v:paragraph v:spline="-1.5"></v:paragraph><v:tablist></v:tablist>处理域<tspan class="st4" v:langid="1033"> </tspan><tspan class="st4" v:langid="1033">B</tspan></text>		</g>	<g id="shape3-8" v:mid="3" v:groupcontext="shape" transform="translate(19.75,-19.25)">		<title>Sheet.3</title>		<desc>处理域 A</desc>		<v:textblock v:margins="rect(4,4,4,4)" v:verticalalign="0"></v:textblock>		<v:textrect cx="405.966" cy="491.5" width="811.94" height="696"></v:textrect>		<rect x="0" y="143.5" width="811.932" height="696" rx="4.5" ry="4.5" class="st2"></rect>		<text x="4" y="161.16" class="st3" v:langid="2052"><v:paragraph v:spline="-1.5"></v:paragraph><v:tablist></v:tablist>处理域<tspan class="st4" v:langid="1033"> </tspan><tspan class="st4" v:langid="1033">A</tspan></text>		</g>	<g id="shape4-13" v:mid="4" v:groupcontext="shape" transform="translate(177.75,-195.25)">		<title>Sheet.4</title>		<desc>信号处理框架 (SPF)</desc>		<v:textblock v:margins="rect(4,4,4,4)" v:verticalalign="0"></v:textblock>		<v:textrect cx="310.5" cy="600.5" width="621" height="478"></v:textrect>		<rect x="0" y="361.5" width="621" height="478" rx="4.5" ry="4.5" class="st5"></rect>		<text x="4" y="379.16" class="st3" v:langid="2052"><v:paragraph v:spline="-1.5"></v:paragraph><v:tablist></v:tablist>信号处理框架<tspan class="st4" v:langid="1033"> </tspan><tspan class="st4" v:langid="1033">(SPF)</tspan></text>		</g>	<g id="shape5-18" v:mid="5" v:groupcontext="shape" transform="translate(253.818,-691.25)">		<title>Sheet.5</title>		<desc>通用包路由器 (GPR)</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="224" cy="807.5" width="448.01" height="64"></v:textrect>		<rect x="0" y="775.5" width="448" height="64" rx="4.5" ry="4.5" class="st2"></rect>		<text x="164.81" y="812.05" class="st3" v:langid="2052"><v:paragraph v:spline="-1.5" v:horizalign="1"></v:paragraph><v:tablist></v:tablist>通用包路由器<tspan class="st4" v:langid="1033"> </tspan><tspan class="st4" v:langid="1033">(GPR)</tspan></text>		</g>	<g id="shape6-23" v:mid="6" v:groupcontext="shape" transform="translate(209.75,-283.25)">		<title>Sheet.6</title>		<rect x="0" y="495.5" width="544" height="344" rx="4.5" ry="4.5" class="st6"></rect>	</g>	<g id="shape7-25" v:mid="7" v:groupcontext="shape" transform="translate(241.75,-579.25)">		<title>Sheet.7</title>		<desc>音频处理管理器 (APM)</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="240" cy="823.5" width="480.01" height="32"></v:textrect>		<rect x="0" y="807.5" width="480" height="32" rx="4.5" ry="4.5" class="st2"></rect>		<text x="172.94" y="828.05" class="st3" v:langid="2052"><v:paragraph v:spline="-1.5" v:horizalign="1"></v:paragraph><v:tablist></v:tablist>音频处理管理器<tspan class="st4" v:langid="1033"> </tspan><tspan class="st4" v:langid="1033">(APM)</tspan></text>		</g>	<g id="shape8-30" v:mid="8" v:groupcontext="shape" transform="translate(241.75,-384.85)">		<title>Sheet.8</title>		<desc>分载</desc>		<v:textblock v:margins="rect(4,4,4,4)" v:verticalalign="0"></v:textblock>		<v:textrect cx="104" cy="758.3" width="208.01" height="162.4"></v:textrect>		<rect x="0" y="677.1" width="208" height="162.4" rx="4.5" ry="4.5" class="st2"></rect>		<text x="4" y="694.6" class="st3" v:langid="2052"><v:paragraph v:spline="-1.5"></v:paragraph><v:tablist></v:tablist>分载</text>		</g>	<g id="shape9-33" v:mid="9" v:groupcontext="shape" transform="translate(249.75,-363.25)">		<title>Sheet.9</title>		<desc>专用</desc>		<v:textblock v:margins="rect(4,4,4,4)" v:verticalalign="0"></v:textblock>		<v:textrect cx="104" cy="759.5" width="208.01" height="160"></v:textrect>		<rect x="0" y="679.5" width="208" height="160" rx="4.5" ry="4.5" class="st2"></rect>		<text x="4" y="697" class="st3" v:langid="2052"><v:paragraph v:spline="-1.5"></v:paragraph><v:tablist></v:tablist>专用</text>		</g>	<g id="shape10-36" v:mid="10" v:groupcontext="shape" transform="translate(257.75,-339.25)">		<title>Sheet.10</title>		<desc>通用</desc>		<v:textblock v:margins="rect(4,4,4,4)" v:verticalalign="0"></v:textblock>		<v:textrect cx="104" cy="759.5" width="208.01" height="160"></v:textrect>		<rect x="0" y="679.5" width="208" height="160" rx="4.5" ry="4.5" class="st2"></rect>		<text x="4" y="697" class="st3" v:langid="2052"><v:paragraph v:spline="-1.5"></v:paragraph><v:tablist></v:tablist>通用</text>		</g>	<g id="shape12-39" v:mid="12" v:groupcontext="shape" transform="translate(318.103,-433.25)">		<title>Sheet.12</title>		<desc>Container</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="43.6471" cy="829.5" width="87.3" height="20"></v:textrect>		<rect x="0" y="819.5" width="87.2941" height="20" rx="4.5" ry="4.5" class="st7"></rect>		<text x="4" y="834" class="st8" v:langid="1033"><v:paragraph v:spline="-1.5"></v:paragraph><v:tablist></v:tablist>Container</text>		</g>	<g id="shape14-42" v:mid="14" v:groupcontext="shape" transform="translate(271.75,-357.25)">		<title>Sheet.14</title>		<desc>M1</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="22" cy="821.9" width="44" height="35.2"></v:textrect>		<rect x="0" y="804.3" width="44" height="35.2" rx="4.5" ry="4.5" class="st2"></rect>		<text x="12.39" y="826.4" class="st9" v:langid="1033"><v:paragraph v:spline="-1.5" v:horizalign="1"></v:paragraph><v:tablist></v:tablist>M1</text>		</g>	<g id="shape15-45" v:mid="15" v:groupcontext="shape" transform="translate(339.75,-357.25)">		<title>Sheet.15</title>		<desc>M2</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="22" cy="821.9" width="44" height="35.2"></v:textrect>		<rect x="0" y="804.3" width="44" height="35.2" rx="4.5" ry="4.5" class="st2"></rect>		<text x="12.39" y="826.4" class="st9" v:langid="1033"><v:paragraph v:spline="-1.5" v:horizalign="1"></v:paragraph><v:tablist></v:tablist>M2</text>		</g>	<g id="shape16-48" v:mid="16" v:groupcontext="shape" transform="translate(407.75,-357.25)">		<title>Sheet.16</title>		<desc>M3</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="22" cy="821.9" width="44" height="35.2"></v:textrect>		<rect x="0" y="804.3" width="44" height="35.2" rx="4.5" ry="4.5" class="st2"></rect>		<text x="12.39" y="826.4" class="st9" v:langid="1033"><v:paragraph v:spline="-1.5" v:horizalign="1"></v:paragraph><v:tablist></v:tablist>M3</text>		</g>	<g id="shape19-51" v:mid="19" v:groupcontext="shape" v:layermember="0" transform="translate(315.25,-362.75)">		<title>Dynamic connector</title>		<path d="M0.5 827 L15.46 827" class="st10"></path>	</g>	<g id="shape20-57" v:mid="20" v:groupcontext="shape" v:layermember="0" transform="translate(383.25,-362.75)">		<title>Dynamic connector.20</title>		<path d="M0.5 827 L15.46 827" class="st10"></path>	</g>	<g id="shape21-62" v:mid="21" v:groupcontext="shape" transform="translate(513.75,-491.25)">		<title>Sheet.21</title>		<desc>AMD</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="104" cy="823.5" width="208.01" height="32"></v:textrect>		<rect x="0" y="807.5" width="208" height="32" rx="4.5" ry="4.5" class="st2"></rect>		<text x="89.41" y="828" class="st9" v:langid="1033"><v:paragraph v:spline="-1.5" v:horizalign="1"></v:paragraph><v:tablist></v:tablist>AMD</text>		</g>	<g id="shape22-65" v:mid="22" v:groupcontext="shape" transform="translate(513.75,-424.25)">		<title>Sheet.22</title>		<desc>PRM</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="104" cy="823.5" width="208.01" height="32"></v:textrect>		<rect x="0" y="807.5" width="208" height="32" rx="4.5" ry="4.5" class="st2"></rect>		<text x="89.78" y="828" class="st9" v:langid="1033"><v:paragraph v:spline="-1.5" v:horizalign="1"></v:paragraph><v:tablist></v:tablist>PRM</text>		</g>	<g id="shape23-68" v:mid="23" v:groupcontext="shape" transform="translate(513.75,-358.85)">		<title>Sheet.23</title>		<desc>IRM</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="104" cy="823.5" width="208.01" height="32"></v:textrect>		<rect x="0" y="807.5" width="208" height="32" rx="4.5" ry="4.5" class="st2"></rect>		<text x="91.94" y="828" class="st9" v:langid="1033"><v:paragraph v:spline="-1.5" v:horizalign="1"></v:paragraph><v:tablist></v:tablist>IRM</text>		</g>	<g id="shape25-71" v:mid="25" v:groupcontext="shape" transform="translate(361.75,-227.25)">		<title>Sheet.25</title>		<desc>模块2</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="48" cy="823.5" width="96" height="32"></v:textrect>		<rect x="0" y="807.5" width="96" height="32" rx="4.5" ry="4.5" class="st2"></rect>		<text x="31.13" y="828.05" class="st3" v:langid="2052"><v:paragraph v:spline="-1.5" v:horizalign="1"></v:paragraph><v:tablist></v:tablist>模块<tspan class="st4" v:langid="1033">2</tspan></text>		</g>	<g id="shape26-75" v:mid="26" v:groupcontext="shape" transform="translate(577.75,-227.25)">		<title>Sheet.26</title>		<desc>模块3</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="48" cy="823.5" width="96" height="32"></v:textrect>		<rect x="0" y="807.5" width="96" height="32" rx="4.5" ry="4.5" class="st2"></rect>		<text x="31.13" y="828.05" class="st3" v:langid="2052"><v:paragraph v:spline="-1.5" v:horizalign="1"></v:paragraph><v:tablist></v:tablist>模块<tspan class="st4" v:langid="1033">3</tspan></text>		</g>	<g id="shape28-79" v:mid="28" v:groupcontext="shape" transform="translate(502.75,-237.25)">		<title>Sheet.28</title>		<desc>...</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="22" cy="831.5" width="44" height="16"></v:textrect>		<rect x="0" y="823.5" width="44" height="16" rx="4.5" ry="4.5" class="st7"></rect>		<text x="4" y="836" class="st9" v:langid="1033"><v:paragraph v:spline="-1.5"></v:paragraph><v:tablist></v:tablist>...</text>		</g>	<g id="shape33-82" v:mid="33" v:groupcontext="shape" v:layermember="0" transform="translate(471.353,-774.25)">		<title>Dynamic connector.33</title>		<path d="M12.5 840.5 L12.5 863.5" class="st12"></path>	</g>	<g id="shape34-85" v:mid="34" v:groupcontext="shape" transform="translate(253.818,-771.25)">		<title>Sheet.34</title>		<desc>应用程序</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="224" cy="823.5" width="448.01" height="32"></v:textrect>		<rect x="0" y="807.5" width="448" height="32" rx="4.5" ry="4.5" class="st2"></rect>		<text x="198" y="828" class="st3" v:langid="2052"><v:paragraph v:spline="-1.5" v:horizalign="1"></v:paragraph><v:tablist></v:tablist>应用程序</text>		</g>	<g id="shape35-88" v:mid="35" v:groupcontext="shape" transform="translate(277.818,-147.25)">		<title>Sheet.35</title>		<desc>平台和操作系统抽象层</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="224" cy="823.5" width="448.01" height="32"></v:textrect>		<rect x="0" y="807.5" width="448" height="32" rx="4.5" ry="4.5" class="st2"></rect>		<text x="159" y="828" class="st3" v:langid="2052"><v:paragraph v:spline="-1.5" v:horizalign="1"></v:paragraph><v:tablist></v:tablist>平台和操作系统抽象层</text>		</g>	<g id="shape36-91" v:mid="36" v:groupcontext="shape" transform="translate(277.818,-75.25)">		<title>Sheet.36</title>		<desc>板卡支持包 计时器、内存管理器、电源管理器、调试等</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="152" cy="807.5" width="304" height="64"></v:textrect>		<rect x="0" y="775.5" width="304" height="64" rx="4.5" ry="4.5" class="st2"></rect>		<text x="119.5" y="803" class="st3" v:langid="2052"><v:paragraph v:spline="-1.5" v:horizalign="1"></v:paragraph><v:tablist></v:tablist>板卡支持包<v:lf></v:lf><tspan x="15.5" dy="1.5em" class="st13">（</tspan>计时器、内存管理器、电源管理器、调试等）</text>		</g>	<g id="shape37-95" v:mid="37" v:groupcontext="shape" transform="translate(589.818,-75.25)">		<title>Sheet.37</title>		<desc>硬件驱动程序</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="68" cy="807.5" width="136" height="64"></v:textrect>		<rect x="0" y="775.5" width="136" height="64" rx="4.5" ry="4.5" class="st2"></rect>		<text x="29" y="812" class="st3" v:langid="2052"><v:paragraph v:spline="-1.5" v:horizalign="1"></v:paragraph><v:tablist></v:tablist>硬件驱动程序</text>		</g>	<g id="shape38-98" v:mid="38" v:groupcontext="shape" transform="translate(277.818,-35.25)">		<title>Sheet.38</title>		<desc>实时操作系统 (RTOS)</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="224" cy="823.5" width="448.01" height="32"></v:textrect>		<rect x="0" y="807.5" width="448" height="32" rx="4.5" ry="4.5" class="st2"></rect>		<text x="158.93" y="828.05" class="st3" v:langid="2052"><v:paragraph v:spline="-1.5" v:horizalign="1"></v:paragraph><v:tablist></v:tablist>实时操作系统<tspan class="st4"> </tspan><tspan class="st4" v:langid="1033"> </tspan><tspan class="st4" v:langid="1033">(RTOS)</tspan></text>		</g>	<g id="shape48-104" v:mid="48" v:groupcontext="shape" transform="translate(1128.25,532.25) rotate(90)">		<title>Simple Arrow</title>		<desc>CAPI</desc>		<v:userdefs>			<v:ud v:nameu="visVersion" v:val="VT0(15):26"></v:ud>			<v:ud v:nameu="ArrowType" v:prompt="" v:val="VT0(2):26"></v:ud>		</v:userdefs>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="24" cy="839.5" width="48.01" height="0" transform="rotate(180)"></v:textrect>		<path d="M0 839.5 L12 827.5 L12 833.5 L48 833.5 L48 839.5 L48 845.5 L12 845.5 L12 851.5 L0 839.5 Z" class="st2"></path>		<text x="-44" y="-835.75" transform="rotate(180)" class="st14" v:langid="1033"><v:paragraph v:spline="-1.5"></v:paragraph><v:tablist></v:tablist>CAPI</text>		</g>	<g id="shape49-107" v:mid="49" v:groupcontext="shape" transform="translate(240.75,-227.25)">		<title>Sheet.49</title>		<desc>模块1</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="48" cy="823.5" width="96" height="32"></v:textrect>		<rect x="0" y="807.5" width="96" height="32" rx="4.5" ry="4.5" class="st2"></rect>		<text x="31.13" y="828.05" class="st3" v:langid="2052"><v:paragraph v:spline="-1.5" v:horizalign="1"></v:paragraph><v:tablist></v:tablist>模块<tspan class="st4" v:langid="1033">1</tspan></text>		</g>	<g id="shape50-111" v:mid="50" v:groupcontext="shape" transform="translate(1249.25,532.25) rotate(90)">		<title>Simple Arrow.50</title>		<desc>CAPI</desc>		<v:userdefs>			<v:ud v:nameu="visVersion" v:val="VT0(15):26"></v:ud>			<v:ud v:nameu="ArrowType" v:prompt="" v:val="VT0(2):26"></v:ud>		</v:userdefs>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="24" cy="839.5" width="48.01" height="0" transform="rotate(180)"></v:textrect>		<path d="M0 839.5 L12 827.5 L12 833.5 L48 833.5 L48 839.5 L48 845.5 L12 845.5 L12 851.5 L0 839.5 Z" class="st2"></path>		<text x="-44" y="-835.75" transform="rotate(180)" class="st14" v:langid="1033"><v:paragraph v:spline="-1.5"></v:paragraph><v:tablist></v:tablist>CAPI</text>		</g>	<g id="shape51-114" v:mid="51" v:groupcontext="shape" transform="translate(1465.25,532.25) rotate(90)">		<title>Simple Arrow.51</title>		<desc>CAPI</desc>		<v:userdefs>			<v:ud v:nameu="visVersion" v:val="VT0(15):26"></v:ud>			<v:ud v:nameu="ArrowType" v:prompt="" v:val="VT0(2):26"></v:ud>		</v:userdefs>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="24" cy="839.5" width="48" height="0" transform="rotate(180)"></v:textrect>		<path d="M0 839.5 L12 827.5 L12 833.5 L48 833.5 L48 839.5 L48 845.5 L12 845.5 L12 851.5 L0 839.5 Z" class="st2"></path>		<text x="-44" y="-835.75" transform="rotate(180)" class="st14" v:langid="1033"><v:paragraph v:spline="-1.5"></v:paragraph><v:tablist></v:tablist>CAPI</text>		</g></g>
</svg>

高级 SPF 软件块

SPF 组件

| 组件 | 说明 |
| --- | --- |
| **APM** | 音频处理管理器 (APM) 设置并管理 SPF 中的用例图。它为图管理库和 APM 客户端提供标准 API，以设置和配置音频用例。 |
| **模块** | 模块是 SPF 中的一个功能块。它在 LPAI 子系统中执行实时音频处理。 |
| **Container** | Container 是一种框架实现，它在同一软件线程中一起运行一组数据处理模块。每个container 都在自己的软件线程中运行。 |

Last Published: Jul 23, 2025

[Previous Topic
启用基于 TinyALSA 的应用程序](https://docs.qualcomm.com/bundle/publicresource/80-70020-16SC/topics/tinyalsa.md) [Next Topic
排除音频故障](https://docs.qualcomm.com/bundle/publicresource/80-70020-16SC/topics/troubleshoot.md)