All Projects → AndrewJJ → DSP-Testbench

AndrewJJ / DSP-Testbench

Licence: MIT license
A DSP Testbench for users of the JUCE framework

Programming Languages

C++
36643 projects - #6 most used programming language
c
50402 projects - #5 most used programming language
Objective-C++
1391 projects

Labels

Projects that are alternatives of or similar to DSP-Testbench

simple-reverb
A simple reverb made with the JUCE DSP module
Stars: ✭ 43 (+7.5%)
Mutual labels:  dsp, juce
juceSynths
Collection of JUCE synthesisers utilising the Maximilian library.
Stars: ✭ 78 (+95%)
Mutual labels:  dsp, juce
Bad-Circuit-Modelling
Correct modelling of incorrect circuits
Stars: ✭ 27 (-32.5%)
Mutual labels:  dsp, juce
DAFx19-Gamelanizer
Accompanying material for the paper 'A Real-Time Audio Effect Plug-In Inspired by the Processes of Traditional Indonesian Gamelan Music'
Stars: ✭ 33 (-17.5%)
Mutual labels:  dsp, juce
juce-cookbook
Collection of tutorials & resources for the C++ library JUCE
Stars: ✭ 58 (+45%)
Mutual labels:  dsp, juce
melatonin audio sparklines
Sparklines For JUCE AudioBlocks
Stars: ✭ 60 (+50%)
Mutual labels:  dsp, juce
Sof
Sound Open Firmware
Stars: ✭ 183 (+357.5%)
Mutual labels:  dsp
voder
An emulation of the Voder Speech Synthesizer.
Stars: ✭ 19 (-52.5%)
Mutual labels:  dsp
Julius
Fast PyTorch based DSP for audio and 1D signals
Stars: ✭ 179 (+347.5%)
Mutual labels:  dsp
Audionetwork
Data transmission over sound waves written in JavaScript without any dependencies. All you need is just microphone, speakers and the browser!
Stars: ✭ 173 (+332.5%)
Mutual labels:  dsp
bcgov-data-science-cop
A repository to house bcgov Data Science CoP materials
Stars: ✭ 22 (-45%)
Mutual labels:  dsp
ooura
Javascript port of Ooura FFT implementation
Stars: ✭ 23 (-42.5%)
Mutual labels:  dsp
Dsp.jl
Filter design, periodograms, window functions, and other digital signal processing functionality
Stars: ✭ 226 (+465%)
Mutual labels:  dsp
Red Pitaya Notes
Notes on the Red Pitaya Open Source Instrument
Stars: ✭ 205 (+412.5%)
Mutual labels:  dsp
concatenative granulation
Live concatenative granular processing for click-free looping, complex wavetable oscillation, and non-overlapping granulation with rectangular windowing.
Stars: ✭ 35 (-12.5%)
Mutual labels:  dsp
Si4735
SI4735 Library for Arduino
Stars: ✭ 182 (+355%)
Mutual labels:  dsp
gensound
Pythonic audio processing and generation framework
Stars: ✭ 69 (+72.5%)
Mutual labels:  dsp
Shaden
🎧 A modular audio synthesizer.
Stars: ✭ 175 (+337.5%)
Mutual labels:  dsp
Renderman
Command line C++ and Python VSTi Host library with MFCC, FFT, RMS and audio extraction and .wav writing.
Stars: ✭ 225 (+462.5%)
Mutual labels:  dsp
osmid
osmid is a tool to bridge MIDI and OSC. It is currently in use in Sonic Pi
Stars: ✭ 63 (+57.5%)
Mutual labels:  juce

DSP Testbench

DSP Testbench is designed to help developers using the JUCE framework to analyse their DSP by providing a test harness for code inheriting from juce::dsp::ProcessorBase. The harness provides signal sources, routing, analysis and monitoring functions.

Screenshot

Features

Title Bar Controls

Besides the usual window sizing buttons, the title bar hosts the following controls:

  • CPU meter
  • Snapshot
  • Performance benchmarks
  • Audio device settings
  • About (you already know what this does :) )

Most of the application settings are automatically saved and restored each time you restart the app.

Signal Sources

Two individual signal source modules generate synthesised signals, play back audio files, or pass through from an audio interface. The synthesis tab provides periodic waveforms with sweepable frequencies, as well as impulse & step functions and noise generators. Each source can be muted, inverted or gain trimmed, and the periodic waveforms can be synchronised between the two source modules.

The triangle, square and saw oscillators are implemented with a PolyBLEP implementation to reduce aliasing, however it will still be visible in the analyser at higher frequencies.

Note that white and pink noise show up as a circle on the phase scope because we generate different samples on each channel. The other oscillators generate the same samples on each channel.

Processor Control

Each of the two processor modules are used to host and control your DSP code. Either or both signal sources can be routed to each processor; and the output can be inverted, or muted.

One use case is to verify that code optimisations do not alter the output. You can achieve this by hosting different versions of your DSP code in either module, routing the same audio to both, and inverting the output of one processor to ensure perfect cancellation.

Analysis

The analyser provides the following:

  • FFT scope with logarithmic frequency scale (0 to -80dB amplitude scale)
  • Oscilloscope
  • Phase scope
  • Level meter with VU (narrow) and peak (wide) meters for each channel
  • Clip indicators (click to popup clip stats window with reset button)
  • Pause button to freeze the display (audio is not paused)
  • Expand button
  • Advanced settings for scopes

The oscilloscope can be zoomed using the mouse wheel (hold shift to zoom amplitude instead of time) and you can pan by clicking and dragging. Double click anywhere on the oscilloscope to reset scale

Monitoring

The monitoring section has a gain control and mute button to control the output level of the application. An optional output limiter is also provided to prevent digital overs (this is applied after the processors so does not affect their behaviour).

Snapshot

The snapshot functionality allows you to pass 4096 samples through the processor then pause the analysis and audio so you can forensically examine the resulting output. Normal operation can be resumed by toggling the snapshot button again. When a snapshot is triggered, the audio device is stopped and restarted and all modules are reset so that the same 4096 samples will be generated and processed every single time. The only exception to this is if the wave file player has its' right hand button disabled, in which case playback will be from the current position.

Performance Benchmarks

The benchmark functionality starts your processor(s) on another thread and pumps audio through, gathering statistics on how much time has been spent running your routines. A single block of audio is repeated from source A (using live audio input will not work).

Developer Notes

To make use of DSP Testbench, you need to include your own code, wrap it appropriately and build the project.

  • Navigate to the Source\Processing folder and take a look at ProcessorExamples.h/.cpp
    • This shows how to inherit from ProcessorHarness and shows examples of how to override the necessary pure virtual functions
  • Create a local branch of the repository before proceeding
  • Copy (or create) your own code into the project folder
    • Make sure you add these files to the Projucer project also
    • Either extend ProcessorExamples.h/cpp or create your own wrapper class and include it in MainComponent.cpp
  • Instantiate your processor harness in the MainContentComponent constructor
    • If optimising code, then use two separate wrappers and instantiate them separately
  • Build, run and test!

Credits & Attributions

ASIO Interface Technology by Steinberg Media Technologies GmbH

This software makes use of certain code libraries, those portions of code are copyright as per below:

  • JUCE 6 - copyright © 2020 Raw Material Software
  • Application code - copyright © 2021 Oblique Audio
  • Fast maths approximations - copyright © 2011 Paul Mineiro
  • rand31pmc white noise generator - copyright © 2005 Robin Whittle
  • Pink noise filter - Paul Kellett
  • PolyBLEP/BLAMP - adapted from Tebjan Halm (vvvv.org)
  • MGA JS Limiter - copyright © 2008 Michael Gruhn

Software Disclaimer

This software is provided "as is" and you use it at your own risk.

The developers make no warranties as to performance, merchantability, fitness for a particular purpose, or any other warranties whether expressed or implied. No oral or written communication from or information provided by the developers shall create a warranty.

Under no circumstances shall the developers or contributors be liable for direct, indirect, special, incidental, or consequential damages resulting from the use, misuse, or inability to use this software, even if the developers have been advised of the possibility of such damages.

These exclusions and limitations may not apply in all jurisdictions. You may have additional rights and some of these limitations may not apply to you.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].