# 定制音频图

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

## 音频图术语

音频图术语

| **用例** | 从发送端端点到接收端端点的模块图，符合产品定义的用例。 |
| --- | --- |
| **图** | 对一组连接在一起以创建特定用例的一个或多个子图的逻辑解释。 |
| **子图** | 一组连接在一起并作为单个实体进行操作的模块的逻辑抽象。 |
| **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="39.0208in" height="5.52083in" viewbox="0 0 2809.5 397.5" xml:space="preserve" color-interpolation-filters="sRGB" class="st21" aria-label="../../_images/sample_audio_graph.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: #ffffff; stroke: #d2d7e1; stroke-linecap: round; stroke-linejoin: round; stroke-width: 1.5 }
.svg-1 .st3 { fill: #fafafa; stroke: #d2d7e1; stroke-dasharray: 14, 10; stroke-width: 2 }
.svg-1 .st4 { fill: #d2d7e1; fill-opacity: 1; stroke: #d2d7e1; stroke-opacity: 1; stroke-width: 0.44247787610619 }
.svg-1 .st5 { fill: #6280cc; stroke: none; stroke-width: 2 }
.svg-1 .st6 { fill: #000000; fill-opacity: 1; stroke: #000000; stroke-opacity: 1; stroke-width: 0.44247787610619 }
.svg-1 .st7 { fill: #ffffff; font-family: Roboto; font-size: 1.33333em }
.svg-1 .st8 { fill: none; stroke: #ffffff; stroke-width: 2 }
.svg-1 .st9 { fill: #ffffff; fill-opacity: 1; stroke: #ffffff; stroke-opacity: 1; stroke-width: 0.44247787610619 }
.svg-1 .st10 { fill: #ffffff; font-family: Roboto; font-size: 1.33333em; letter-spacing: 0.0625002em }
.svg-1 .st11 { font-family: SimHei; font-size: 1.0625em }
.svg-1 .st12 { fill: #ffffff; font-family: SimHei; font-size: 1.41666em; letter-spacing: 0.0588236em }
.svg-1 .st13 { font-family: Roboto; font-size: 0.941175em }
.svg-1 .st14 { marker-end: url("#mrkr4-21"); stroke: #000000; stroke-linecap: round; stroke-linejoin: round; stroke-width: 2 }
.svg-1 .st15 { fill: #ffffff; font-family: SimHei; font-size: 1.41666em }
.svg-1 .st16 { fill: none; marker-end: url("#mrkr4-21"); stroke: none; stroke-linecap: round; stroke-linejoin: round; stroke-width: 2 }
.svg-1 .st17 { fill: #000000; font-family: SimHei; font-size: 1.41666em; letter-spacing: 0.0588236em }
.svg-1 .st18 { fill: #d2d7e1; marker-end: url("#mrkr4-21"); 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 { font-size: 1em }
.svg-1 .st21 { 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-8" class="st4" 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-21" class="st6" 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-26" class="st9" 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="39.0208" height="5.52083" 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="2809.5" height="397.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="shape37-3" v:mid="37" v:groupcontext="shape" transform="translate(18.75,-18.75)">		<title>Sheet.37</title>		<rect x="0" y="37.5" width="2772" height="360" rx="4.5" ry="4.5" class="st2"></rect>	</g>	<g id="shape24-5" v:mid="24" v:groupcontext="shape" transform="translate(272.409,-135.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 397.5 L1202.54 397.5 A47.6246 47.6246 -180 0 0 1250.16 349.87 L1250.16 230.81 A47.6246 47.6246 -180 0					 0 1202.54 183.19 L43.66 183.19 A43.6558 43.6558 -180 0 0 0 226.84 L0 353.84 A43.6558 43.6558 -180 0 0 43.66					 397.5 Z" class="st3"></path>	</g>	<g id="shape25-9" v:mid="25" v:groupcontext="shape" transform="translate(1541.61,-135.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 397.5 L234.96 397.5 A36.1048 36.1048 -180 0 0 271.07 361.39 L271.07 223.26 A40.0736 40.0736 -180 0 0					 230.99 183.19 L36.52 183.19 A36.5226 36.5226 -180 0 0 0 219.71 L0 353.04 A44.46 44.46 -180 0 0 44.46 397.5					 Z" class="st3"></path>	</g>	<g id="shape26-12" v:mid="26" v:groupcontext="shape" transform="translate(2491.47,-135.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 397.5 L234.96 397.5 A36.1048 36.1048 -180 0 0 271.07 361.39 L271.07 223.26 A40.0736 40.0736 -180 0 0					 230.99 183.19 L36.52 183.19 A36.5226 36.5226 -180 0 0 0 219.71 L0 353.04 A44.46 44.46 -180 0 0 44.46 397.5					 Z" class="st3"></path>	</g>	<g id="shape27-15" v:mid="27" v:groupcontext="shape" transform="translate(1859.92,-135.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 397.5 L552.57 397.5 A38.7821 38.7821 -180 0 0 591.35 358.72 L591.35 229.73 A46.5385 46.5385 -180 0 0					 544.81 183.19 L48.39 183.19 A48.3895 48.3895 -180 0 0 0 231.58 L0 349.11 A48.3895 48.3895 -180 0 0 48.39					 397.5 Z" class="st3"></path>	</g>	<g id="shape1-18" v:mid="1" v:groupcontext="shape" transform="translate(289.606,-153.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="307.306" width="566.22" height="180.388"></v:textrect>		<path d="M18.59 397.5 L540.7 397.5 A25.513 25.513 -180 0 0 566.21 371.99 L566.21 242.63 A25.513 25.513 -180 0 0 540.7					 217.11 L18.59 217.11 A18.5847 18.5847 -180 0 0 0 235.7 L0 378.91 A18.5847 18.5847 -180 0 0 18.59 397.5 Z" class="st5"></path>		<text x="252.51" y="239.11" class="st7" 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-23" v:mid="2" v:groupcontext="shape" transform="translate(683.627,-206.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="357.812" width="144.41" height="79.3755"></v:textrect>		<path d="M14.44 397.5 L129.97 397.5 A14.4408 14.4408 -180 0 0 144.41 383.06 L144.41 332.57 A14.4408 14.4408 -180 0 0					 129.97 318.12 L14.44 318.12 A14.4408 14.4408 -180 0 0 -0 332.57 L0 383.06 A14.4408 14.4408 -180 0 0 14.44					 397.5 Z" class="st8"></path>		<text x="23.99" y="364.79" class="st10" v:langid="1033"><v:paragraph v:spline="-1.5" v:horizalign="1"></v:paragraph><v:tablist></v:tablist>PCM <tspan class="st11" v:langid="2052">转换器</tspan></text>		</g>	<g id="shape3-29" v:mid="3" v:groupcontext="shape" transform="translate(500.507,-206.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="357.812" width="144.41" height="79.3755"></v:textrect>		<path d="M14.44 397.5 L129.97 397.5 A14.4408 14.4408 -180 0 0 144.41 383.06 L144.41 332.57 A14.4408 14.4408 -180 0 0					 129.97 318.12 L14.44 318.12 A14.4408 14.4408 -180 0 0 -0 332.57 L0 383.06 A14.4408 14.4408 -180 0 0 14.44					 397.5 Z" class="st8"></path>		<text x="23.99" y="364.79" class="st10" v:langid="1033"><v:paragraph v:spline="-1.5" v:horizalign="1"></v:paragraph><v:tablist></v:tablist>PCM <tspan class="st11" v:langid="2052">解码器</tspan></text>		</g>	<g id="shape4-34" v:mid="4" v:groupcontext="shape" transform="translate(317.387,-206.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="357.812" width="144.41" height="79.3755"></v:textrect>		<path d="M14.44 397.5 L129.97 397.5 A14.4408 14.4408 -180 0 0 144.41 383.06 L144.41 332.57 A14.4408 14.4408 -180 0 0					 129.97 318.12 L14.44 318.12 A14.4408 14.4408 -180 0 0 -0 332.57 L0 383.06 A14.4408 14.4408 -180 0 0 14.44					 397.5 Z" class="st8"></path>		<text x="7.19" y="364.79" class="st12" v:langid="2052"><v:paragraph v:spline="-1.5" v:horizalign="1"></v:paragraph><v:tablist></v:tablist>写入<tspan class="st13"> </tspan><tspan class="st13" v:langid="1033">SHMEM EP</tspan></text>		</g>	<g id="shape5-40" v:mid="5" v:groupcontext="shape" v:layermember="0" transform="translate(461.797,-233.25)">		<title>Dynamic connector.1032</title>		<path d="M0 385 L29.67 385" class="st14"></path>	</g>	<g id="shape6-45" v:mid="6" v:groupcontext="shape" v:layermember="0" transform="translate(644.917,-233.25)">		<title>Dynamic connector.1033</title>		<path d="M0 385 L29.67 385" class="st14"></path>	</g>	<g id="shape7-50" v:mid="7" v:groupcontext="shape" transform="translate(1554.32,-151.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="306.148" width="245.65" height="182.703"></v:textrect>		<path d="M9.76 397.5 L235.54 397.5 A10.1023 10.1023 -180 0 0 245.65 387.4 L245.65 224.9 A10.1023 10.1023 -180 0 0 235.54					 214.8 L9.76 214.8 A9.76448 9.76448 -180 0 0 0 224.56 L0 387.74 A9.76448 9.76448 -180 0 0 9.76 397.5 Z" class="st5"></path>		<text x="92.22" y="236.8" class="st7" 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-54" v:mid="8" v:groupcontext="shape" transform="translate(1604.94,-206.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="357.812" width="144.41" height="79.3755"></v:textrect>		<path d="M14.44 397.5 L129.97 397.5 A14.4408 14.4408 -180 0 0 144.41 383.06 L144.41 332.57 A14.4408 14.4408 -180 0 0					 129.97 318.12 L14.44 318.12 A14.4408 14.4408 -180 0 0 -0 332.57 L0 383.06 A14.4408 14.4408 -180 0 0 14.44					 397.5 Z" class="st8"></path>		<text x="12.71" y="364.19" class="st15" v:langid="2052"><v:paragraph v:spline="-1.5" v:horizalign="1"></v:paragraph><v:tablist></v:tablist>媒体格式转换器</text>		</g>	<g id="shape9-58" v:mid="9" v:groupcontext="shape" transform="translate(921.965,-153.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="307.306" width="566.22" height="180.388"></v:textrect>		<path d="M21.23 397.5 L543.35 397.5 A22.8676 22.8676 -180 0 0 566.21 374.63 L566.21 239.98 A22.8676 22.8676 -180 0 0					 543.35 217.11 L21.23 217.11 A21.2301 21.2301 -180 0 0 0 238.34 L0 376.27 A21.2301 21.2301 -180 0 0 21.23					 397.5 Z" class="st5"></path>		<text x="252.51" y="239.11" class="st7" 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-62" v:mid="10" v:groupcontext="shape" transform="translate(1315.99,-206.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="357.812" width="144.41" height="79.3755"></v:textrect>		<path d="M14.44 397.5 L129.97 397.5 A14.4408 14.4408 -180 0 0 144.41 383.06 L144.41 332.57 A14.4408 14.4408 -180 0 0					 129.97 318.12 L14.44 318.12 A14.4408 14.4408 -180 0 0 -0 332.57 L0 383.06 A14.4408 14.4408 -180 0 0 14.44					 397.5 Z" class="st8"></path>		<text x="46.71" y="364.19" class="st15" v:langid="2052"><v:paragraph v:spline="-1.5" v:horizalign="1"></v:paragraph><v:tablist></v:tablist>功分器</text>		</g>	<g id="shape11-66" v:mid="11" v:groupcontext="shape" transform="translate(1132.87,-206.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="357.812" width="144.41" height="79.3755"></v:textrect>		<path d="M14.44 397.5 L129.97 397.5 A14.4408 14.4408 -180 0 0 144.41 383.06 L144.41 332.57 A14.4408 14.4408 -180 0 0					 129.97 318.12 L14.44 318.12 A14.4408 14.4408 -180 0 0 -0 332.57 L0 383.06 A14.4408 14.4408 -180 0 0 14.44					 397.5 Z" class="st8"></path>		<text x="57.62" y="363.81" class="st7" v:langid="1033"><v:paragraph v:spline="-1.5" v:horizalign="1"></v:paragraph><v:tablist></v:tablist>PP2</text>		</g>	<g id="shape12-70" v:mid="12" v:groupcontext="shape" transform="translate(949.746,-206.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="357.812" width="144.41" height="79.3755"></v:textrect>		<path d="M14.44 397.5 L129.97 397.5 A14.4408 14.4408 -180 0 0 144.41 383.06 L144.41 332.57 A14.4408 14.4408 -180 0 0					 129.97 318.12 L14.44 318.12 A14.4408 14.4408 -180 0 0 -0 332.57 L0 383.06 A14.4408 14.4408 -180 0 0 14.44					 397.5 Z" class="st8"></path>		<text x="57.62" y="363.81" class="st7" v:langid="1033"><v:paragraph v:spline="-1.5" v:horizalign="1"></v:paragraph><v:tablist></v:tablist>PP1</text>		</g>	<g id="shape13-74" v:mid="13" v:groupcontext="shape" v:layermember="0" transform="translate(1094.16,-233.25)">		<title>Dynamic connector.13</title>		<path d="M0 385 L29.67 385" class="st14"></path>	</g>	<g id="shape14-79" v:mid="14" v:groupcontext="shape" v:layermember="0" transform="translate(1277.28,-233.25)">		<title>Dynamic connector.23</title>		<path d="M0 385 L29.67 385" class="st14"></path>	</g>	<g id="shape15-84" v:mid="15" v:groupcontext="shape" transform="translate(2504.18,-151.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="306.148" width="245.65" height="182.703"></v:textrect>		<path d="M24.56 397.5 L221.08 397.5 A24.5642 24.5642 -180 0 0 245.65 372.94 L245.65 239.36 A24.5642 24.5642 -180 0 0					 221.08 214.8 L24.56 214.8 A24.5642 24.5642 -180 0 0 -0 239.36 L0 372.94 A24.5642 24.5642 -180 0 0 24.56					 397.5 Z" class="st5"></path>		<text x="92.22" y="236.8" class="st7" 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-88" v:mid="16" v:groupcontext="shape" transform="translate(2554.8,-206.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="357.812" width="144.41" height="79.3755"></v:textrect>		<path d="M5.89 397.5 L138.18 397.5 A6.22793 6.22793 -180 0 0 144.41 391.27 L144.41 324.35 A6.22793 6.22793 -180 0 0 138.18					 318.12 L5.89 318.12 A5.88921 5.88921 -180 0 0 0 324.01 L0 391.61 A5.88921 5.88921 -180 0 0 5.89 397.5 Z" class="st8"></path>		<text x="47.83" y="363.81" class="st7" 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-92" v:mid="17" v:groupcontext="shape" transform="translate(1871.83,-153.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="307.306" width="566.22" height="180.388"></v:textrect>		<path d="M16.82 397.5 L553.05 397.5 A13.1667 13.1667 -180 0 0 566.21 384.33 L566.21 230.28 A13.1667 13.1667 -180 0 0					 553.05 217.11 L16.82 217.11 A16.82 16.82 -180 0 0 0 233.93 L0 380.68 A16.82 16.82 -180 0 0 16.82 397.5 Z" class="st5"></path>		<text x="252.51" y="239.11" class="st7" 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-96" v:mid="18" v:groupcontext="shape" transform="translate(2265.85,-206.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="357.812" width="144.41" height="79.3755"></v:textrect>		<path d="M14.44 397.5 L129.97 397.5 A14.4408 14.4408 -180 0 0 144.41 383.06 L144.41 332.57 A14.4408 14.4408 -180 0 0					 129.97 318.12 L14.44 318.12 A14.4408 14.4408 -180 0 0 -0 332.57 L0 383.06 A14.4408 14.4408 -180 0 0 14.44					 397.5 Z" class="st8"></path>		<text x="57.62" y="363.81" class="st7" v:langid="1033"><v:paragraph v:spline="-1.5" v:horizalign="1"></v:paragraph><v:tablist></v:tablist>PP6</text>		</g>	<g id="shape19-100" v:mid="19" v:groupcontext="shape" transform="translate(2082.73,-206.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="357.812" width="144.41" height="79.3755"></v:textrect>		<path d="M14.44 397.5 L129.97 397.5 A14.4408 14.4408 -180 0 0 144.41 383.06 L144.41 332.57 A14.4408 14.4408 -180 0 0					 129.97 318.12 L14.44 318.12 A14.4408 14.4408 -180 0 0 -0 332.57 L0 383.06 A14.4408 14.4408 -180 0 0 14.44					 397.5 Z" class="st8"></path>		<text x="57.62" y="363.81" class="st7" v:langid="1033"><v:paragraph v:spline="-1.5" v:horizalign="1"></v:paragraph><v:tablist></v:tablist>PP5</text>		</g>	<g id="shape20-104" v:mid="20" v:groupcontext="shape" transform="translate(1899.61,-206.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="357.812" width="144.41" height="79.3755"></v:textrect>		<path d="M14.44 397.5 L129.97 397.5 A14.4408 14.4408 -180 0 0 144.41 383.06 L144.41 332.57 A14.4408 14.4408 -180 0 0					 129.97 318.12 L14.44 318.12 A14.4408 14.4408 -180 0 0 -0 332.57 L0 383.06 A14.4408 14.4408 -180 0 0 14.44					 397.5 Z" class="st8"></path>		<text x="46.71" y="364.19" class="st15" v:langid="2052"><v:paragraph v:spline="-1.5" v:horizalign="1"></v:paragraph><v:tablist></v:tablist>混音器</text>		</g>	<g id="shape21-108" v:mid="21" v:groupcontext="shape" v:layermember="0" transform="translate(2044.02,-233.25)">		<title>Dynamic connector.21</title>		<path d="M0 385 L29.67 385" class="st14"></path>	</g>	<g id="shape22-113" v:mid="22" v:groupcontext="shape" v:layermember="0" transform="translate(2227.14,-233.25)">		<title>Dynamic connector.22</title>		<path d="M0 385 L29.67 385" class="st14"></path>	</g>	<g id="shape23-118" v:mid="23" v:groupcontext="shape" transform="translate(35.75,-228.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="379.861" width="175.73" height="35.278"></v:textrect>		<rect x="0" y="362.222" width="175.729" height="35.278" rx="4.5" ry="4.5" class="st16"></rect>		<text x="4" y="386.84" class="st17" v:langid="2052"><v:paragraph v:spline="-1.5"></v:paragraph><v:tablist></v:tablist>客户端<tspan class="st13"> </tspan><tspan class="st13" v:langid="1033">PCM </tspan>数据</text>		</g>	<g id="shape28-124" v:mid="28" v:groupcontext="shape" v:layermember="0" transform="translate(828.037,-233.25)">		<title>Dynamic connector.46</title>		<path d="M0 385 L112.67 385" class="st14"></path>	</g>	<g id="shape29-129" v:mid="29" v:groupcontext="shape" v:layermember="0" transform="translate(1460.4,-233.25)">		<title>Dynamic connector.47</title>		<path d="M0 385 L135.51 385" class="st14"></path>	</g>	<g id="shape30-134" v:mid="30" v:groupcontext="shape" v:layermember="0" transform="translate(1749.35,-258.25)">		<title>Dynamic connector.48</title>		<path d="M0 410 L141.22 410" class="st14"></path>	</g>	<g id="shape31-139" v:mid="31" v:groupcontext="shape" v:layermember="0" transform="translate(2410.26,-233.25)">		<title>Dynamic connector.49</title>		<path d="M0 385 L135.51 385" class="st14"></path>	</g>	<g id="shape32-144" v:mid="32" v:groupcontext="shape" v:layermember="0" transform="translate(187.479,-256.215)">		<title>Dynamic connector.50</title>		<path d="M0 409.97 L0 410.03 L93.09 410.03" class="st14"></path>	</g>	<g id="shape33-149" v:mid="33" v:groupcontext="shape" transform="translate(673.034,-71.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="361.428" width="431.72" height="72.1435"></v:textrect>		<rect x="0" y="325.356" width="431.715" height="72.1435" rx="4.5" ry="4.5" class="st18"></rect>		<text x="15.98" y="368.41" 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="st11" v:langid="2052">低延迟播放</tspan><tspan class="st11" v:langid="2052"> </tspan><tspan class="st11" v:langid="2052">实例</tspan><tspan class="st11" v:langid="2052">: </tspan><tspan class="st11" v:langid="2052">实例</tspan><tspan class="st20" v:langid="2052"> </tspan><tspan class="st20" v:langid="2052">1]</tspan></text>		</g>	<g id="shape34-160" v:mid="34" v:groupcontext="shape" transform="translate(1533.61,-71.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="145.193" cy="361.428" width="290.39" height="72.1435"></v:textrect>		<rect x="0" y="325.356" width="290.387" height="72.1435" rx="4.5" ry="4.5" class="st18"></rect>		<text x="14.66" y="354.45" 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="st11" v:langid="2052">低延迟播<v:lf></v:lf></tspan><tspan x="26.1" dy="1.642em" class="st11" v:langid="2052">放设备</tspan><tspan class="st11" v:langid="2052">: </tspan><tspan class="st11" v:langid="2052">扬声器实例</tspan><tspan class="st11" v:langid="2052">: </tspan><tspan class="st11" v:langid="2052">实例</tspan><tspan class="st20" v:langid="2052"> </tspan><tspan class="st20" v:langid="2052">1]</tspan></text>		</g>	<g id="shape35-172" v:mid="35" v:groupcontext="shape" transform="translate(2019.4,-71.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="361.428" width="271.07" height="72.1435"></v:textrect>		<rect x="0" y="325.356" width="271.068" height="72.1435" rx="4.5" ry="4.5" class="st18"></rect>		<text x="34.32" y="353.47" 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="37.23" dy="1.683em" class="st20">DevicePP Rx: </tspan><tspan class="st11" v:langid="2052">扬声器</tspan><tspan class="st20" v:langid="2052"> </tspan>PP]</text>		</g>	<g id="shape36-179" v:mid="36" v:groupcontext="shape" transform="translate(2491.47,-71.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="361.428" width="271.07" height="72.1435"></v:textrect>		<rect x="0" y="325.356" width="271.068" height="72.1435" rx="4.5" ry="4.5" class="st18"></rect>		<text x="31.69" y="367.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 作为 PipeWire 服务的一部分，在用户空间中运行。

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="7.35417in" height="6.49306in" viewbox="0 0 529.5 467.5" xml:space="preserve" color-interpolation-filters="sRGB" class="st16" aria-label="../../_images/AGM_service_blocks.svg"><v:documentproperties v:langid="1033">	<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: 0.24 }
.svg-2 .st4 { fill: #000000; font-family: SimHei; font-size: 1.16666em }
.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.16666em }
.svg-2 .st7 { font-family: SimHei; font-size: 1em }
.svg-2 .st8 { fill: #d2d7e1; stroke: #ffffff; stroke-linecap: round; stroke-linejoin: round; stroke-width: 2 }
.svg-2 .st9 { fill: #000000; font-family: Roboto; font-size: 1.16666em; letter-spacing: 0.0714292em }
.svg-2 .st10 { fill: #d2d7e1; stroke: #d2d7e1; stroke-linecap: round; stroke-linejoin: round; stroke-width: 2 }
.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="1" 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="7.35417" height="6.49306" 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" transform="translate(0,-0.000108102)">		<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>		<path d="M-0 463 A4.50011 4.50011 -180 0 0 4.5 467.5 L525 467.5 A4.50011 4.50011 -180 0 0 529.5 463 L529.5 4.5 A4.50011					 4.50011 -180 0 0 525 0 L4.5 0 A4.50011 4.50011 -180 0 0 -0 4.5 L0 463 Z" class="st1"></path>	</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="shape1-3" v:mid="1" v:groupcontext="shape" transform="translate(18.75,-18.7502)">		<title>Sheet.1</title>		<path d="M-0 463 A4.50011 4.50011 -180 0 0 4.5 467.5 L487.5 467.5 A4.50011 4.50011 -180 0 0 492 463 L492 42 A4.50011					 4.50011 -180 0 0 487.5 37.5 L4.5 37.5 A4.50011 4.50011 -180 0 0 0 42 L0 463 Z" class="st2"></path>	</g>	<g id="shape2-5" v:mid="2" v:groupcontext="shape" transform="translate(37.87,-36.8702)">		<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="441.5" width="454.02" height="52"></v:textrect>		<path d="M-0 463 A4.50011 4.50011 -180 0 0 4.5 467.5 L449.5 467.5 A4.50011 4.50011 -180 0 0 454 463 L454 420 A4.50011					 4.50011 -180 0 0 449.5 415.5 L4.5 415.5 A4.50011 4.50011 -180 0 0 -0 420 L0 463 Z" class="st3"></path>		<text x="4" y="435.25" class="st4" v:langid="1033"><v:paragraph v:spline="-1.5"></v:paragraph><v:tablist></v:tablist>内核空间</text>		</g>	<g id="shape3-8" v:mid="3" v:groupcontext="shape" transform="translate(37.87,-108.87)">		<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="306.5" width="454.02" height="322"></v:textrect>		<path d="M-0 463 A4.50011 4.50011 -180 0 0 4.5 467.5 L449.5 467.5 A4.50011 4.50011 -180 0 0 454 463 L454 150 A4.50011					 4.50011 -180 0 0 449.5 145.5 L4.5 145.5 A4.50011 4.50011 -180 0 0 0 150 L0 463 Z" class="st3"></path>		<text x="4" y="458.25" class="st4" v:langid="1033"><v:paragraph v:spline="-1.5"></v:paragraph><v:tablist></v:tablist>用户空间</text>		</g>	<g id="shape4-11" v:mid="4" v:groupcontext="shape" transform="translate(171.87,-112.87)">		<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="311.5" width="312.03" height="312"></v:textrect>		<path d="M-0 463 A4.50011 4.50011 -180 0 0 4.5 467.5 L307.5 467.5 A4.50011 4.50011 -180 0 0 312 463 L312 160 A4.50011					 4.50011 -180 0 0 307.5 155.5 L4.5 155.5 A4.50011 4.50011 -180 0 0 0 160 L0 463 Z" class="st5"></path>		<text x="7.46" y="176.97" class="st6" v:langid="1033"><v:paragraph v:spline="-1.5"></v:paragraph><v:tablist></v:tablist>AGM <tspan class="st7">服务</tspan></text>		</g>	<g id="shape5-15" v:mid="5" v:groupcontext="shape" transform="translate(203.87,-328.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="451.5" width="248.03" height="32"></v:textrect>		<path d="M-0 463 A4.50011 4.50011 -180 0 0 4.5 467.5 L243.5 467.5 A4.50011 4.50011 -180 0 0 248 463 L248 440 A4.50011					 4.50011 -180 0 0 243.5 435.5 L4.5 435.5 A4.50011 4.50011 -180 0 0 0 440 L0 463 Z" class="st8"></path>		<text x="92.44" y="456.75" class="st9" 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-18" v:mid="6" v:groupcontext="shape" transform="translate(211.87,-264.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="451.5" width="248.03" height="32"></v:textrect>		<path d="M-0 463 A4.50011 4.50011 -180 0 0 4.5 467.5 L243.5 467.5 A4.50011 4.50011 -180 0 0 248 463 L248 440 A4.50011					 4.50011 -180 0 0 243.5 435.5 L4.5 435.5 A4.50011 4.50011 -180 0 0 -0 440 L0 463 Z" class="st10"></path>		<text x="109.75" y="456.75" 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="shape7-21" v:mid="7" v:groupcontext="shape" transform="translate(203.87,-272.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="451.5" width="248.03" height="32"></v:textrect>		<path d="M-0 463 A4.50011 4.50011 -180 0 0 4.5 467.5 L243.5 467.5 A4.50011 4.50011 -180 0 0 248 463 L248 440 A4.50011					 4.50011 -180 0 0 243.5 435.5 L4.5 435.5 A4.50011 4.50011 -180 0 0 0 440 L0 463 Z" class="st8"></path>		<text x="96" y="456.75" class="st4" v:langid="1033"><v:paragraph v:spline="-1.5" v:horizalign="1"></v:paragraph><v:tablist></v:tablist>会话对象</text>		</g>	<g id="shape8-24" v:mid="8" v:groupcontext="shape" transform="translate(203.87,-144.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="451.5" width="112.03" height="32"></v:textrect>		<path d="M-0 463 A4.50011 4.50011 -180 0 0 4.5 467.5 L107.5 467.5 A4.50011 4.50011 -180 0 0 112 463 L112 440 A4.50011					 4.50011 -180 0 0 107.5 435.5 L4.5 435.5 A4.50011 4.50011 -180 0 0 0 440 L0 463 Z" class="st8"></path>		<text x="41.81" y="456.75" class="st9" v:langid="1033"><v:paragraph v:spline="-1.5" v:horizalign="1"></v:paragraph><v:tablist></v:tablist>GSL</text>		</g>	<g id="shape9-27" v:mid="9" v:groupcontext="shape" transform="translate(335.37,-47.7502)">		<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="451.5" width="116.53" height="32"></v:textrect>		<path d="M0 463 A4.50011 4.50011 -180 0 0 4.5 467.5 L112 467.5 A4.50011 4.50011 -180 0 0 116.5 463 L116.5 440 A4.50011					 4.50011 -180 0 0 112 435.5 L4.5 435.5 A4.50011 4.50011 -180 0 0 -0 440 L0 463 Z" class="st10"></path>		<text x="25.47" y="457.32" class="st6" v:langid="1033"><v:paragraph v:spline="-1.5" v:horizalign="1"></v:paragraph><v:tablist></v:tablist>ALSA <tspan class="st7">设备</tspan></text>		</g>	<g id="shape10-31" v:mid="10" v:groupcontext="shape" transform="translate(211.87,-200.87)">		<title>Sheet.10</title>		<path d="M-0 463 A4.50011 4.50011 -180 0 0 4.5 467.5 L107.5 467.5 A4.50011 4.50011 -180 0 0 112 463 L112 448 A4.50011					 4.50011 -180 0 0 107.5 443.5 L4.5 443.5 A4.50011 4.50011 -180 0 0 0 448 L0 463 Z" class="st8"></path>	</g>	<g id="shape11-33" v:mid="11" v:groupcontext="shape" transform="translate(203.87,-208.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="451.5" width="112.03" height="32"></v:textrect>		<path d="M-0 463 A4.50011 4.50011 -180 0 0 4.5 467.5 L107.5 467.5 A4.50011 4.50011 -180 0 0 112 463 L112 440 A4.50011					 4.50011 -180 0 0 107.5 435.5 L4.5 435.5 A4.50011 4.50011 -180 0 0 0 440 L0 463 Z" class="st8"></path>		<text x="35" y="456.75" class="st4" 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(343.37,-200.87)">		<title>Sheet.12</title>		<path d="M-0 463 A4.50011 4.50011 -180 0 0 4.5 467.5 L112 467.5 A4.50011 4.50011 -180 0 0 116.5 463 L116.5 448 A4.50011					 4.50011 -180 0 0 112 443.5 L4.5 443.5 A4.50011 4.50011 -180 0 0 0 448 L0 463 Z" class="st8"></path>	</g>	<g id="shape13-38" v:mid="13" v:groupcontext="shape" transform="translate(335.37,-208.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="451.5" width="116.53" height="32"></v:textrect>		<path d="M-0 463 A4.50011 4.50011 -180 0 0 4.5 467.5 L112 467.5 A4.50011 4.50011 -180 0 0 116.5 463 L116.5 440 A4.50011					 4.50011 -180 0 0 112 435.5 L4.5 435.5 A4.50011 4.50011 -180 0 0 0 440 L0 463 Z" class="st8"></path>		<text x="30.25" y="456.75" class="st4" 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(37.75,-98.7502)" 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 467.5 L454 467.5 L0 467.5 Z" class="st11"></path>		</g>		<g id="shape19-44" v:mid="19" v:groupcontext="shape">			<title>Sheet.19</title>			<path d="M0 467.5 L454 467.5 L0 467.5 Z" class="st12"></path>			<path d="M0 467.5 L454 467.5" class="st13"></path>		</g>	</g>	<g id="shape1007-47" v:mid="1007" v:groupcontext="shape" v:layermember="0" transform="translate(242.5,-272)">		<title>Dynamic connector.28</title>		<path d="M12.5 467.5 L12.5 490.46" class="st14"></path>	</g>	<g id="shape1008-53" v:mid="1008" v:groupcontext="shape" v:layermember="0" transform="translate(242.5,-209.12)">		<title>Dynamic connector.30</title>		<path d="M12.5 467.5 L12.5 490.46" class="st14"></path>	</g>	<g id="shape1009-58" v:mid="1009" v:groupcontext="shape" v:layermember="0" transform="translate(379.5,-272)">		<title>Dynamic connector.31</title>		<path d="M12.5 467.5 L12.5 490.46" class="st14"></path>	</g>	<g id="shape1010-63" v:mid="1010" v:groupcontext="shape" v:layermember="0" transform="translate(380.5,-209.12)">		<title>Dynamic connector</title>		<path d="M12.5 467.5 L12.5 587.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> |
| **Device** | <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="12.3542in" height="12.1597in" viewbox="0 0 889.5 875.5" xml:space="preserve" color-interpolation-filters="sRGB" class="st16" aria-label="../../_images/spf_blocks.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-3 .st1 { fill: #ffffff; stroke: none; stroke-linecap: round; stroke-linejoin: round; stroke-width: 1 }
.svg-3 .st2 { fill: #fafafa; stroke: #d2d7e1; stroke-linecap: round; stroke-linejoin: round; stroke-width: 1.5 }
.svg-3 .st3 { fill: #ffffff; stroke: #d2d7e1; stroke-linecap: round; stroke-linejoin: round; stroke-width: 2 }
.svg-3 .st4 { fill: #000000; font-family: SimHei; font-size: 1.08334em; letter-spacing: 0.0769224em }
.svg-3 .st5 { font-family: Roboto; font-size: 0.923075em }
.svg-3 .st6 { fill: #d2d7e1; stroke: #d2d7e1; stroke-linecap: round; stroke-linejoin: round; stroke-width: 2 }
.svg-3 .st7 { fill: #ffffff; stroke: none; stroke-linecap: round; stroke-linejoin: round; stroke-width: 2 }
.svg-3 .st8 { fill: none; stroke: none; stroke-linecap: round; stroke-linejoin: round; stroke-width: 1 }
.svg-3 .st9 { fill: #000000; font-family: Roboto; font-size: 1.00001em; font-style: italic; letter-spacing: 0.0833327em }
.svg-3 .st10 { fill: #000000; font-family: Roboto; font-size: 1.00001em; letter-spacing: 0.0833327em }
.svg-3 .st11 { marker-end: url("#mrkr4-58"); stroke: #000000; stroke-linecap: round; stroke-linejoin: round; stroke-width: 2 }
.svg-3 .st12 { fill: #000000; fill-opacity: 1; stroke: #000000; stroke-opacity: 1; stroke-width: 0.44247787610619 }
.svg-3 .st13 { stroke: #000000; stroke-dasharray: 0, 6; stroke-linecap: round; stroke-linejoin: round; stroke-width: 2 }
.svg-3 .st14 { font-size: 1em }
.svg-3 .st15 { fill: #000000; font-family: Roboto; font-size: 0.833336em; letter-spacing: 0.0999997em }
.svg-3 .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-58" class="st12" 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.3542" height="12.1597" 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="889.5" height="875.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="shape52-3" v:mid="52" v:groupcontext="shape" transform="translate(18.75,-18.75)">		<title>Sheet.52</title>		<rect x="0" y="37.5" width="852" height="838" rx="4.5" ry="4.5" class="st2"></rect>	</g>	<g id="shape1-5" v:mid="1" v:groupcontext="shape" transform="translate(39.8182,-745.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="829.5" width="811.94" height="92"></v:textrect>		<rect x="0" y="783.5" width="811.932" height="92" rx="4.5" ry="4.5" class="st3"></rect>		<text x="4" y="866.19" class="st4" v:langid="2052"><v:paragraph v:spline="-1.5"></v:paragraph><v:tablist></v:tablist>处理域<tspan class="st5" v:langid="1033"> </tspan><tspan class="st5" v:langid="1033">B</tspan></text>		</g>	<g id="shape3-10" v:mid="3" v:groupcontext="shape" transform="translate(37.75,-37.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="527.5" width="811.94" height="696"></v:textrect>		<rect x="0" y="179.5" width="811.932" height="696" rx="4.5" ry="4.5" class="st3"></rect>		<text x="4" y="199.44" class="st4" v:langid="2052"><v:paragraph v:spline="-1.5"></v:paragraph><v:tablist></v:tablist>处理域<tspan class="st5" v:langid="1033"> </tspan><tspan class="st5" v:langid="1033">A</tspan></text>		</g>	<g id="shape4-15" v:mid="4" v:groupcontext="shape" transform="translate(195.75,-213.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="636.5" width="621" height="478"></v:textrect>		<rect x="0" y="397.5" width="621" height="478" rx="4.5" ry="4.5" class="st6"></rect>		<text x="4" y="417.44" class="st4" v:langid="2052"><v:paragraph v:spline="-1.5"></v:paragraph><v:tablist></v:tablist>信号处理框架<tspan class="st5" v:langid="1033"> </tspan><tspan class="st5" v:langid="1033">(SPF)</tspan></text>		</g>	<g id="shape5-20" v:mid="5" v:groupcontext="shape" transform="translate(271.818,-709.25)">		<title>Sheet.5</title>		<desc>通用包路由器 (GPR)</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="224" cy="843.5" width="448.01" height="64"></v:textrect>		<rect x="0" y="811.5" width="448" height="64" rx="4.5" ry="4.5" class="st3"></rect>		<text x="161.81" y="848.81" class="st4" v:langid="2052"><v:paragraph v:spline="-1.5" v:horizalign="1"></v:paragraph><v:tablist></v:tablist>通用包路由器<tspan class="st5" v:langid="1033"> </tspan><tspan class="st5" v:langid="1033">(GPR)</tspan></text>		</g>	<g id="shape6-25" v:mid="6" v:groupcontext="shape" transform="translate(227.75,-301.25)">		<title>Sheet.6</title>		<rect x="0" y="531.5" width="544" height="344" rx="4.5" ry="4.5" class="st7"></rect>	</g>	<g id="shape7-27" v:mid="7" v:groupcontext="shape" transform="translate(259.75,-597.25)">		<title>Sheet.7</title>		<desc>音频处理管理器 (APM)</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="240" cy="859.5" width="480.01" height="32"></v:textrect>		<rect x="0" y="843.5" width="480" height="32" rx="4.5" ry="4.5" class="st3"></rect>		<text x="169.44" y="864.81" class="st4" v:langid="2052"><v:paragraph v:spline="-1.5" v:horizalign="1"></v:paragraph><v:tablist></v:tablist>音频处理管理器<tspan class="st5" v:langid="1033"> </tspan><tspan class="st5" v:langid="1033">(APM)</tspan></text>		</g>	<g id="shape8-32" v:mid="8" v:groupcontext="shape" transform="translate(259.75,-402.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="794.3" width="208.01" height="162.4"></v:textrect>		<rect x="0" y="713.1" width="208" height="162.4" rx="4.5" ry="4.5" class="st3"></rect>		<text x="4" y="731.73" class="st4" v:langid="2052"><v:paragraph v:spline="-1.5"></v:paragraph><v:tablist></v:tablist>分载</text>		</g>	<g id="shape9-35" v:mid="9" v:groupcontext="shape" transform="translate(267.75,-381.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="795.5" width="208.01" height="160"></v:textrect>		<rect x="0" y="715.5" width="208" height="160" rx="4.5" ry="4.5" class="st3"></rect>		<text x="4" y="734.13" class="st4" v:langid="2052"><v:paragraph v:spline="-1.5"></v:paragraph><v:tablist></v:tablist>专用</text>		</g>	<g id="shape10-38" v:mid="10" v:groupcontext="shape" transform="translate(275.75,-357.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="795.5" width="208.01" height="160"></v:textrect>		<rect x="0" y="715.5" width="208" height="160" rx="4.5" ry="4.5" class="st3"></rect>		<text x="4" y="734.13" class="st4" v:langid="2052"><v:paragraph v:spline="-1.5"></v:paragraph><v:tablist></v:tablist>通用</text>		</g>	<g id="shape12-41" v:mid="12" v:groupcontext="shape" transform="translate(336.103,-451.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="865.5" width="87.3" height="20"></v:textrect>		<rect x="0" y="855.5" width="87.2941" height="20" rx="4.5" ry="4.5" class="st8"></rect>		<text x="4" y="870" class="st9" v:langid="1033"><v:paragraph v:spline="-1.5"></v:paragraph><v:tablist></v:tablist>Container</text>		</g>	<g id="shape14-44" v:mid="14" v:groupcontext="shape" transform="translate(289.75,-375.25)">		<title>Sheet.14</title>		<desc>M1</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="22" cy="857.9" width="44" height="35.2"></v:textrect>		<rect x="0" y="840.3" width="44" height="35.2" rx="4.5" ry="4.5" class="st3"></rect>		<text x="12.39" y="862.4" class="st10" v:langid="1033"><v:paragraph v:spline="-1.5" v:horizalign="1"></v:paragraph><v:tablist></v:tablist>M1</text>		</g>	<g id="shape15-47" v:mid="15" v:groupcontext="shape" transform="translate(357.75,-375.25)">		<title>Sheet.15</title>		<desc>M2</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="22" cy="857.9" width="44" height="35.2"></v:textrect>		<rect x="0" y="840.3" width="44" height="35.2" rx="4.5" ry="4.5" class="st3"></rect>		<text x="12.39" y="862.4" class="st10" v:langid="1033"><v:paragraph v:spline="-1.5" v:horizalign="1"></v:paragraph><v:tablist></v:tablist>M2</text>		</g>	<g id="shape16-50" v:mid="16" v:groupcontext="shape" transform="translate(425.75,-375.25)">		<title>Sheet.16</title>		<desc>M3</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="22" cy="857.9" width="44" height="35.2"></v:textrect>		<rect x="0" y="840.3" width="44" height="35.2" rx="4.5" ry="4.5" class="st3"></rect>		<text x="12.39" y="862.4" class="st10" v:langid="1033"><v:paragraph v:spline="-1.5" v:horizalign="1"></v:paragraph><v:tablist></v:tablist>M3</text>		</g>	<g id="shape19-53" v:mid="19" v:groupcontext="shape" v:layermember="0" transform="translate(333.25,-380.75)">		<title>Dynamic connector</title>		<path d="M0.5 863 L15.46 863" class="st11"></path>	</g>	<g id="shape20-59" v:mid="20" v:groupcontext="shape" v:layermember="0" transform="translate(401.25,-380.75)">		<title>Dynamic connector.20</title>		<path d="M0.5 863 L15.46 863" class="st11"></path>	</g>	<g id="shape21-64" v:mid="21" v:groupcontext="shape" transform="translate(531.75,-509.25)">		<title>Sheet.21</title>		<desc>AMD</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="104" cy="859.5" width="208.01" height="32"></v:textrect>		<rect x="0" y="843.5" width="208" height="32" rx="4.5" ry="4.5" class="st3"></rect>		<text x="89.41" y="864" class="st10" v:langid="1033"><v:paragraph v:spline="-1.5" v:horizalign="1"></v:paragraph><v:tablist></v:tablist>AMD</text>		</g>	<g id="shape22-67" v:mid="22" v:groupcontext="shape" transform="translate(531.75,-442.25)">		<title>Sheet.22</title>		<desc>PRM</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="104" cy="859.5" width="208.01" height="32"></v:textrect>		<rect x="0" y="843.5" width="208" height="32" rx="4.5" ry="4.5" class="st3"></rect>		<text x="89.78" y="864" class="st10" v:langid="1033"><v:paragraph v:spline="-1.5" v:horizalign="1"></v:paragraph><v:tablist></v:tablist>PRM</text>		</g>	<g id="shape23-70" v:mid="23" v:groupcontext="shape" transform="translate(531.75,-376.85)">		<title>Sheet.23</title>		<desc>IRM</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="104" cy="859.5" width="208.01" height="32"></v:textrect>		<rect x="0" y="843.5" width="208" height="32" rx="4.5" ry="4.5" class="st3"></rect>		<text x="91.94" y="864" class="st10" v:langid="1033"><v:paragraph v:spline="-1.5" v:horizalign="1"></v:paragraph><v:tablist></v:tablist>IRM</text>		</g>	<g id="shape25-73" v:mid="25" v:groupcontext="shape" transform="translate(379.75,-245.25)">		<title>Sheet.25</title>		<desc>模块2</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="48" cy="859.5" width="96" height="32"></v:textrect>		<rect x="0" y="843.5" width="96" height="32" rx="4.5" ry="4.5" class="st3"></rect>		<text x="30.13" y="864.81" class="st4" v:langid="2052"><v:paragraph v:spline="-1.5" v:horizalign="1"></v:paragraph><v:tablist></v:tablist>模块<tspan class="st5" v:langid="1033">2</tspan></text>		</g>	<g id="shape26-77" v:mid="26" v:groupcontext="shape" transform="translate(595.75,-245.25)">		<title>Sheet.26</title>		<desc>模块3</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="48" cy="859.5" width="96" height="32"></v:textrect>		<rect x="0" y="843.5" width="96" height="32" rx="4.5" ry="4.5" class="st3"></rect>		<text x="30.13" y="864.81" class="st4" v:langid="2052"><v:paragraph v:spline="-1.5" v:horizalign="1"></v:paragraph><v:tablist></v:tablist>模块<tspan class="st5" v:langid="1033">3</tspan></text>		</g>	<g id="shape28-81" v:mid="28" v:groupcontext="shape" transform="translate(520.75,-255.25)">		<title>Sheet.28</title>		<desc>...</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="22" cy="867.5" width="44" height="16"></v:textrect>		<rect x="0" y="859.5" width="44" height="16" rx="4.5" ry="4.5" class="st8"></rect>		<text x="4" y="872" class="st10" v:langid="1033"><v:paragraph v:spline="-1.5"></v:paragraph><v:tablist></v:tablist>...</text>		</g>	<g id="shape33-84" v:mid="33" v:groupcontext="shape" v:layermember="0" transform="translate(489.353,-792.25)">		<title>Dynamic connector.33</title>		<path d="M12.5 876.5 L12.5 899.5" class="st13"></path>	</g>	<g id="shape34-87" v:mid="34" v:groupcontext="shape" transform="translate(271.818,-789.25)">		<title>Sheet.34</title>		<desc>应用程序</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="224" cy="859.5" width="448.01" height="32"></v:textrect>		<rect x="0" y="843.5" width="448" height="32" rx="4.5" ry="4.5" class="st3"></rect>		<text x="196" y="864.38" class="st4" v:langid="2052"><v:paragraph v:spline="-1.5" v:horizalign="1"></v:paragraph><v:tablist></v:tablist>应用程序</text>		</g>	<g id="shape35-90" v:mid="35" v:groupcontext="shape" transform="translate(295.818,-165.25)">		<title>Sheet.35</title>		<desc>平台和操作系统抽象层</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="224" cy="859.5" width="448.01" height="32"></v:textrect>		<rect x="0" y="843.5" width="448" height="32" rx="4.5" ry="4.5" class="st3"></rect>		<text x="154" y="864.38" class="st4" v:langid="2052"><v:paragraph v:spline="-1.5" v:horizalign="1"></v:paragraph><v:tablist></v:tablist>平台和操作系统抽象层</text>		</g>	<g id="shape36-93" v:mid="36" v:groupcontext="shape" transform="translate(295.818,-93.25)">		<title>Sheet.36</title>		<desc>板卡支持包 计时器、内存管理器、电源管理器、调试等</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="152" cy="843.5" width="304" height="64"></v:textrect>		<rect x="0" y="811.5" width="304" height="64" rx="4.5" ry="4.5" class="st3"></rect>		<text x="117" y="838.63" class="st4" v:langid="2052"><v:paragraph v:spline="-1.5" v:horizalign="1"></v:paragraph><v:tablist></v:tablist>板卡支持包<v:lf></v:lf><tspan x="5" dy="1.5em" class="st14">（</tspan>计时器、内存管理器、电源管理器、调试等）</text>		</g>	<g id="shape37-97" v:mid="37" v:groupcontext="shape" transform="translate(607.818,-93.25)">		<title>Sheet.37</title>		<desc>硬件驱动程序</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="68" cy="843.5" width="136" height="64"></v:textrect>		<rect x="0" y="811.5" width="136" height="64" rx="4.5" ry="4.5" class="st3"></rect>		<text x="26" y="848.38" class="st4" v:langid="2052"><v:paragraph v:spline="-1.5" v:horizalign="1"></v:paragraph><v:tablist></v:tablist>硬件驱动程序</text>		</g>	<g id="shape38-100" v:mid="38" v:groupcontext="shape" transform="translate(295.818,-53.25)">		<title>Sheet.38</title>		<desc>实时操作系统 (RTOS)</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="224" cy="859.5" width="448.01" height="32"></v:textrect>		<rect x="0" y="843.5" width="448" height="32" rx="4.5" ry="4.5" class="st3"></rect>		<text x="155.93" y="864.81" class="st4" v:langid="2052"><v:paragraph v:spline="-1.5" v:horizalign="1"></v:paragraph><v:tablist></v:tablist>实时操作系统<tspan class="st5"> </tspan><tspan class="st5" v:langid="1033"> </tspan><tspan class="st5" v:langid="1033">(RTOS)</tspan></text>		</g>	<g id="shape48-106" v:mid="48" v:groupcontext="shape" transform="translate(1182.25,550.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="875.5" width="48.01" height="0" transform="rotate(180)"></v:textrect>		<path d="M0 875.5 L12 863.5 L12 869.5 L48 869.5 L48 875.5 L48 881.5 L12 881.5 L12 887.5 L0 875.5 Z" class="st3"></path>		<text x="-44" y="-871.75" transform="rotate(180)" class="st15" v:langid="1033"><v:paragraph v:spline="-1.5"></v:paragraph><v:tablist></v:tablist>CAPI</text>		</g>	<g id="shape49-109" v:mid="49" v:groupcontext="shape" transform="translate(258.75,-245.25)">		<title>Sheet.49</title>		<desc>模块1</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="48" cy="859.5" width="96" height="32"></v:textrect>		<rect x="0" y="843.5" width="96" height="32" rx="4.5" ry="4.5" class="st3"></rect>		<text x="30.13" y="864.81" class="st4" v:langid="2052"><v:paragraph v:spline="-1.5" v:horizalign="1"></v:paragraph><v:tablist></v:tablist>模块<tspan class="st5" v:langid="1033">1</tspan></text>		</g>	<g id="shape50-113" v:mid="50" v:groupcontext="shape" transform="translate(1303.25,550.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="875.5" width="48.01" height="0" transform="rotate(180)"></v:textrect>		<path d="M0 875.5 L12 863.5 L12 869.5 L48 869.5 L48 875.5 L48 881.5 L12 881.5 L12 887.5 L0 875.5 Z" class="st3"></path>		<text x="-44" y="-871.75" transform="rotate(180)" class="st15" v:langid="1033"><v:paragraph v:spline="-1.5"></v:paragraph><v:tablist></v:tablist>CAPI</text>		</g>	<g id="shape51-116" v:mid="51" v:groupcontext="shape" transform="translate(1519.25,550.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="875.5" width="48" height="0" transform="rotate(180)"></v:textrect>		<path d="M0 875.5 L12 863.5 L12 869.5 L48 869.5 L48 875.5 L48 881.5 L12 881.5 L12 887.5 L0 875.5 Z" class="st3"></path>		<text x="-44" y="-871.75" transform="rotate(180)" class="st15" 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: Nov 04, 2025

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