协议
处理器
在 fuchsia.audio.effects/processor.fidl 中定义
音效处理器。使用一个或多个输入流,生成一个或多个输出流。创建后,此协议必须与定义处理器的输入和输出流的 fuchsia.audio.effects.Processor/ProcessorConfiguration 相关联。
处理
处理给定数量的帧。这将消耗每个 ProcessorConfiguration.inputs[i]
中的 num_frames
,并在每个 ProcessorConfiguration.outputs[i]
中生成相同数量的帧。
执行模型
所有输入和输出都必须具有相同的帧速率。这简化了匹配输入和输出帧的问题,如下所述。
在每次调用 Process
时,该效应都会从一组输入缓冲区收集音频,并生成一组输出缓冲区。输入缓冲区应按时间对齐。这意味着:每个输入缓冲区中第一帧 input[i].buffer[0] 的呈现时间应与所有其他帧 input[j].buffer[0] 具有相同的呈现时间。
具有非零延迟时间的输出缓冲区可能会相对于输入缓冲区进行偏移。对于每个输出 k,输入帧 0 的呈现时间与 output[k].buffer[output[k].latency_frames] 处的帧相同。
- 请求
num_frames
要处理的帧数。 - 请求
options
额外的选项。
-
响应
per_stage_metrics
关于此进程调用的指标,可能细分为多个阶段。
- error 表示成功或失败的 zx.Status 值。
请求
名称 | 类型 |
---|---|
num_frames |
uint64
|
options |
ProcessOptions
|
回复
名称 | 类型 |
---|---|
payload |
Processor_Process_Result
|
ProcessorCreator
在 fuchsia.audio.effects/creator.fidl 中定义
用于创建处理器的工厂。
创建
创建一个新处理器并返回其 ProcessorConfiguration。
- request
name
:用于为要创建的处理器命名的字符串。此名称的含义由实现者决定。
- 响应
processor_configuration
新处理器的说明。
- error 表示成功或失败的 zx.Status 值。
请求
名称 | 类型 |
---|---|
name |
string[1024]
|
回复
名称 | 类型 |
---|---|
payload |
ProcessorCreator_Create_Result
|
结构
ProcessorCreator_Create_Response 资源
在 fuchsia.audio.effects/creator.fidl 中定义
字段 | 类型 | 说明 | 默认 |
---|---|---|---|
processor_configuration |
ProcessorConfiguration
|
无默认值 |
Processor_Process_Response
在 fuchsia.audio.effects/processor.fidl 中定义
字段 | 类型 | 说明 | 默认 |
---|---|---|---|
per_stage_metrics |
vector<ProcessMetrics>[8]
|
无默认值 |
表格
InputConfiguration 资源
在 fuchsia.audio.effects/processor.fidl 中定义
配置单个输入流。
序数 | 字段 | 类型 | 说明 |
---|---|---|---|
1 |
format |
fuchsia.mediastreams/AudioFormat
|
此输入流的格式。 必选。 |
2 |
buffer |
fuchsia.mem/Range
|
此输入流的缓冲区。必须提供写入权限,并且必须有足够的空间来存储 必选。 |
OutputConfiguration 资源
在 fuchsia.audio.effects/processor.fidl 中定义
配置单个输出流。
序数 | 字段 | 类型 | 说明 |
---|---|---|---|
1 |
format |
fuchsia.mediastreams/AudioFormat
|
此输出流的格式。 必选。 |
2 |
buffer |
fuchsia.mem/Range
|
此输出流的缓冲区。必须提供写入权限,并且必须有足够的空间来存储 如果效果支持就地更新,则可能表示与输入缓冲区相同的内存范围。 必选。 |
3 |
latency_frames |
uint64
|
如果指定,则输出信号会偏移这么多帧。
如果未指定,则为零。
请参阅 |
4 |
ring_out_frames |
uint64
|
如果指定,则输入帧 F 将影响上行到帧 F + 换言之,如果给效果一个输入流包含 N 个非静默帧,后跟无限静音,该效应最多生成 N + |
进程指标
在 fuchsia.audio.effects/processor.fidl 中定义
关于单个 Processor.Process 调用的可扩展指标容器。 所有字段均为选填字段。
序数 | 字段 | 类型 | 说明 |
---|---|---|---|
1 |
name |
string[64]
|
每个进程调用可以(可选)分为多个阶段,每个阶段都有自己的 ProcessMetrics。此字段会命名此表中所述的阶段。 |
2 |
wall_time |
zx/Duration
|
从收到 Process 调用到返回响应的总挂钟时间。 |
3 |
cpu_time |
zx/Duration
|
在 CPU 上运行所花费的总时间。 请参阅 zx_info_task_runtime.cpu_time。 |
4 |
queue_time |
zx/Duration
|
等待运行所花费的总时间。仅计算“就绪”时间。 请参阅 zx_info_task_runtime.queue_time。 |
5 |
page_fault_time |
zx/Duration
|
处理页面故障所花费的总时长。 请参阅 zx_info_task_runtime.page_fault_time。 |
6 |
kernel_lock_contention_time |
zx/Duration
|
等待争用的内核锁所花费的总时间。 请参阅 zx_info_task_runtime.lock_contention_time。 |
ProcessOptions
在 fuchsia.audio.effects/processor.fidl 中定义
包含 Processor.Process 选项的可扩展容器。
序数 | 字段 | 类型 | 说明 |
---|---|---|---|
1 |
total_applied_gain_db_per_input |
vector<float32>[8]
|
由先前处理步骤应用于每个输入流的总增益。例如,假设音频管道的格式为“input -> ProcessorA -> ProcessorB,如果输入是具有统一振幅的正弦波,并且 ProcessorA 应用的增益为 -5.0dB,则应在调用 ProcessorB 时指定 total_applied_gain_db_per_input[0] = -5.0dB,包含 a-5.0dB 的缓冲区。 如果未指定,则每个输入的应用增益为 0 dB。 |
2 |
usage_mask_per_input |
vector<uint32>[8]
|
对每个输入流做出贡献的所有 fuchsia.media.AudioRenderUsages。对于提供的每个 AudioRenderUsage,这是一个 (1 << r) 的位掩码。例如,如果输入流包含 BACKGROUND (== 0) 和 INTERRUPTION (== 2),则位掩码为 ((1<<0)|(1<<2)) = 0x5。 注意:改用新的 Fuchsia 媒体 API 后,此字段可能会移除。 |
ProcessorConfiguration 资源
在 fuchsia.audio.effects/processor.fidl 中定义
配置处理器。
序数 | 字段 | 类型 | 说明 |
---|---|---|---|
1 |
processor |
Processor
|
此处理器的专用 FIDL 通道。 必选。 |
2 |
inputs |
vector<InputConfiguration>[8]
|
此处理器的所有输入流的说明。 必须至少包含一个输入。 每个输入流都可以具有不同的样本格式或通道数,但所有输入都必须具有相同的帧速率。 |
3 |
outputs |
vector<OutputConfiguration>[8]
|
有关此处理器的所有输出流的说明。 必须至少有一个输出。 每个输出流都可以具有不同的样本格式或通道数,但所有输出都必须与输入具有相同的帧速率 - 只要帧速率不变,音效就可以执行样本格式转换和重新通道化。 |
4 |
max_frames_per_call |
uint64
|
每次调用 fuchsia.audio.effects/Processor.Process 可以处理的帧数上限。默认限制是最小输入缓冲区可以容纳的帧数。如果指定,则该上限必须小于默认上限。 |
5 |
block_size_frames |
uint64
|
如果指定,则对 fuchsia.audio.effects/Processor.Process 的所有调用都必须将 |
联合
ProcessorCreator_Create_Result 严格 资源
在 fuchsia.audio.effects/creator.fidl 中定义
序数 | 变体 | 类型 | 说明 |
---|---|---|---|
1 |
response |
ProcessorCreator_Create_Response
|
|
2 |
err |
zx/Status
|
Processor_Process_Result 严格
在 fuchsia.audio.effects/processor.fidl 中定义
序数 | 变体 | 类型 | 说明 |
---|---|---|---|
1 |
response |
Processor_Process_Response
|
|
2 |
err |
zx/Status
|
常量
名称 | 值 | 类型 | 说明 |
---|---|---|---|
MAX_INPUT_STREAMS |
8
|
uint32 |
输入和输出流的数量上限。 这些边界有点随意;在实践中,在绝大多数情况下,我们预计不超过 1 个或 2 个输入和输出。 |
MAX_OUTPUT_STREAMS |
8
|
uint32 |
|
MAX_PROCESS_STAGES |
8
|
uint32 |
per_stage_metrics 数组的大小上限。 |
MAX_PROCESS_STAGE_NAME_LENGTH |
64
|
uint32 |
进程阶段名称的最大长度。 |