#playground #devices #effect #sampler #time #mono

bin+lib dawr

A DAW-like audio playground for Rust coders

2 个版本

使用旧的 Rust 2015

0.0.2 2018 年 5 月 4 日
0.0.1 2018 年 5 月 4 日

#891 in 音频

MIT 许可证

1MB
974

DAWr

Build Status crates.io

DAWr(发音为“door”)是一个面向喜欢编写 Rust 代码的人的音频游乐场。它具有一些简单 DAW 的功能,包括内置的 wavetable 合成器、采样器和基本的音频效果。然而,它仍然缺少很多:没有均衡器,采样器只在工作一次模式下工作,等等。我目前不打算添加新功能,但我很乐意接受建议和拉取请求!

功能有限,但足以在 Rust 中制作一个糟糕的未来的低音部分!您可以在 src/bin/demotrack.rs 中找到此代码。这是它的声音(在 SoundCloud 上)。

警告: 此库没有任何单元测试!可能存在错误!

设备

在这个库中,设备是发出信号的东西,可以是单声道或立体声。立体声通常是音频,单声道通常是某种控制参数。有两个重要的特质,MonoEmitterStereoEmitter,用于输出单声道或立体声的设备。还有一个 EventSource 类型,表示在特定时间点发生的一系列事件(例如 NoteOn(frequency)NoteOff)。其理念是每个设备都应该擅长做一件简单的事情,然后可以通过链式更简单的设备来创建更强大的设备。

新设备是通过提供所有输入设备的引用和需要监听的全部事件源的引用来构建的。例如,要构建 MonoSynth 设备,它需要提供对 Oscillator(一个 MonoEmitter,告诉它当前波形的相位)的引用,另一个 MonoEmitter 来告诉它当前时刻选择的 wavetable 波形,以及另一个 MonoEmitter 指定振幅包络。为了播放音符,振幅包络设备将监听一个 EventSource<NoteEvent> 并在音符期间输出非零振幅值。我们广泛使用了 Rust 的 Rc 指针,因此多个设备可以使用相同的设备作为输入。

以下是所有内置设备的列表

单声道源

  • ConstSignal:输出一个恒定值的单声道信号。
  • Envelope:监听 NoteOn 事件,在没有音符播放时输出 0.0,在音符播放时输出 1.0。
  • Oscillator:与 MonoSynth 一起使用,输出正在播放的波的当前相位。

乐器

  • MonoSynth:单声波表合成器。您可以通过使用多个实例以及 Pan 效果和 MonoSynthOscillator 的失谐参数来创建多声部和和声。

  • Sampler:监听 EventSource<SamplerEvent>,并在看到 PlayPlayAtSpeed(speed) 事件时播放一些音频。在后一种情况下,播放速度会根据 speed 因子加快(通过跳过或重复样本)。

效果

  • Mixer:将多个立体声输入的输出相加。
  • Gain:将立体声输入信号与单声道输入信号相乘。
  • Pan:根据单声道输入信号调整立体声信号的平衡,范围为 [-1, 1]。
  • MonoToStereo:将单声道信号复制到立体声信号的左右通道。
  • StereoToMono:将立体声输入的左右通道相加以创建单声道信号。
  • WaveShaperEffect:将波形整形(例如硬削波)应用于立体声信号。

愿望清单

这个库缺少一些非常重要的功能,比如

  • 高通和低通滤波器。
  • 均衡器。
  • MIDI 支持。
  • 基于 MonoSynth 的一个多声部合成器设备,它监听 MIDI 事件。
  • 单元测试。

依赖关系