Digital Signal Processing Library and Audio Toolbox for the Modern Synthesist.

Overview



Digital Signal Processing Library and Audio Toolbox for the Modern Synthesist.

Attention

This library is still under development!
Read the docs and check out the examples.

Currently looking for contributors / enthusiasts, if you have an idea, found a bug or have an amazing new feature you want to add, feel free to clone, edit and open a Pull Request.

Building

git clone https://github.com/everdrone/libsnd.git
cd libsnd

mkdir build
cd build
cmake ..
make install

Usage

// main.cc
#include <iostream>
#include <snd.h>

#define SAMPLE_RATE 44100

int main(int argc, char **argv) {
  snd::Sine<float> s(SAMPLE_RATE);
  s.setFrequency(440);

  for (int i = 0; i < 512; i++) {
    std::cout << s.tick() << std::endl;
  }

  return 0;
}
g++ main.cc -o a.out -lsnd

Features

  • Oscillators
    • Anti Aliased
      • Sine
      • Triangle
      • Sawtooth
      • Square
      • Spectral (Sine Bank)
  • Filters
    • Zero Delay Feedback
    • Bilinear
    • Biquad
    • Modular / Multiband
    • Comb
  • Multistage Waveshaper
  • Envelope Generators
    • Multistage Envelope Generator
    • Classic Dual Stage (AD) Envelope Generator
    • "Ducking" Curve Generator
  • Envelope Follower
  • Interpolation
  • Denormal canceling
  • LFOs
    • Sine
    • Parabolic
    • Triangle
    • Sawtooth
    • Square
    • Random
    • Perlin
  • Effects
    • Delay
      • Interpolated
      • Non-Interpolated
    • Reverb
      • Spring
      • Convolution
    • Flanger
    • Phaser
    • Chorus
    • Stereo Panner
    • Ring Modulator
    • Bit Crusher
    • Compressor
    • Driver / Saturator
  • Utilities
    • LR to MS
    • MS to LR
    • Pitch (MIDI) to Frequency (Hz)
    • Frequency (Hz) to Pitch (MIDI)
    • Amplitude Factor to dB
    • dB to Amplitude Factor
    • Linear to Exponential
    • Linear to Logarithmic
Issues
  • LFO derived classes implement LFOBase class

    LFO derived classes implement LFOBase class

    Removed unique_ptr, setFrequency() and setPhase from the now derived LFO classes

    Since they all implement the methods from LFOBase the same way there is no need to instance the base class as a pointer into each.

    improvement 
    opened by everdrone 2
  • Use unique pointers instead of raw pointers for LFO classes.

    Use unique pointers instead of raw pointers for LFO classes.

    Currently, the LFOBase instances these classes store are heap-allocated but never deleted. The use of a raw pointer also implies non-ownership, but it's clear in this scenario that these classes are supposed to own their instance of LFOBase.

    The use of unique_ptr allows the deleting of these resources when the class goes out of scope, and also disallows the sharing of the heap-allocated resource. This is appropriate as instances of these classes rely on state stored within their own instance of phaseDriver.

    improvement 
    opened by jumbatm 2
  • CMakeLists edits

    CMakeLists edits

    • Improved CMake support
    • Replaced old style versioning in CMakeLists.txt with more convenient project( libsnd VERSION x.x.x )
    • Segregated tests into its own flag. It is ON by default, can be turned off with -DBUILD_TESTS=OFF on the cmake command line. In the future, when there are many tests, you can consider moving all tests into its own CMakeLists.txt file.
    • Moved compiler flags to target-style.
    enhancement 
    opened by undisputed-seraphim 1
  • Conan package

    Conan package

    Hello, Do you know about Conan? Conan is modern dependency manager for C++. And will be great if your library will be available via package manager for other developers.

    Here you can find example, how you can create package for the library.

    If you have any questions, just ask :-)

    enhancement 
    opened by zamazan4ik 1
  • Basic CMake build system

    Basic CMake build system

    This will change the build system over to CMake rather than Make while also implementing your unit tests using CMake's CTest framework. Headers are kept in the include folder and source files kept in the source to keep the "API" away from the "implementation" so that users would point only have to their projects to the include folder and link the library. This will draft your CMake workflow so that you may eventually add static or dynamic library targets and the option to install and other library configurations.

    improvement 
    opened by Wunkolo 1
  • Include cstdint in snd.h

    Include cstdint in snd.h

    This file currently relies on the user including <cstdint> either directly or indirectly. The following doesn't compile.

    #include "snd.h" // int8_t does not name a type, uint8_t doesn't name a type, etc...
    
    int main()
    {
        return 0;
    }
    

    <cstdint> needs to be included before the fixed-width types are used in snd.h. This should be our responsibility, not the user's.

    fix 
    opened by jumbatm 0
  • Include directories PRIVATE in CMakeLists.txt

    Include directories PRIVATE in CMakeLists.txt

    In the 'target_include_directories' statement the only include directory 'include' is specified as PRIVATE. I noticed the 'include' directory contains public headers and so this should be market PUBLIC. That way, other projects that link to your project using CMake and target_link_libraries will have the right include directives added to their project.

    bug 
    opened by bergesenha 0
Releases(v0.1.1)
Owner
everdrone
@mutex.lock on Instagram
everdrone
Aquila is a digital signal processing library for C++11.

What is Aquila? Aquila is an open source and cross-platform DSP (Digital Signal Processing) library for C++11. Example #include "aquila/aquila.h" int

Zbigniew Siciarz 383 Jun 22, 2022
The Synthesis ToolKit in C++ (STK) is a set of open source audio signal processing and algorithmic synthesis classes written in the C++ programming language.

The Synthesis ToolKit in C++ (STK) By Perry R. Cook and Gary P. Scavone, 1995--2021. This distribution of the Synthesis ToolKit in C++ (STK) contains

null 783 Jun 23, 2022
Apache Arrow is a multi-language toolbox for accelerated data interchange and in-memory processing

Apache Arrow Powering In-Memory Analytics Apache Arrow is a development platform for in-memory analytics. It contains a set of technologies that enabl

The Apache Software Foundation 9.7k Jun 25, 2022
Itpp - IT++ library mirror/fork. C++ library of mathematical, signal processing and communication classes and functions.

Introduction ************ IT++ is a C++ library of mathematical, signal processing and communication classes and functions. Its main use is in simula

null 18 Apr 9, 2022
A generic and robust calibration toolbox for multi-camera systems

MC-Calib Toolbox described in the paper "MultiCamCalib: A Generic Calibration Toolbox for Multi-Camera Systems". Installation Requirements: Ceres, Boo

null 141 Jun 27, 2022
Zero-Knowledge Proof Toolbox

Zkrypt是一个开源的C语言零知识证明算法库,旨在向用户提供简洁、高效的非交互式零知识证明协议接口,用户可以通过调用接口实现完整的零知识证明协议的流程,包括公共参数设置、证明生成和验证等步骤。 本项目由北京大学关志的密码学研究组开发维护。 特性 支持多种零知识证明协议(包括Groth16, Plo

Zhi Guan 12 Jun 16, 2022
A long-read analysis toolbox for cancer genomics

Lorax: A long-read analysis toolbox for cancer genomics In cancer genomics, long-read de novo assembly approaches may not be applicable because of tum

Tobias Rausch 8 Apr 29, 2022
The PNT Integrity Library provides users a method to verify the integrity of the received GPS data and ranging signals, thereby improving resiliency against potential GPS signal loss.

PNT Integrity Library The PNT Integrity Library provides users a method to verify the integrity of the received GPS data and ranging signals, thereby

Cybersecurity and Infrastructure Security Agency 40 Apr 28, 2022
Thread aware Signal/Slot library

CsSignal Introduction CsSignal is a library for thread aware Signal/Slot delivery. This library does not depend upon CopperSpice or any other librarie

CopperSpice 56 Jun 27, 2022
A minimal header-only audio synthesis and processing library

Aurora A minimal header-only C++ audio synthesis and processing toolkit. Getting Started Aurora is a collection of header files which can be included

null 11 Apr 27, 2022
Vectron VGA Plus generates a [email protected] VGA signal and has an interface that works with retro computers or microcontrollers.

Vectron VGA Plus Vectron VGA Plus generates a [email protected] VGA signal and has an interface that works with retro computers or microcontrollers. Screen

Nick Bild 29 Jun 7, 2022
multi-sdr-gps-sim generates a IQ data stream on-the-fly to simulate a GPS L1 baseband signal using a SDR platform like HackRF or ADLAM-Pluto.

multi-sdr-gps-sim generates a GPS L1 baseband signal IQ data stream, which is then transmitted by a software-defined radio (SDR) platform. Supported at the moment are HackRF, ADLAM-Pluto and binary IQ file output. The software interacts with the user through a curses based text user interface (TUI) in terminal.

null 57 Jun 20, 2022
mstatus is a super minimal entirely signal based statusbar for DWM.

mstatus is a uber-minimalistic signal based statusbar for DWM. All components of the statusbar are modules that must either be written by the user, or written by someone else and copied by the user.

Thomas Voss 1 Feb 2, 2022
JUCE Signal Generator

JUCE Signal Generator Application This project serves as a re-introduction to JUCE programming (I haven't used it since under-grad, circa 2012). Build

Tom Wilson 1 Dec 22, 2021
C++11 signal/slot implementation

sigslot C++11 signal/slot implementation Requirements c++11 How to use For a code sample, see test.cpp class Emitter { public: Signal<int>

Supergrover 70 Jun 21, 2022
Sensirion Mass Flow Sensor Arduino library, modified from MyElectrons and Nabilphysics Arduino repositories for SFM3300 Digital Mass Flow Sensor

Sensirion Mass Flow Sensor Arduino library, modified from MyElectrons and Nabilphysics Arduino repositories for SFM3300 Digital Mass Flow Sensor. When the sensor data gets stuck, the library has a hard reset function to ensure that it is read continuously.

Paul Ryan Santiago 3 Apr 11, 2022
Voltage Controlled Digital Core Multimode Oscillator using Mozzi library on Arduino

Arduino-VDCO Voltage Controlled Digital Core Multimode Oscillator using Mozzi library on Arduino Its a digital Oscillator/Voice for the Eurorack Stand

null 39 Jun 22, 2022
This is an Arduino library for Aosong ASAIR AHT1x, AHT2x Digital Humidity & Temperature Sensor

Aosong ASAIR AHT1x/AHT2x This is an Arduino library for Aosong ASAIR AHT10/AHT15/AHT20/AHT21/AHT25/AM2301B/AM2311B Digital Humidity & Temperature Sens

enjoyneering 30 Jun 23, 2022
Neo - Simulates the digital rain from "The Matrix" (cmatrix clone with 32-bit color and Unicode support)

neo WARNING: neo may cause discomfort and seizures in people with photosensitive epilepsy. User discretion is advised. neo recreates the digital rain

Stew Reive 390 Jun 18, 2022