fuchsia.hardware.audio.signalprocessing

添加:7

PROTOCOLS

连接线

在 fuchsia.hardware.audio.signalprocessing/connector.fidl 中定义

如需简要了解信号处理协议,请参阅音频信号处理

SignalProcessingConnect

连接到 SignalProcessing 协议。 如果支持多个连接,但不支持新的连接请求(即已创建最大连接数,例如 1 个),则 protocol 通道(不是调用 SignalProcessingConnect 的通道)将关闭,并带有 ZX_ERR_ALREADY_BOUND 墓志铭。如果完全不支持信号处理,则 protocol 通道(同样,不是调用 SignalProcessingConnect 的通道)将关闭,并带有 ZX_ERR_NOT_SUPPORTED 墓志铭。此方法之所以命名为 SignalProcessingConnect 而不是 Connect,是因为此协议旨在进行组合,因此更详细的名称有助于区分并提高清晰度。

请求

名称类型
protocol server_end:SignalProcessing

阅读者

在 fuchsia.hardware.audio.signalprocessing/signal_processing.fidl 中定义

此协议是复合音频驱动程序所必需的,但其他音频驱动程序类型(编解码器、Dai、StreamConfig)不支持此协议。

如需查看概览,请参阅信号处理接口。

GetElements

返回支持的处理元素的向量。 此向量必须包含一个或多个处理元素。

请求

<EMPTY>

响应

名称类型
payload Reader_GetElements_Result

GetTopologies

返回一个包含支持的拓扑的向量。 此向量必须包含一个或多个拓扑。 如果返回了多个拓扑,客户端可以通过调用 SetTopology 从列表中选择任意拓扑。如果只返回一个拓扑,仍可调用 SetTopology,但不会造成任何更改。

每个元素都必须包含在至少一个拓扑中,但不必包含在每个拓扑中。

请求

<EMPTY>

响应

名称类型
payload Reader_GetTopologies_Result

WatchElementState

通过挂起式 GET 获取处理元素状态。 对于给定的 processing_element_id,驱动程序将立即回复客户端发送的第一个 WatchElementState。在 ElementState 的任何部分发生变化(与最近报告的该元素的值相比)之前,驱动程序不会响应针对相应 processing_element_id 的后续客户端 WatchElementState 调用。

如果 processing_element_id 与 GetElements 返回的 ElementId 不匹配,驱动程序将关闭协议通道并返回 ZX_ERR_INVALID_ARGS 错误。

如果此方法在以下情况下再次被调用,驱动程序将关闭协议通道并返回 ZX_ERR_BAD_STATE 错误:此客户端和 processing_element_id 已有待处理的 WatchElementState。

请求

名称类型
processing_element_id ElementId

响应

名称类型
state ElementState

WatchTopology

通过挂起的 get 获取当前拓扑。 驱动程序将立即回复每个客户端发送的第一个 WatchTopology。 在信号处理拓扑发生变化之前(这是 SetTopology 调用的结果),驱动程序不会响应来自相应客户端的后续 WatchTopology 调用。

如果此方法在客户端已存在待处理的 WatchTopology 时再次被调用,驱动程序将关闭协议通道并返回 ZX_ERR_BAD_STATE 错误。

新增:27

请求

<EMPTY>

响应

名称类型
payload Reader_WatchTopology_Result

SignalProcessing

在 fuchsia.hardware.audio.signalprocessing/signal_processing.fidl 中定义

此协议是复合音频驱动程序所必需的,但其他音频驱动程序类型(编解码器、Dai、StreamConfig)不支持此协议。

如需查看概览,请参阅信号处理接口。

GetElements

返回支持的处理元素的向量。 此向量必须包含一个或多个处理元素。

请求

<EMPTY>

响应

名称类型
payload Reader_GetElements_Result

GetTopologies

返回一个包含支持的拓扑的向量。 此向量必须包含一个或多个拓扑。 如果返回了多个拓扑,客户端可以通过调用 SetTopology 从列表中选择任意拓扑。如果只返回一个拓扑,仍可调用 SetTopology,但不会造成任何更改。

每个元素都必须包含在至少一个拓扑中,但不必包含在每个拓扑中。

请求

<EMPTY>

响应

名称类型
payload Reader_GetTopologies_Result

SetElementState

控制由 processing_element_id 指定的处理元素,该元素是 GetElements 返回的唯一 ElementId。 对 SetElementState 的调用中指定的 state 是 SettableElementState。这是 ElementState 的子集,因为 WatchElementState 返回的某些字段(例如 processing_delay 或 plug_state)只能由客户端观察((not set))。

如果 processing_element_id 与 GetElements 返回的已知 ElementId 不匹配,或者 state 对相应元素无效,则返回 ZX_ERR_INVALID_ARGS。这包括违反本协议中规定的任何规则。

示例:state 指定应停止或绕过某个元素,但相应元素未指定(或明确设置为 false)can_stop 或 can_bypass。state 包含 type_specific 条目,但该条目的 SettableTypeSpecificElementState 与对应于 processing_element_id 的元素的 ElementType 不匹配。state 更改了 EQUALIZER 元素的 EqualizerBandState(目前为止一切正常),但指定了对 frequency 的更改,而此元素并未在其 supported_controls 中设置 CAN_CONTROL_FREQUENCY。state 为 GAIN 元素指定了 gain 值为负无穷大、NAN 或超出元素声明的 min_gain, max_gain 范围的 GainElementState。

调用者可能会将对 SignalProcessing 协议的方法调用与其他驱动程序协议的调用交错进行。某些非 SignalProcessing 配置更改可能需要重新协商驱动程序状态,然后某些元素才能接收 SetElementState。例如,如果更改了 DaiFormat,则 SetElementState 更改 AGL 元素的参数可能不需要重新协商驱动程序状态,因为更改增益参数通常不会更改支持的音频格式集。相比之下,在进行相同的 DaiFormat 更改后,在 CONNECTION_POINT 元素上调用 SetElementState 之前,可能需要重新建立驱动程序状态,因为格式更改可能会使之前针对拓扑的另一部分在 GetDaiFormats 协议调用中返回的一组受支持的格式失效。

驱动程序负责确定何时需要重新协商。如果需要这样做,相关的 SetElementState 调用必须返回 ZX_ERR_BAD_STATE,并且客户端必须完全关闭协议通道,以便重新开始协议协商。然后,客户端必须在任何非 SignalProcessing 协议调用之前重新调用返回 ZX_ERR_BAD_STATE 的 SetElementState 调用。

请求

名称类型
processing_element_id ElementId
state SettableElementState

响应

名称类型
payload SignalProcessing_SetElementState_Result

SetTopology

通过指定 topology_id 来设置当前有效的拓扑,该 topology_id 与 GetTopologies 返回的矢量中的条目相匹配。当前活跃的拓扑通过 WatchTopology 响应进行通信。如需更改有效拓扑,客户端可使用 SetTopology。

如果 GetTopologies 仅返回一个 Topology,则 SetTopology 是可选的,并且不会产生任何影响。

如果 GetTopologies 返回的 topologies 中未找到指定的 topology_id,则此调用将失败并返回 ZX_ERR_INVALID_ARGS。

SetTopology 可以在非 SignalProcessing 协议调用之前或之后调用。如果在非 SignalProcessing 协议调用之后调用,则 SetTopology 可能会返回 ZX_ERR_BAD_STATE,以指示在不重新协商驱动程序状态的情况下无法继续执行操作。如需进一步讨论,请参阅 SetElementState。

请求

名称类型
topology_id TopologyId

响应

名称类型
payload SignalProcessing_SetTopology_Result

WatchElementState

通过挂起式 GET 获取处理元素状态。 对于给定的 processing_element_id,驱动程序将立即回复客户端发送的第一个 WatchElementState。在 ElementState 的任何部分发生变化(与最近报告的该元素的值相比)之前,驱动程序不会响应针对相应 processing_element_id 的后续客户端 WatchElementState 调用。

如果 processing_element_id 与 GetElements 返回的 ElementId 不匹配,驱动程序将关闭协议通道并返回 ZX_ERR_INVALID_ARGS 错误。

如果此方法在以下情况下再次被调用,驱动程序将关闭协议通道并返回 ZX_ERR_BAD_STATE 错误:此客户端和 processing_element_id 已有待处理的 WatchElementState。

请求

名称类型
processing_element_id ElementId

响应

名称类型
state ElementState

WatchTopology

通过挂起的 get 获取当前拓扑。 驱动程序将立即回复每个客户端发送的第一个 WatchTopology。 在信号处理拓扑发生变化之前(这是 SetTopology 调用的结果),驱动程序不会响应来自相应客户端的后续 WatchTopology 调用。

如果此方法在客户端已存在待处理的 WatchTopology 时再次被调用,驱动程序将关闭协议通道并返回 ZX_ERR_BAD_STATE 错误。

新增:27

请求

<EMPTY>

响应

名称类型
payload Reader_WatchTopology_Result

STRUCTS

EdgePair

在 fuchsia.hardware.audio.signalprocessing/signal_processing.fidl 中定义

处理元素之间的边对,用于指定音频如何按顺序流经一组处理元素排列。

字段类型说明默认
processing_element_id_from ElementId 无默认值
processing_element_id_to ElementId 无默认值

Reader_GetElements_Response

在 fuchsia.hardware.audio.signalprocessing/signal_processing.fidl 中定义

字段类型说明默认
processing_elements vector<Element>:64 无默认值

Reader_GetTopologies_Response

在 fuchsia.hardware.audio.signalprocessing/signal_processing.fidl 中定义

字段类型说明默认
topologies vector<Topology>:64 无默认值

Reader_WatchTopology_Response

在 fuchsia.hardware.audio.signalprocessing/signal_processing.fidl 中定义

字段类型说明默认
topology_id TopologyId 无默认值

SignalProcessing_SetElementState_Response

在 fuchsia.hardware.audio.signalprocessing/signal_processing.fidl 中定义

<EMPTY>

SignalProcessing_SetTopology_Response

在 fuchsia.hardware.audio.signalprocessing/signal_processing.fidl 中定义

<EMPTY>

枚举

ElementType flexible

类型:uint32

在 fuchsia.hardware.audio.signalprocessing/signal_processing.fidl 中定义

名称值说明
1

特定于供应商。一种处理元素,未包含在任何后续类型定义中。

3

控制流水线通道混合和路由。

4

增益控制,也称为音量控制。

5

自动增益控制。 无论输入信号如何变化,都能自动保持合适的信号电平。

6

自动增益限制器。 自动将信号强度维持在指定水平以下。 低于该电平的输入不受影响,高于该电平的峰值会被衰减。

7

改变信号的动态范围,例如动态范围压缩。

8

忽略。

9

延迟。

10

均衡器。

11

采样率转换。

13

环形缓冲区。通过跨进程循环缓冲区传输的音频数据源或接收器。这是可启动/结束处理流水线的三种元素中的第一种。 包含此类型元素的驱动程序必须支持相应元素 ID 的复合方法 GetRingBufferFormats 和 CreateRingBuffer。

14

数字音频接口互连。 这是可启动/结束处理流水线的三种元素中的第二种。 包含此类型元素的驱动程序必须支持相应元素 ID 的复合方法 GetDaiFormats 和 SetDaiFormat。

15

数据包流。通过离散数据包传输的音频数据源或接收器。 这是可启动/结束处理流水线的三种元素中的第三种。 包含此类型元素的驱动程序必须支持相应元素 ID 的复合方法 GetPacketStreamFormats 和 CreatePacketStream。

添加了:HEAD

EqualizerBandType flexible

类型:uint64

在 fuchsia.hardware.audio.signalprocessing/equalizer.fidl 中定义

均衡器频段的类型。

名称值说明
1

frequency 附近 gain_db 的增加/减少,可选 q。

2

窄带抑制,可显著衰减 frequency,并可选择性地衰减 q。

3

降低低于 frequency 的增益,可选 q,即高通。

4

降低高于 frequency 的增益,可选 q,即低通。

5

将增益降低到 frequency 以下,降低幅度为 gain_db,并具有平台效应。

6

以平台效应为特征,将高于 frequency 的增益降低 gain_db。

GainDomain 灵活

类型:uint8

在 fuchsia.hardware.audio.signalprocessing/gain.fidl 中定义

增益的硬件网域,例如 ANALOG。

名称值说明
1

处理元素增益在数字域中应用。

2

处理元素增益在模拟域中应用。

3

处理元件增益通过数字和模拟硬件混合使用。

GainType strict

类型:uint8

在 fuchsia.hardware.audio.signalprocessing/gain.fidl 中定义

增益类型的表示法。

名称值说明
1

以分贝为单位指定的增益,例如 -103.0dB 或 +3.2dB。

2

增幅,以百分比表示,例如 10.0% 或 80.5%。

LevelType strict

类型:uint8

在 fuchsia.hardware.audio.signalprocessing/dynamics.fidl 中定义

级别类型。

名称值说明
1

指定为峰值的增益级别。

2

指定为 RMS 的级别。

PlugDetectCapabilities 灵活

类型:uint32

在 fuchsia.hardware.audio.signalprocessing/dai_interconnect.fidl 中定义

互连的插头检测功能。

名称值说明
0

互连采用硬接线方式(将始终插接)。

1

互连可以拔出/插入,并且可以异步通知插拔状态变化。

ThresholdType strict

类型:uint8

在 fuchsia.hardware.audio.signalprocessing/dynamics.fidl 中定义

阈值类型。

名称值说明
1

在阈值之上应用动态处理。

2

在低于阈值的情况下应用动态处理。

TABLES

DaiInterconnect

在 fuchsia.hardware.audio.signalprocessing/dai_interconnect.fidl 中定义

具有 ElementType DAI_INTERCONNECT 的 Element 的参数。

序数字段类型说明
plug_detect_capabilities PlugDetectCapabilities

插头检测功能。

必填。

DaiInterconnectElementState

在 fuchsia.hardware.audio.signalprocessing/dai_interconnect.fidl 中定义

具有 ElementType DAI_INTERCONNECT 的 Element 的状态。

序数字段类型说明
plug_state PlugState

相应 DAI 互连的插头状态。

必填。

external_delay zx/Duration

驱动程序对超出此 DAI 互连的外部延迟的最佳估计值(根据流水线的当前配置)。

客户端在确定最低提前时间(在播放期间)和最低捕获延迟时间(在捕获期间)的要求时,必须考虑 external_delay。

如果未包含,则 external_delay 为未知;客户端可以自行处理(例如,将其视为零或其他时长、自动检测等)。

可选。如果指定,则必须为非负数。

动力学

在 fuchsia.hardware.audio.signalprocessing/dynamics.fidl 中定义

Element 的参数,其中 type 等于 DYNAMICS。

序数字段类型说明
bands vector<DynamicsBand>:64

此协议中的 Dynamics 元素可能支持多个频段。每个频段都指定了 DynamicsElementState 中可通过 SetElementState 更改的参数数量。bands 向量中的元素数量决定了相应处理元素支持的频段数量。

必需。必须包含至少一个条目。

supported_controls DynamicsSupportedControls

相应处理元素支持的控制变量(即可以通过调用 SetElementState 更改的控制变量)。

可选。

DynamicsBand

在 fuchsia.hardware.audio.signalprocessing/dynamics.fidl 中定义

Dynamics 元素频段的参数。

序数字段类型说明
id uint64

相应频段的唯一 ID,只需在相应的 Element 内保持唯一,并且在与 SignalProcessing 协议关联的频道关闭之前一直有效。

必填。

DynamicsBandState

在 fuchsia.hardware.audio.signalprocessing/dynamics.fidl 中定义

Element 中单个频段的状态,其中 type 等于 DYNAMICS。 即使客户端无法更改控制频段字段的值(即 supported_controls 中未设置相应位),WatchElementState 也可能会返回这些字段。

序数字段类型说明
id uint64

频段的唯一 ID。必须与 Dynamics bands 中指定的某个 id 相匹配。

min_frequency uint32

频段的最低频率(以 Hz 为单位)。例如,对于单频段动态处理,此字段可以为 0,以指定(与 max_frequency 一起)频段为全频段。

max_frequency uint32

频段的最大频率(以 Hz 为单位)。例如,对于单频段动态处理,此字段可以是奈奎斯特频率,用于(与 min_frequency 一起)指定频段为全频段。

必填。

threshold_db float32

动态主处理开始的输入 dB 值(受 knee_width_db 的限制)。 input_gain 和 output_gain 等某些信号处理不受此值的影响。

必需。必须是有限值。

threshold_type ThresholdType

动态处理应用于 ABOVE 或 BELOW 阈值。

WatchElementState 的必需参数。 如果未在 supported_controls 中设置 DynamicsSupportedControls.THRESHOLD_TYPE,则不允许在 SetElementState 中使用。

ratio float32

膝点区域之上或之下的输入与输出分贝比率(请参阅 threshold_type)。

必需。必须是有限值。

knee_width_db float32

膝部区域的宽度(以输入 dB 为单位)。如果存在,则不能为负值。 如果未包含,则膝部区域的宽度未指定。 值为零表示“硬”拐点;值越大,拐点越“软”。 此膝盖位于 threshold_db 处。

可选。如果指定,则必须是有限值。 如果未在 supported_controls 中设置 DynamicsSupportedControls.KNEE_WIDTH,则不允许在 SetElementState 中使用。

attack zx/Duration

攻击时间。 如果未包含,则表示未指定启动时间。

可选。如果指定,则必须为非负数。 如果未在 supported_controls 中设置 DynamicsSupportedControls.ATTACK,则不允许在 SetElementState 中使用。

release zx/Duration

发布时间。 如果未包含,则发布时间未指定。

可选。如果指定,则必须为非负数。 如果未在 supported_controls 中设置 DynamicsSupportedControls.RELEASE,则不允许在 SetElementState 中使用。

output_gain_db float32

输出(也称为补偿或后期)增益值(以分贝为单位)。 如果未包含,则输出增益未指定。

可选。如果指定,则必须是有限值。 如果未在 supported_controls 中设置 DynamicsSupportedControls.OUTPUT_GAIN,则不允许在 SetElementState 中使用。

input_gain_db float32

以分贝为单位的输入(也称为前)增益值。 如果未包含,则输入增益未指定。

可选。如果指定,则必须是有限值。 如果未在 supported_controls 中设置 DynamicsSupportedControls.INPUT_GAIN,则不允许在 SetElementState 中使用。

level_type LevelType

电平类型(峰值或 RMS)。 如果未包含,则级别类型未指定。

可选。 如果未在 supported_controls 中设置 DynamicsSupportedControls.LEVEL_TYPE,则不允许在 SetElementState 中使用。

lookahead zx/Duration

预先查看时间。 如果未包含,则表示未指定预读时间。

可选。如果指定,则必须为非负数。 如果未在 supported_controls 中设置 DynamicsSupportedControls.LOOKAHEAD,则不允许在 SetElementState 中使用。

linked_channels bool

关联的声道(也称为“立体声关联”,适用于 2 声道系统)。 如果未包含,则关联的频道选项未指定。 如果为 true,则动态响应将应用于所有渠道。 如果为 false,则每个渠道都有自己的动态响应。

可选。 如果未在 supported_controls 中设置 DynamicsSupportedControls.LINKED_CHANNELS,则不允许在 SetElementState 中使用。

DynamicsElementState

在 fuchsia.hardware.audio.signalprocessing/dynamics.fidl 中定义

Element 的状态,其中 type 等于 DYNAMICS。

序数字段类型说明
band_states vector<DynamicsBandState>:64

每个 ID 都必须与 Dynamics.bands 中的某个 ID 相匹配,并且 ID 不得重复。 band_states 必须至少包含一个元素。 由 band_states 控制的频段由每个 band.id 确定。

必需。必须包含至少一个条目。

元素

在 fuchsia.hardware.audio.signalprocessing/signal_processing.fidl 中定义

序数字段类型说明
id ElementId

相应元素的唯一 ID。此 ID 的范围仅限于 SignalProcessing 协议的生命周期内,即直到与该协议关联的渠道关闭为止。

必填。

type ElementType

处理元素类型。

必填。

type_specific TypeSpecificElement

处理元素的特定于类型的参数。

对于 ElementTypes DAI_INTERCONNECT、DYNAMICS、EQUALIZER、GAIN、VENDOR_SPECIFIC,此参数是必需的。 如果为 AUTOMATIC_GAIN_CONTROL、AUTOMATIC_GAIN_LIMITER、CONNECTION_POINT、DELAY、MUTE、PACKET_STREAM、RING_BUFFER 或 SAMPLE_RATE_CONVERSION 类型的元素指定了此属性,则无效。

description string:256

如果包含,则为处理元素的文本说明。

可选。如果存在,则不得为空。

can_stop bool

如果为 true,则可以通过 SetElementState 停止处理元素。 如果不包含或为 false,则始终启动处理元素。

可选。

can_bypass bool

如果为 true,则可以通过 SetElementState 绕过处理元素。 如果未包含或为 false,则无法绕过处理元素。 根据定义,DAI_INTERCONNECT、RING_BUFFER 或 PACKET_STREAM 类型的元素无法绕过,因此绝不能将此字段设置为 true。

可选。

ElementState

在 fuchsia.hardware.audio.signalprocessing/signal_processing.fidl 中定义

驱动程序返回的元素的当前状态。请注意,此表包含 SettableElementState 中没有的字段,因为这些字段无法由客户端更改。

序数字段类型说明
type_specific TypeSpecificElementState

处理元素的特定于类型的状态参数。

如果此处理元素被停用,并且提供了其特定于类型的状态,那么该特定于类型的状态仅用于提供信息(例如,如果停止的元素在未提供其他取代状态信息的情况下重新启动,则该元素的状态)。

对于 DAI_INTERCONNECT、DYNAMICS、EQUALIZER、GAIN 和 VENDOR_SPECIFIC 元素,此属性是必需的。 如果为 AUTOMATIC_GAIN_CONTROL、AUTOMATIC_GAIN_LIMITER、CONNECTION_POINT、DELAY、MUTE、PACKET_STREAM、RING_BUFFER 或 SAMPLE_RATE_CONVERSION 类型的元素指定了此属性,则无效。

vendor_specific_data vector<uint8>:4096

如果包含,则为用于将供应商特定信息从驱动程序传送到 SignalProcessing 客户端的不透明字节对象。

可选(即使元素的类型不是 VENDOR_SPECIFIC,也允许使用)。

新增:27
started bool

相应处理元素的开始/停止状态。 如果为 true,则启动与元素关联的硬件。如果为 false,则停止。

如果省略了相应的 Element can_stop 或将其设置为 false,则此字段永远不能为 false。

已停止的处理元素不提供其抽象功能。 没有音频数据流经已停止的元素。

必填。

bypassed bool

相应处理元素的绕过状态。 如果为 true,则绕过与元素关联的硬件。如果此属性设为 false 或缺失,则不会绕过关联的硬件。

默认情况下,处理元素不会被绕过。 如果省略了对应的 Element can_bypass 或将其设置为 false,则此字段永远无法设置为 true。

被绕过的元素不会影响音频在拓扑中的流动。 音频流经已绕过的元素,但未发生变化。

可选。

turn_on_delay zx/Duration

如果包含此属性,则表示驱动程序对元素硬件在 started 从 false 变为 true 后进入完全运行模式所需时间的最佳估计值。 例如,硬件可能需要一段时间才能在更改电源状态后达到完全运行模式。

如果不考虑 turn_on_delay,则在音频元素启动时,音频流的初始帧可能会丢失。如果未包含,则 turn_on_delay 未知。

可选。如果指定,则必须为非负数。

turn_off_delay zx/Duration

如果包含,则表示驱动程序对元素硬件在 started 从 true 变为 false 后进入完全停用模式所需时间的最佳估计。例如,硬件可能需要一段时间才能在电源状态发生变化后进入完全停止状态。

如果不考虑 turn_off_delay,则在音频元素断电时,发出的/捕获的帧数将超出客户端的预期。如果未包含,则 turn_off_delay 未知。

可选。如果指定,则必须为非负数。

processing_delay zx/Duration

如果包含,则表示驱动程序对相应处理元素(包括 bypassed 状态)当前配置所增加的延迟的最佳估计值。

时间敏感型客户端在确定(播放)最短提前时间和最短捕获延迟时间的要求时,应考虑此值。

对于 RING_BUFFER 类型的元素,此延迟不应包括进出环形缓冲区的数据复制所需的临时缓冲所添加的固有延迟,该延迟包含在 RingBufferProperties 字段 driver_transfer_bytes 中。

可选。如果指定,则必须为非负数。

均衡器

在 fuchsia.hardware.audio.signalprocessing/equalizer.fidl 中定义

Element 的参数,其中 type 等于 EQUALIZER。

序数字段类型说明
bands vector<EqualizerBand>:64

此协议中的均衡器由多个频段构建而成,每个频段在此处和 EqualizerElementState 中指定了多个可通过 SetElementState 更改的参数。bands 向量的元素数量决定了相应处理元素支持的频段数量。

必需。必须包含至少一个条目。

supported_controls EqualizerSupportedControls

此均衡器支持的控件(即可以通过 SetElementState 更改的控件)。

可选。

can_disable_bands bool

如果包含且为 true,则可以通过 SetElementState 停用各个频段。 如果不包含或为 false,则频段始终处于启用状态。 为了使均衡器频段正常工作,封装的均衡器处理元素也必须启动且不被绕过。

可选。

min_frequency uint32

所有频段的最低频率(以 Hz 为单位)。

必填。

max_frequency uint32

所有频段的最大频率(以 Hz 为单位)。

必填。

max_q float32

所有频段的最大品质因数(通常用“Q”表示)。 此参数用于指示频次过渡的窄度。Q 值越高,陷波/峰值越窄,切除/搁架越陡峭。必须为正值。

可选。如果指定,则必须是有限值。

min_gain_db float32

以分贝为单位的最小增益。

如果存在 supported_controls 且包含 SUPPORTS_TYPE_PEAK、SUPPORTS_TYPE_LOW_SHELF 或 SUPPORTS_TYPE_HIGH_SHELF,则为必需。必须是有限值。 否则为不允许。

max_gain_db float32

最大增益(以分贝为单位)。

如果存在 supported_controls 且包含 SUPPORTS_TYPE_PEAK、SUPPORTS_TYPE_LOW_SHELF 或 SUPPORTS_TYPE_HIGH_SHELF,则为必需。必须是有限值。 否则为不允许。

EqualizerBand

在 fuchsia.hardware.audio.signalprocessing/equalizer.fidl 中定义

均衡器频段的参数。

序数字段类型说明
id uint64

相应频段的唯一 ID。必须仅在相应的 Element 中具有唯一性。仅在与 SignalProcessing 协议关联的渠道关闭之前有效。

必填。

EqualizerBandState

在 fuchsia.hardware.audio.signalprocessing/equalizer.fidl 中定义

Element 中单个频段的状态,其中 type 等于 EQUALIZER。

序数字段类型说明
id uint64

频段的唯一 ID。必须与 Equalizer bands 中指定的某个 id 匹配。

必填。

type EqualizerBandType

频段类型。

必需。 如果这是对 SetElementState 的调用,则必须在 Element.supported_controls 中设置 type 的相应 SUPPORTS_TYPE_... EqualizerSupportedControls 位。

frequency uint32

频段的中心频率。

必需。 如果这是对 SetElementState 的调用,并且表示相应频段的频次发生了变化,则必须在 Element.supported_controls 中设置 CAN_CONTROL_FREQUENCY。

q float32

品质因数,通常表示为“Q”。 表示频次过渡的窄度。Q 值越高,陷波/峰值越窄,切/搁架越陡峭。必须为正值。

可选。 如果用于 SetElementState 且表示相应频段的 q 发生变化,则必须在 Element.supported_controls 中设置 CAN_CONTROL_Q。必须是有限值。

gain_db float32

增益(以分贝为单位)。

对于 PEAK、LOW_SHELF 和 HIGH_SHELF 的 EqualizerBandType,此参数为必需参数。必须是有限值。 不可用于 NOTCH、LOW_CUT 和 HIGH_CUT 的 EqualizerBandType。

enabled bool

启用/停用频段。 如果停用,音频仍会流经均衡器,但此频段不会产生任何影响。

如果 WatchElementState 的返回值中缺少相应频段,则启用该频段。 如果在 SetElementState 调用中省略,则频段的启用/停用状态保持不变。

绕过整个封装的处理元素(通过将 ElementState.bypassed 设置为 true)不会更改此字段的值,但为了使均衡器频段正常运行,其封装的均衡器处理元素必须既已启动又未被绕过。

可选。

EqualizerElementState

在 fuchsia.hardware.audio.signalprocessing/equalizer.fidl 中定义

Element 的状态,其中 type 等于 EQUALIZER。

序数字段类型说明
band_states vector<EqualizerBandState>:64

相应均衡器处理元素中各频段的状态。

band_states 向量的元素数量必须等于或小于相应 Equalizer 中返回的 bands 的元素数量。band_states 必须至少包含一个元素。 由 band_states 控制的频段由每个 band.id 确定。

必需。必须包含至少一个条目。

增益

在 fuchsia.hardware.audio.signalprocessing/gain.fidl 中定义

Element 的参数,其中 type 等于 GAIN。

序数字段类型说明
type GainType

指定增益的数字表示什么,例如百分比。

必填。

domain GainDomain

如果包含,则增益将应用于指定的 GainDomain。如果未包含,则增益网域未指定。

可选。

min_gain float32

GainType 格式的最小增益。

必需。必须是有限值。

max_gain float32

以 GainType 格式表示的最大增益。

必需。必须是有限值。

min_gain_step float32

增益步长的最小值,采用 GainType 格式,此值不得为负,但可以为零,以表示有效连续的值范围。不得超过 max_gain - min_gain。 客户端可以通过 WatchElementState 调用查询实际设置的增益。

必需。必须是有限值。

GainElementState

在 fuchsia.hardware.audio.signalprocessing/gain.fidl 中定义

Element 的状态,其中 type 等于 GAIN。

序数字段类型说明
gain float32

以 GainType 格式表示的当前增益。

必需。必须是有限值。

PlugState

在 fuchsia.hardware.audio.signalprocessing/dai_interconnect.fidl 中定义

互连的插头状态。 如果驱动程序报告的 plug_detect_capabilities 等于 HARDWIRED,则驱动程序应仅在首次针对给定互连调用 WatchElementState 时做出响应,并将 plugged 设置为 true,将 plug_state_time 设置为时间“0”。

序数字段类型说明
plugged bool

指示互连器当前是否已插好。

必需

plug_state_time zx/Time

指示当前 plugged 状态的设置时间,使用 ZX_CLOCK_MONOTONIC。 不能为负数。

必填。

SettableElementState

在 fuchsia.hardware.audio.signalprocessing/signal_processing.fidl 中定义

可由客户端设置的处理元素状态。

序数字段类型说明
type_specific SettableTypeSpecificElementState

可由客户端设置的特定于类型的元素状态参数。

如果某个元素处于停用状态,则此字段(以及 SettableElementState 中的所有其他字段)中的更改仅用于提供信息,并且在启用该元素之前不会生效。

如果未设置,则保留元素之前的 type_specific 状态。

对于 DYNAMICS、EQUALIZER、GAIN 和 VENDOR_SPECIFIC 类型,此参数为可选参数。 如果为 AUTOMATIC_GAIN_CONTROL、AUTOMATIC_GAIN_LIMITER、CONNECTION_POINT、DAI_INTERCONNECT、DELAY、MUTE、PACKET_STREAM、RING_BUFFER 或 SAMPLE_RATE_CONVERSION 元素指定,则无效。

vendor_specific_data vector<uint8>:4096

如果包含,则为用于将供应商特定信息从客户端传送到音频驱动程序的八位字节不透明对象。 此元素可与任何元素类型搭配使用,而不仅仅是 VENDOR_SPECIFIC 元素。

可选。

新增:27
started bool

是否启动或停止此处理元素。 已停止的处理元素不提供其抽象功能。 具体而言,没有音频数据会流经已停止的元素。

如果相应 Element 返回的 can_stop 等于 false,则不得将此字段设置为 false,否则 SetElementState 将返回 ZX_ERR_INVALID_ARGS。 如果未设置,则元素之前的 started 状态将保持不变。

可选。

bypassed bool

是否绕过此处理元素。 被绕过的元素不会影响音频在拓扑中的流动。 具体来说,音频会通过被绕过的元素,而不会发生变化。

如果对应的 Element 省略了 can_bypass 或将其设置为 false,则不得将此字段设置为 true。如果发生这种情况,SetElementState 将失败并返回错误 ZX_ERR_INVALID_ARGS。如果未设置,则元素之前的 bypassed 状态将保持不变。

可选。

拓扑学

在 fuchsia.hardware.audio.signalprocessing/signal_processing.fidl 中定义

Topology 用于指定处理元素在硬件中的排列方式。

序数字段类型说明
id TopologyId

相应拓扑的唯一 ID。此 ID 的范围仅限于 SignalProcessing 协议的生命周期内,即直到与该协议关联的渠道关闭为止。

必填。

processing_elements_edge_pairs vector<EdgePair>:64

处理元素边对的向量,用于指定元素之间的连接。 处理元素通过边对连接,形成多元素流水线。一个拓扑可以包含多个不同的流水线:拓扑不必是单个互连序列(例如,拓扑 A->B->C D->E->F 是有效的)。

如需定义多个可能的配置,以便客户端可以选择其中一种,请在 GetTopologies 中返回多个 Topology 条目。

如果设备支持多个拓扑条目,则每个特定拓扑不必包含每个元素。不过,每个元素都必须包含在至少一个拓扑中。

在每个拓扑中,每个连接元素的序列都必须以 DAI_INTERCONNECT、RING_BUFFER 或 PACKET_STREAM 类型的元素开头,并以 DAI_INTERCONNECT、RING_BUFFER 或 PACKET_STREAM 类型的元素结尾。

DAI_INTERCONNECT 元素可以开始或结束元素序列,但 RING_BUFFER 或 PACKET_STREAM 必须开始或结束元素序列。如果某个 RING_BUFFER 或 PACKET_STREAM 元素在 EdgePair 中被列为 processing_element_id_from,则在相应拓扑中,同一元素不得在另一个 EdgePair 中被列为 processing_element_id_to(反之亦然)。

作为一种特殊情况,DAI_INTERCONNECT 元素可以引用自身;也就是说,EdgePair 可能包含相等的 processing_element_id_from 和 processing_element_id_to 值。不过,此元素不得还连接到拓扑中的其他元素(此 EdgePair 必须是 processing_elements_edge_pairs 中唯一提及该元素的 EdgePair)。

必需。必须包含至少一个条目。

VendorSpecific

在 fuchsia.hardware.audio.signalprocessing/vendor_specific.fidl 中定义

Element 的参数,其中 type 等于 VENDOR_SPECIFIC。

序数字段类型说明

VendorSpecificState

在 fuchsia.hardware.audio.signalprocessing/vendor_specific.fidl 中定义

Element 的状态,其中 type 等于 VENDOR_SPECIFIC。

序数字段类型说明

UNIONS

Reader_GetElements_Result strict

在 fuchsia.hardware.audio.signalprocessing/signal_processing.fidl 中定义

序数变体类型说明
response Reader_GetElements_Response
err zx/Status

Reader_GetTopologies_Result strict

在 fuchsia.hardware.audio.signalprocessing/signal_processing.fidl 中定义

序数变体类型说明
response Reader_GetTopologies_Response
err zx/Status

Reader_WatchTopology_Result strict

在 fuchsia.hardware.audio.signalprocessing/signal_processing.fidl 中定义

序数变体类型说明
response Reader_WatchTopology_Response
framework_err internal

SettableTypeSpecificElementState 灵活

在 fuchsia.hardware.audio.signalprocessing/signal_processing.fidl 中定义

可由客户端设置的特定于类型的处理元素状态。 处理元素控制的类型由相应联合中提供的参数类型定义。此特定于类型的变体必须与相应 Element 中的 ElementType 条目相匹配。

序数变体类型说明
vendor_specific VendorSpecificState
gain GainElementState
equalizer EqualizerElementState
dynamics DynamicsElementState

SignalProcessing_SetElementState_Result 严格

在 fuchsia.hardware.audio.signalprocessing/signal_processing.fidl 中定义

序数变体类型说明
response SignalProcessing_SetElementState_Response
err zx/Status

SignalProcessing_SetTopology_Result 严格

在 fuchsia.hardware.audio.signalprocessing/signal_processing.fidl 中定义

序数变体类型说明
response SignalProcessing_SetTopology_Response
err zx/Status

TypeSpecificElement 灵活

在 fuchsia.hardware.audio.signalprocessing/signal_processing.fidl 中定义

Element 的特定于类型的参数。

序数变体类型说明
vendor_specific VendorSpecific
gain Gain
equalizer Equalizer
dynamics Dynamics
dai_interconnect DaiInterconnect

TypeSpecificElementState flexible

在 fuchsia.hardware.audio.signalprocessing/signal_processing.fidl 中定义

驱动程序返回的特定于类型的处理元素状态。 处理元素控制的类型由相应联合中提供的参数类型定义。此特定于类型的变体必须与相应 Element 中的 ElementType 条目相匹配。

序数变体类型说明
vendor_specific VendorSpecificState
gain GainElementState
equalizer EqualizerElementState
dynamics DynamicsElementState
dai_interconnect DaiInterconnectElementState

BITS

DynamicsSupportedControls 灵活

类型:uint64

在 fuchsia.hardware.audio.signalprocessing/dynamics.fidl 中定义

Dynamics 支持的控件。 如果包含,则可以使用 SetElementState 更改表示动态处理频段参数的每个位。

名称值说明
1

如果已设置,SetElementState 可以更改动态频段的 knee_width_db 参数。

2

如果已设置,SetElementState 可以更改动态频段的 attack 参数。

4

如果已设置,SetElementState 可以更改动态频段的 release 参数。

8

如果已设置,SetElementState 可以更改动态频段的 output_gain_db 参数。

16

如果已设置,SetElementState 可以更改动态频段的 input_gain_db 参数。

32

如果已设置,SetElementState 可以更改动态频段的 lookahead 参数。

64

如果已设置,SetElementState 可以更改动态频段的 level_type 参数。

128

如果已设置,SetElementState 可以更改动态频段的 linked_channels 参数。

256

如果已设置,SetElementState 可以更改动态频段的 threshold_type 参数。

EqualizerSupportedControls 灵活

类型:uint64

在 fuchsia.hardware.audio.signalprocessing/equalizer.fidl 中定义

Equalizer 中指定的均衡器支持的控制变量。

名称值说明
1

如果已设置,SetElementState 可以更改均衡器频段的 frequency。

2

如果已设置,SetElementState 可以更改均衡器频段的 q。

4

如果设置了此值,SetElementState 可以将频段的 type 更改为 EqualizerBandType.PEAK。

8

如果设置了此值,SetElementState 可以将频段的 type 更改为 EqualizerBandType.NOTCH。

16

如果设置了此值,SetElementState 可以将频段的 type 更改为 EqualizerBandType.LOW_CUT。

32

如果设置了此值,SetElementState 可以将频段的 type 更改为 EqualizerBandType.HIGH_CUT。

64

如果设置,SetElementState 可以更改频段的 type EqualizerBandType.LOW_SHELF。

128

如果设置了此值,SetElementState 可以将频段的 type 更改为 EqualizerBandType.HIGH_SHELF。

常量

名称值类型说明
MAX_BYTES_ELEMENT_VENDOR_SPECIFIC 4096 uint32
新增:27
MAX_COUNT_DYNAMICS_BANDS 64 uint32
MAX_COUNT_EQUALIZER_BANDS 64 uint32
MAX_COUNT_PROCESSING_ELEMENTS 64 uint32
MAX_COUNT_PROCESSING_ELEMENTS_EDGE_PAIRS 64 uint32
MAX_COUNT_TOPOLOGIES 64 uint32
MAX_STRING_SIZE 256 uint32

别名

名称值说明
ElementId uint64
TopologyId uint64

服务

ConnectorService

在 fuchsia.hardware.audio.signalprocessing/connector.fidl 中定义

名称类型传输
连接器 fuchsia.hardware.audio.signalprocessing/Connector 渠道