29个发布版本
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日 |
#15 in #digital-signal-processing
322每月下载量
在 49 个crate中使用 (37 个直接使用)
260KB
4K SLoC
surge-tables
SurgeTables:Surge合成器系统的波形变换和包络工具
SurgeTables是一个Rust包,提供了用于Surge合成器系统的各种波形变换、包络和sinc表。它包括生成和访问表以及支持合成操作的数学函数的实用程序。
SurgeTables
SurgeTables是Surge合成器系统中使用的表和实用程序集合,支持各种波形变换、包络和sinc操作。该包分为几个子组件,每个组件都专注于声音合成的特定方面。
SineTables
SineTables包含合成过程中高效查找的预计算正弦波值。这些正弦波值存储在不同的格式中,例如 f32
、f64
和 i16
。
WaveshapeTables
WaveshapeTables提供用于波形变换合成的表和实用程序。波形变换是一种非线性失真技术,用于修改信号的谐波内容。它支持如 lookup_waveshape
和 lookup_waveshape_warp
等函数来访问这些表并应用所需的变换。
GainTables
GainTables提供在分贝(dB)和线性尺度之间转换的实用程序,以及应用于音频信号的削波和缩放函数。例如,db_to_linear
函数将分贝值转换为相应的线性增益值。
linear_gain = 10^(dB/20)
EnvelopeTables
EnvelopeTables提供处理合成器中线性包络和低通滤波(LPF)包络速率的表和函数。envelope_rate_linear
和 envelope_rate_lpf
函数提供控制这些速率的实用程序。
SincTables
SincTables包含用于窗口sinc函数的表和实用程序,这些函数用于重采样和其他信号处理任务。windowed_sinc
函数生成由指定窗口函数窗口化的sinc函数。
windowed_sinc(x) = sinc(x) * window_function(x)
其中 sinc(x) = sin(πx) / (πx)
对于 x ≠ 0
,并且 sinc(0) = 1
。
MaybeOwningTablesHandle 和 TablesHandle
这些类型提供了方便的方式来处理和管理由crate中的各种子组件创建的表的生命周期。
使用 SurgeTables,用户可以高效地访问和操作各种表和数学函数,以支持Surge合成器系统中的波形整形、包络和sinc操作。
2> /file surge-rs/surge-tables/src/envelope.rs
EnvelopeTables
-
这个表是用作什么?
EnvelopeTables
结构体包含两个表:table_envrate_lpf
和table_envrate_linear
。这些表用于在Surge合成器系统中高效查找包络速率。包络速率决定了包络如何快速通过其各个阶段(攻击、衰减、持续、释放),这对于塑造合成声音的幅度和音色至关重要。 -
预计算涉及哪些计算?
预计算涉及计算两个表
-
table_envrate_lpf
:这个表包含与低通滤波(LPF)包络速率相关的值。预计算涉及基于采样率的指数衰减计算以及二进制幂映射。 -
table_envrate_linear
:这个表包含与线性包络速率相关的值。预计算涉及基于采样率的简单除法和二进制幂映射。
-
-
我们节省了多少性能?
通过预计算这些包络速率值并将它们存储在表中,我们避免了在合成过程中实时重新计算这些值的需求。这可以导致显著的性能提升,尤其是在处理复杂的合成器补丁和多声部时。
-
我们如何改进这个表?
对
EnvelopeTables
的可能改进包括-
插值:当前实现使用线性插值来访问表值。其他插值方法,如三次或样条插值,可能会以增加复杂性的代价提供更准确的结果。
-
自适应表大小:当前实现使用512的固定表大小。允许用户定义表大小可以使得用户能够根据其特定需求平衡内存使用和查找精度。
-
替代预计算方法:探索在预计算步骤中生成包络速率值的不同方法可能导致更准确或更快的成果。这可能涉及使用不同的数学近似或算法进行指数衰减和线性速率计算。
-
3> /file surge-rs/surge-tables/src/gain.rs
GainTables
-
这个表是用作什么?
GainTables
结构体包含一个名为table_db
的表,该表用于高效地在分贝(dB)和线性刻度之间进行转换。这对于涉及增益、衰减或其他涉及对数刻度的操作非常有用。该表还提供了一个clipscale
函数来计算根据滤波器子类型(粗糙或平滑)的缩放因子。 -
预计算涉及哪些计算?
预计算涉及计算单个表
table_db
:该表包含将分贝值转换为线性增益值的数值。预计算包括使用以下公式计算给定dB值的线性增益:linear_gain = 10^(0.05 * (dB - 384))
。
-
我们节省了多少性能?
通过预先计算这些分贝到线性增益值并将它们存储在表中,我们通过避免在合成过程中实时重新计算这些值来节省性能。这可以导致明显的性能提升,尤其是在处理需要频繁在分贝和线性尺度之间转换的音频信号时。
-
我们如何改进这个表?
对
GainTables
的一些可能的改进包括-
插值:当前实现使用线性插值来访问表值。其他插值方法,如三次或样条插值,可能会以增加复杂性的代价提供更准确的结果。
-
自适应表大小:当前实现使用512的固定表大小。允许用户定义表大小可以使得用户能够根据其特定需求平衡内存使用和查找精度。
-
额外的增益相关函数:将
GainTables
结构体扩展以包含其他与增益相关的函数,例如线性到分贝的转换或不同类型的增益缩放,可以使表更灵活,对更广泛的音频处理任务更有用。
-
4> /file surge-rs/surge-tables/src/sinc.rs
SincTables
-
这个表是用作什么?
SincTables
结构体包含三个表:table
、table_1x
和table_i16。这些表存储预先计算的窗口 sinc 函数值,这些值在数字信号处理中常用,尤其是在插值和重采样任务中。通过预先计算这些值,
SincTables
可以在实时音频处理中执行高效的插值。 -
预计算涉及哪些计算?
预计算包括以下三个表的计算
-
table
:该表存储特定截止频率cutoff
的窗口 sinc 函数值。 -
table_1x
:该表存储不同截止频率cutoff1x
的窗口 sinc 函数值。 -
table_i16
:该表存储另一个截止频率cutoff_i16
的窗口 sinc 函数值,但以16位整数格式存储。
预计算使用以下步骤计算窗口 sinc 函数值
-
使用
get_table_t
函数计算每个表条目的时间t
。 -
使用
windowed_sinc
函数计算窗口 sinc 函数值,该函数涉及对称 Blackman 窗口和给定截止频率的 sinc 函数的乘积。 -
将计算出的值存储在相应的表中。
-
-
我们节省了多少性能?
通过预先计算窗口 sinc 函数值并将它们存储在表中,可以显著提高实时音频处理任务(如插值和重采样)的性能。这是因为避免了在实时处理期间进行昂贵的 sinc 和 Blackman 窗口计算,并且可以从表中快速访问预先计算的值。
-
我们如何改进这个表?
对
SincTables
的一些可能的改进包括-
自适应表大小:允许用户定义表的大小可以使得用户根据他们的特定需求平衡内存使用和查找精度。
-
额外的插值方法:将
SincTables
结构体扩展以包含其他插值方法可以使表更灵活,对更广泛的音频处理任务更有用。 -
优化 sinc 和窗口函数:当前实现使用标准的 Blackman 窗口和 sinc 函数计算窗口 sinc 值。这些函数的优化版本,如在专用库中找到的版本,可能有助于提高表的精度或性能。
-
5> /file surge-rs/surge-tables/src/sine.rs
SineTables
-
这个表是用作什么?
SineTables
结构体包含两个表:table_sin
和table_sin_offset
。这些表存储了预计算的正弦函数值及其对应的偏移量。通过预计算这些值,SineTables
可以用于实时音频处理中的高效三角函数计算,例如振荡和频率调制。 -
预计算涉及哪些计算?
预计算涉及计算两个表
-
table_sin
:该表存储了从 0 到 2π 的角度的正弦函数值,均匀分布,步长为 2π /SIN_TABLE_SIZE_D
。 -
table_sin_offset
:该表存储了table_sin
中连续正弦函数值之间的差值。
预计算使用以下步骤计算正弦函数值及其偏移量
-
计算每个表条目的角度
t
,为 2π * (i /SIN_TABLE_SIZE_D
),其中 i 是条目的索引。 -
计算正弦函数值
sin(t)
并将其存储在table_sin
中。 -
计算正弦函数值 `sin(t
- 2π / SIN_TABLE_SIZE_D)
并存储此值与
sin(t)的差值
table_sin_offset`。
- 2π / SIN_TABLE_SIZE_D)
-
-
我们节省了多少性能?
通过预计算正弦函数值及其偏移量并将它们存储在表中,可以显著提高涉及三角函数计算的实时音频处理任务的性能。这是因为避免了实时处理过程中的计算密集型正弦计算,并且可以快速从表中访问预计算的值。
-
我们如何改进这个表?
对
SineTables
的可能改进包括-
自适应表大小:允许用户定义表的大小可以使得用户根据他们的特定需求平衡内存使用和查找精度。
-
额外的三角函数:将
SineTables
结构体扩展以包括其他三角函数,如余弦或正切,可以使表更加通用并适用于更广泛的音频处理任务。 -
优化正弦函数计算:当前实现使用标准正弦函数计算正弦值。这些函数的优化版本,如在专用库中找到的,可能有助于提高表的确切性或性能。
-
6> /file surge-rs/surge-tables/src/waveshape.rs
WaveshapeTables
-
这个表是用作什么?
WaveshapeTables
结构体包含一个预计算的波整形函数值的表,可用于在实时音频处理中快速修改音频波形的形状。通过使用这些预计算的值,可以显著提高涉及波整形处理的音频处理任务的性能。 -
包括哪些波整形函数?
WaveshapeTables
结构体包含五个不同的波整形函数的预计算值-
wst_tanh
:双曲正切函数。 -
wst_hard
:基于 x 的绝对值的五次幂的硬裁剪函数,随后是双曲正切和 0.2 的幂。 -
wst_asym
:使用“shafted_tanh”函数的非对称波整形函数,该函数偏移了 0.5。 -
wst_sine
:正弦函数。 -
wst_digi
:使用不同缩放因子的双曲正切函数的数字式波整形函数。
-
-
我们节省了多少性能?
通过预计算波整形函数值并将它们存储在表中,可以显著提高涉及波整形的实时音频处理任务的性能。这是因为避免了实时处理过程中的计算密集型波整形函数计算,并且可以快速从表中访问预计算的值。
-
我们如何改进这个表?
对
WaveshapeTables
的可能改进包括-
自适应表大小:允许用户定义表的大小可以使得用户根据他们的特定需求平衡内存使用和查找精度。
-
额外的波整形函数:将
WaveshapeTables
结构体扩展以包括更多波整形函数可以使表更加通用并适用于更广泛的音频处理任务。 -
优化波形整形函数计算:当前实现使用标准函数计算波形整形函数的值。这些函数的优化版本,例如在专业库中找到的版本,可能会提高表格的准确性或性能。
-
插值:在表项之间实现插值可以提高使用查找方法时波形整形函数的准确性。
-
依赖关系
~11-20MB
~296K SLoC