2个不稳定版本

0.2.0 2022年12月18日
0.1.0 2019年8月21日
0.0.1 2019年8月18日

嵌入式开发中排名第510


korg-syro使用

Apache-2.0

25KB
408

Waver CI codecov Crates.io Documentation

Waver是一个简单的no-std库,用于生成给定频率、幅度和相位的任意波形。

波形可以是简单的正弦波或频率和幅度变化的复杂波形。Waver适用于需要生成简单的正弦波声音或构建频率或幅度调制的载波波形的裸机ArduinoRaspberry Pi

用法

要使用Waver,请将以下内容添加到您的Cargo.toml文件中。

[dependencies]
waver = "0.1"

示例

use std::{vec::Vec, f32::consts::PI};
use waver::{Waveform, Wave, WaveFunc};

fn main() {
  // 44.1Khz sampling rate and 16-bit depth.
  let mut wf = waver::Waveform::<i16>::new(44100.0);

  // Superpose a sine wave, a cosine wave and a triangle function.
  wf.superpose(Wave { frequency: 2600.0, ..Default::default() })
    .superpose(Wave { frequency: 2600.0, phase: PI / 2.0, ..Default::default() })
    .superpose(Wave { frequency: 2600.0, func: WaveFunc::Triangle, ..Default::default() })
    .normalize_amplitudes();

  // Quantization of 100 samples
  let _output: Vec<i16> = wf.iter().take(100).collect();
}

功能

  • 任意量化级别。在构建Waveform时指定位深度。
  • 在线波形生成。无缓冲区,无限迭代器。
  • 加权幅度波形叠加。
  • 调制信号的频率、幅度或相位。
  • 数值稳定,防止削波。

TODO

  • 实现检查以防止混叠(例如,不允许超过奈奎斯特频率的频率)。
  • 对于没有FPU的平台使用定点运算。
  • 在数学支持转移到libcore时替换libm crate的使用。
  • 扩展crate功能以包括信号分析功能。

贡献

有没有想看到Waver中的某些功能?您可以访问问题跟踪器查看是否之前已经报告或提出过,如果没有,请随时创建问题或功能请求。准备好开始贡献了吗?《贡献指南》是一个不错的开始地点。如果您有任何问题,请随时提问。

依赖项

~560KB
~11K SLoC