31个版本
0.2.12-alpha.0 | 2023年4月7日 |
---|---|
0.2.11-alpha.0 | 2022年12月19日 |
0.2.5-alpha.0 | 2022年6月21日 |
0.2.4-alpha.0 | 2022年3月14日 |
0.1.42-alpha.0 | 2021年10月27日 |
#34 in #合成
358 每月下载量
在 61 个crate中使用 (直接使用31个)
185KB
3K SLoC
surge-param
surge-param
crate提供了一组参数类型和相关函数,可用于实现参数化的合成和处理算法。该crate的主要目标是实现灵活、表现力丰富、可定制的软件合成器和音频效果。
ParamType
ParamType
trait定义了参数的通用接口,用户或其他合成器组件可以实时控制和操作这些参数。该trait提供了一系列方法来获取和设置参数值、显示参数信息等。
ControlStyle
ControlStyle
枚举描述了用于操作参数的控制类型。这可以包括旋钮、滑块、按钮或任何其他可以用来操作值的输入设备。
ParamRT
ParamRT
结构体提供了参数更新和修改的实时支持。这包括处理参数自动化的方法,以及获取和设置参数值的功能。
ParameterMeta
ParameterMeta
结构体定义了与参数相关的元数据,例如参数的名称、描述和默认值。
Error
Error
枚举包含了一组在处理参数时可能发生的错误类型。
Output
Output
结构体表示参数输出,可用于将参数值输出到合成器的其他组件或外部软件。
PData
PData
结构体用于存储参数数据。
ParamUserData
ParamUserData
结构体用于存储与参数关联的用户数据。
sub
sub
模块包含了一组与参数操作和处理相关的函数和类型。
try_into
try_into
模块提供了一组函数,用于在不同参数类型之间进行转换。
ControlGroupEntry
ControlGroupEntry
结构体定义了控制组中的一个条目,控制组是一组可以一起控制的关联参数的集合。
bound_value
函数 bound_value
用于将一个值限制在一定范围内。
limit_range
函数 limit_range
用于将参数的范围限制在特定的范围内。
normalized2value
函数 normalized2value
将归一化的参数值转换为实际世界的值。
value2normalized
函数 value2normalized
将实际世界的参数值转换为归一化值。
43> 感谢——我们有哪些类型的参数?
surge-param
包定义了几种可用于操纵合成器或其他音频处理系统产生的声音的参数类型。以下是一些主要参数类型:
-
可调制:这些参数可以被LFO、包络或其它调制源调制。标志
modulateable
指示参数是否可以被调制。 -
形态:这些参数可以在不同的值或设置之间进行变化。函数
morph
和morph_alt
允许在参数值之间进行插值。 -
吸附:这些参数可以吸附到特定的值或一组离散值。函数
snap
允许将参数值吸附到最近的吸附值。 -
扩展范围:这些参数可以将其范围扩展到初始限制之外。函数
extend_range
允许设置参数的新最小值和最大值。 -
节拍同步:这些参数可以与特定的节拍或拍子同步。标志
can_temposync
指示参数是否可以节拍同步,函数tempo_sync_notation_value
允许获取参数的节拍同步值。 -
控制类型:这些参数具有特定的控制类型,例如旋钮、推子或按钮。函数
control_type
允许获取参数的控制类型。 -
控制样式:这些参数具有特定的控制样式,例如线性或对数。函数
control_style
允许获取参数的控制样式。 -
控制组:这些参数属于特定的控制组,可用于将参数组织到逻辑组中。函数
control_group
允许获取参数的控制组。 -
影响其它参数:这些参数可以影响其它参数的值。标志
affect_other_parameters
指示参数是否可以影响其它参数。
44> 我们有哪些控制样式?
ControlStyle
枚举在 surge-param
包中定义了参数的几种可能的控制样式。这些样式有:
-
Direct
:这种控制样式允许参数直接设置,而不需要任何额外的处理或调制。这是最简单的控制样式。 -
DirectWithModulation
:这种控制样式允许参数被调制,但仅由与参数相关联的固定调制源调制。 -
DirectWithModulationMultiplier
:这种控制样式与DirectWithModulation
类似,但允许通过另一个控制来缩放调制量。 -
双极性
:这种控制样式允许使用双极性值设置参数,即可以是正数或负数的值。这对于控制围绕零的值范围的参数很有用,例如声像控制。 -
双极性调制
:这种控制样式与直接调制
类似,但允许双极性调制。 -
双极性调制倍数
:这种控制样式与直接调制倍数
类似,但允许双极性调制。 -
二极
:这种控制样式允许使用二极值设置参数,即可以是正数或负数,并且有定义的最大绝对值。这对于控制有限幅度的值范围的参数很有用,例如滤波器截止频率。 -
二极调制
:这种控制样式与直接调制
类似,但允许二极调制。 -
二极调制倍数
:这种控制样式与直接调制倍数
类似,但允许二极调制。 -
枚举
:这种控制样式允许使用离散的值集设置参数。这对于具有有限有效值集的参数很有用,例如波形选择器。 -
枚举调制
:这种控制样式与直接调制
类似,但允许枚举参数的调制。 -
枚举调制倍数
:这种控制样式与直接调制倍数
类似,但允许枚举参数的调制。
45> 很有趣——谢谢!我们还需要了解Surge中参数的哪些内容?
以下是关于Surge中参数的额外信息:
-
参数可以用于广泛的任务,而不仅仅是简单地控制音频合成,包括控制MIDI输出、控制可视化等。
-
Surge允许用户使用
ParamType
枚举创建自定义参数类型,从而实现对参数行为的精细控制。 -
Surge中的参数可以使用多种调制源实时调制,包括LFO、包络和MIDI CC消息。
-
Surge中的参数系统旨在非常灵活和可扩展,使用户能够轻松创建和操作用于其项目中的复杂参数结构。
-
Surge还包括一些内置工具来处理参数,包括设置参数值平滑和智能的函数,以及同步参数到MIDI时钟或其他时间源的工具。
-
最后,Surge提供了一个强大的预设系统,使用户能够存储和调用特定的参数设置,使得在多个项目中保存和重用特定的声音配置变得容易。
46> 参数的运行时数据与编译时数据有什么区别?我们可以在编译时了解有关参数的哪些内容?关于在运行时不可用的参数我们可以了解哪些内容?
在软件开发中,编译时指的是编译器将源代码编译成机器代码的时间。相比之下,运行时指的是编译后的机器代码由计算机执行的时间。
在Surge的上下文中,某些参数方面可以在编译时确定,而其他方面仅在运行时才知道。
在编译时,我们可以知道参数的数据类型、名称、默认值、最小值和最大值以及与参数关联的控制样式。这些通常在代码中参数的struct或enum定义中定义。
在运行时,我们可以了解参数的当前值、是否被任何调制源所调制,以及任何影响参数的MIDI或OSC消息。这些参数方面由软件的状态和用户与之的交互决定。
一般来说,编译时数据是静态和固定的,而运行时数据是动态的,可以频繁变化。
47> 我们在这两个类别中还能了解什么其他信息?
在编译时,我们可以了解参数的静态信息,如其名称、显示信息、默认值、控制样式和允许的值范围。这些信息是固定的,可以在不运行代码的情况下访问。
在运行时,我们可以了解参数的动态信息,如当前值、调制值和自动化状态。这些信息在程序执行期间可以改变,并且可以使用参数API提供的各种方法进行访问和更新。
48> 运行时一个参数需要多少内存?
参数在运行时所占用的内存量取决于具体实现和用于该参数的数据类型。在 surge-param
框架中,用于表示运行时参数的 ParamRT
结构体存储了几个字段,包括参数的当前值、调制值和调制速率,以及各种标志和元数据。这个结构体的大小将取决于每个字段所使用的数据类型,以及由目标架构指定的任何填充或对齐要求。
一般来说,参数使用的内存量将取决于其数据类型、系统中使用的参数数量以及系统的总体内存需求。在任何软件系统中仔细管理内存使用,并避免不必要的内存分配或数据复制是很重要的。
依赖关系
~11–21MB
~296K SLoC