#dsp #实时 #合成 #音乐

nightly synfx-dsp

Rust实时音频合成、效果算法和实用工具

7个版本

0.5.6 2024年1月4日
0.5.5 2022年11月1日
0.5.4 2022年8月28日

#253音频


2 个crates使用

GPL-3.0-or-later

235KB
4K SLoC

synfx-dsp

synfx-dsp DSP实时音频合成、效果算法和实用工具

本库中的大部分算法和实现已针对HexoDSP实现并用于HexoSynth。由于它们在其他环境中也很有用,例如synfx-dsp-jit crate,因此我将它们提取出来。

我从各种GPLv3兼容的来源收集了本crate中的大部分算法。它们还部分翻译自多个不同的C++项目。我在此crate的注释中尽力记录了源代码和源代码许可。如果遗漏了任何归属,我将欢迎补丁或报告。

请自由使用这些算法和实用工具。如果它们符合GPL-3.0-or-later许可并且不会破坏HexoDSP的测试套件,则将赞赏帮助、补丁和添加。

注意: HexoDSP附带一个大型测试套件,它还涵盖了这些算法。而且,这些算法也要通过测试。另一方面,这些实现实际上也被测试套件所覆盖。

由于std::simd!,自2022年10月2日起需要Nightly版

版权、许可、归属、贡献

以下是从本库中复制或翻译代码的部分来源列表

  • crate::quicker_tanh64 / crate::quicker_tanh
    quickerTanh / quickerTanh64 credits to mopo synthesis library:
    Under GPLv3 or any later.
    Little IO <[email protected]>
    Matt Tytel <[email protected]>
    
  • crate::quick_tanh64 / crate::quick_tanh
    quickTanh / quickTanh64 credits to mopo synthesis library:
    Under GPLv3 or any later.
    Little IO <[email protected]>
    Matt Tytel <[email protected]>
    
  • crate::tanh_approx_drive
    Taken from ValleyAudio
    Copyright Dale Johnson
    https://github.dev/ValleyAudio/ValleyRackFree/tree/v2.0
    Under GPLv3 license
    
  • crate::AtomicFloat
    Implementation from vst-rs
    https://github.com/RustAudio/vst-rs/blob/master/src/util/atomic_float.rs
    Under MIT License
    Copyright (c) 2015 Marko Mijalkovic
    
  • crate::Biquad
    The implementation of this Biquad Filter has been adapted from
    SamiPerttu, Copyright (c) 2020, under the MIT License.
    See also: https://github.com/SamiPerttu/fundsp/blob/master/src/filter.rs
    
  • crate::DattorroReverb
    This file contains a reverb implementation that is based
    on Jon Dattorro's 1997 reverb algorithm. It's also largely
    based on the C++ implementation from ValleyAudio / ValleyRackFree
    
    ValleyRackFree Copyright (C) 2020, Valley Audio Soft, Dale Johnson
    Adapted under the GPL-3.0-or-later License.
    
    See also: https://github.com/ValleyAudio/ValleyRackFree/blob/v1.0/src/Plateau/Dattorro.cpp
         and: https://github.com/ValleyAudio/ValleyRackFree/blob/v1.0/src/Plateau/Dattorro.hpp
    
    And: https://ccrma.stanford.edu/~dattorro/music.html
    And: https://ccrma.stanford.edu/~dattorro/EffectDesignPart1.pdf
    
  • crate::process_1pole_lowpass / crate::process_1pole_highpass
    one pole lp from valley rack free:
    https://github.com/ValleyAudio/ValleyRackFree/blob/v1.0/src/Common/DSP/OnePoleFilters.cpp
    
  • crate::process_1pole_tpt_lowpass / crate::process_1pole_tpt_highpass
    one pole from:
    http://www.willpirkle.com/Downloads/AN-4VirtualAnalogFilters.pdf
    (page 5)
    
  • crate::FixedOnePole
    Fixed one pole with setable pole and gain.
    Implementation taken from tubonitaub / alec-deason
    from https://github.com/alec-deason/virtual_modular/blob/4025f1ef343c2eb9cd74eac07b5350c1e7ec9c09/src/simd_graph.rs#L4292
    under MIT License
    
  • crate::process_hal_chamberlin_svf
    Hal Chamberlin's State Variable (12dB/oct) filter
    https://www.earlevel.com/main/2003/03/02/the-digital-state-variable-filter/
    Inspired by SynthV1 by Rui Nuno Capela, under the terms of
    GPLv2 or any later:
    
  • crate::process_simper_svf
    Simper SVF implemented from
    https://cytomic.com/files/dsp/SvfLinearTrapezoidalSin.pdf
    Big thanks go to Andrew Simper @ Cytomic for developing and publishing
    the paper.
    
  • crate::process_stilson_moog
    Stilson/Moog implementation partly translated from here:
    https://github.com/ddiakopoulos/MoogLadders/blob/master/src/MusicDSPModel.h
    without any copyright as found on musicdsp.org
    (http://www.musicdsp.org/showone.php?id=24).
    
    It's also found on MusicDSP and has probably no proper license anyways.
    See also: https://github.com/ddiakopoulos/MoogLadders
    and https://github.com/rncbc/synthv1/blob/master/src/synthv1_filter.h#L103
    and https://github.com/ddiakopoulos/MoogLadders/blob/master/src/MusicDSPModel.h
    
  • crate::DCBlockFilter
    translated from Odin 2 Synthesizer Plugin
    Copyright (C) 2020 TheWaveWarden
    under GPLv3 or any later
    
  • crate::cubic_interpolate
    Hermite interpolation, take from
    https://github.com/eric-wood/delay/blob/main/src/delay.rs#L52
    
    Thanks go to Eric Wood!
    
    For the interpolation code:
    MIT License, Copyright (c) 2021 Eric Wood
    
  • crate::TriSawLFO
    Adapted from https://github.com/ValleyAudio/ValleyRackFree/blob/v1.0/src/Common/DSP/LFO.hpp
    
    ValleyRackFree Copyright (C) 2020, Valley Audio Soft, Dale Johnson
    Adapted under the GPL-3.0-or-later License.
    
  • crate::PolyBlepOscillator
    PolyBLEP by Tale
    (slightly modified)
    http://www.kvraudio.com/forum/viewtopic.php?t=375517
    from http://www.martin-finke.de/blog/articles/audio-plugins-018-polyblep-oscillator/
    
  • crate::VPSOscillator
    This oscillator is based on the work "VECTOR PHASESHAPING SYNTHESIS"
    by: Jari Kleimola*, Victor Lazzarini†, Joseph Timoney†, Vesa Välimäki*
    *Aalto University School of Electrical Engineering Espoo, Finland;
    †National University of Ireland, Maynooth Ireland
    
    See also this PDF: http://recherche.ircam.fr/pub/dafx11/Papers/55_e.pdf
    
  • crate::Oversampling
    Loosely adapted from https://github.com/VCVRack/Befaco/blob/v1/src/ChowDSP.hpp
    Copyright (c) 2019-2020 Andrew Belt and Befaco contributors
    Under GPLv-3.0-or-later
    
    Which was originally taken from https://github.com/jatinchowdhury18/ChowDSP-VCV/blob/master/src/shared/AAFilter.hpp
    Copyright (c) 2020 jatinchowdhury18
    
  • crate::next_xoroshiro128
    Taken from xoroshiro128 crate under MIT License
    Implemented by Matthew Scharley (Copyright 2016)
    https://github.com/mscharley/rust-xoroshiro128
    
  • crate::u64_to_open01
    Taken from rand::distributions
    Licensed under the Apache License, Version 2.0
    Copyright 2018 Developers of the Rand project.
    
  • crate::SplitMix64
    Copyright 2018 Developers of the Rand project.
    
    Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
    https://apache.ac.cn/licenses/LICENSE-2.0> or the MIT license
    <LICENSE-MIT or https://opensource.org/licenses/MIT>, at your
    option. This file may not be copied, modified, or distributed
    except according to those terms.
    - splitmix64 (http://xoroshiro.di.unimi.it/splitmix64.c)
    
  • crate::f_distort / crate::f_fold_distort
    Ported from LMMS under GPLv2
    * DspEffectLibrary.h - library with template-based inline-effects
    * Copyright (c) 2006-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
    
    Original source seems to be musicdsp.org, Author: Bram de Jong
    see also: https://www.musicdsp.org/en/latest/Effects/41-waveshaper.html
    
  • crate::PolyIIRHalfbandFilter
    Taken from va-filter by Fredemus aka Frederik Halkjær aka RocketPhysician
    https://github.com/Fredemus/va-filter
    Under License GPL-3.0-or-later
    
    originally translated from the freely available source code
    at https://www.musicdsp.org/en/latest/Filters/39-polyphase-filters.html
    
  • crate::DCFilterX4
    Basic 4 channel SIMD DC-filter from Understanding Digital Signal Processing by Richard Lyons.
    
    Taken from va-filter by Fredemus aka Frederik Halkjær aka RocketPhysician
    https://github.com/Fredemus/va-filter
    Under License GPL-3.0-or-later
    
  • crate::fh_va::LadderFilter / crate::fh_va::Svf / crate::fh_va::SallenKey
    Taken from va-filter by Fredemus aka Frederik Halkjær aka RocketPhysician
    https://github.com/Fredemus/va-filter
    Under License GPL-3.0-or-later
    

许可:GPL-3.0或更新版本

依赖项

~150KB