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
56KB
806 行
Twang
纯Rust高级音频合成库。
目标
- 快速:自动向量化音频合成。
- 纯Rust:无需std之外的系统依赖。
将提供每个示例的实现链接。
- 加性合成(组合声音,通常为正弦波 - 与FFT一起用于分析和重合成)
- 减性合成(用滤波器塑造包含奇偶频率的锯齿波)
- 频率调制合成(用波形调制频率)
- 相位调制(PM)合成 - 一种用于流行1980年代合成器的FM实现
- 相位失真合成(在共振频率处将反频率计数器乘以正弦波:频率计数器在基频结束处重新开始/重置)
- 物理建模合成(Karplus-Strong算法,其他基于d'Alembert算法的数字波导合成)
- 基于样本/查找表合成(用于MIDI)
- 线性算术合成(PCM采样攻击+减性合成持续)
- 向量合成(基于X-Y平面的四种声音混合)
- 相位偏移调制合成(两个周期性波形实例稍微不同步,然后相乘或相减)
- 任意波形合成(在波形中定义在 不同时间发生的样本,称为航点 - 跳跃或插值 {视频游戏音乐})
波形
振荡器
- 频率计数器(Fc/锯齿波) - 奇偶谐波以-6 dB/八度减少
- 脉冲波(当1/2占空比设置为1.0时为方波 - 奇谐波以-6 dB/八度减少)
- 正弦波 - 无谐波
- 三角波 - 奇谐波以-12 dB/八度减少
“电压”控制滤波器
- 低通(最常见)/高通
- 带通/陷波
包络(例如: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 License, Version 2.0 (LICENSE_APACHE_2_0.txt或https://www.apache.org/licenses/LICENSE-2.0)
- Boost License, Version 1.0 (LICENSE_BOOST_1_0.txt或https://boost.ac.cn/LICENSE_1_0.txt)
- MIT License (LICENSE_MIT.txt或https://mit-license.org/)
任选其一。
贡献
除非您明确说明,否则任何按照Apache-2.0许可证定义提交以包含在您的工作中的贡献,都将按上述方式双许可,没有任何附加条款或条件。
任何人都可以自由贡献!不要害羞,无论是提出问题、想法、错误报告、错误修复、功能请求、功能实现或其他增强。其他项目有严格的贡献指南,但本项目接受任何和所有格式的pull请求和问题。对于持续代码贡献,如果您希望确保您的代码被使用,请打开一个草案PR,这样我知道不要编写相同的代码。如果某个功能需要提高优先级,我可能会将其合并到一个单独的分支中并完成它(在提交者的一周截止日期之后)。在这种情况下,贡献者将始终被通知,并有机会提前合并。
依赖项
~525KB
~12K SLoC