8个重大版本

0.9.0 2022年10月23日
0.8.0 2022年2月4日
0.7.0 2021年1月17日
0.6.0 2020年12月30日
0.2.0 2018年8月16日

#287 in 音频


用于 wavy

Apache-2.0 OR BSL-1.0 OR MIT

56KB
806

Twang

纯Rust高级音频合成库。

目标

  • 快速:自动向量化音频合成。
  • 纯Rust:无需std之外的系统依赖。

将提供每个示例的实现链接。

  • 加性合成(组合声音,通常为正弦波 - 与FFT一起用于分析和重合成)
  • 减性合成(用滤波器塑造包含奇偶频率的锯齿波)
  • 频率调制合成(用波形调制频率)
    • 相位调制(PM)合成 - 一种用于流行1980年代合成器的FM实现
  • 相位失真合成(在共振频率处将反频率计数器乘以正弦波:频率计数器在基频结束处重新开始/重置)
  • 物理建模合成(Karplus-Strong算法,其他基于d'Alembert算法的数字波导合成)
  • 基于样本/查找表合成(用于MIDI)
  • 线性算术合成(PCM采样攻击+减性合成持续)
  • 向量合成(基于X-Y平面的四种声音混合)
  • 相位偏移调制合成(两个周期性波形实例稍微不同步,然后相乘或相减)
  • 任意波形合成(在波形中定义在 不同时间发生的样本,称为航点 - 跳跃或插值 {视频游戏音乐})

波形

振荡器

“电压”控制滤波器

  • 低通(最常见)/高通
  • 带通/陷波

包络(例如:ADSR)

  • 压:攻击(时间,振荡器:Fc),保持?衰减(时间,振荡器:Fc.inv),…
  • 保持:持续(振荡器:Pulse(1.0).Gain(level))
  • 版本:版本(时间,振荡器:Fc.inv)

"电压控制放大器(乘法)"

效果

门控混响

无反射的混响。

门控混响

混响与回声

混响只是发生在50毫秒以内的回声,因此可以使用相同的API。

分贝归一化

在生成波形时,您可能希望按波形的音量进行归一化,而幅度不一定准确近似音量。首先,计算均方根(RMS)。

let sum = 0
for sample in samples {
    sum += sample * sample
}
sum /= samples.len()
let rms = sum.sqrt()

现在峰值

let mut peak_amplitude = 0
for sample in samples {
    peak_amplitude = peak_amplitude.max(sample.abs())
}

然后是峰值系数

let crest_factor = peak_amplitude / rms

然后是分贝

let papr = 20 * log10(crest_factor)

峰值系数后处理录制 4–8 / 12–18 dB 头空间 未处理录制 8–10 / 18–20 dB 头空间

实际感知音量应使用ITU-R BS.1770-4进行计算

入门

示例可以在文档和示例文件夹中找到。

MSRV

twang支持的最小Rust版本为1.60.0。MSRV仅在增加twang的最左版本号时更新。

许可证

许可协议为以下之一

任选其一。

贡献

除非您明确说明,否则任何按照Apache-2.0许可证定义提交以包含在您的工作中的贡献,都将按上述方式双许可,没有任何附加条款或条件。

任何人都可以自由贡献!不要害羞,无论是提出问题、想法、错误报告、错误修复、功能请求、功能实现或其他增强。其他项目有严格的贡献指南,但本项目接受任何和所有格式的pull请求和问题。对于持续代码贡献,如果您希望确保您的代码被使用,请打开一个草案PR,这样我知道不要编写相同的代码。如果某个功能需要提高优先级,我可能会将其合并到一个单独的分支中并完成它(在提交者的一周截止日期之后)。在这种情况下,贡献者将始终被通知,并有机会提前合并。

依赖项

~525KB
~12K SLoC