Giter VIP home page Giter VIP logo

synthesizer's Introduction

synthesizer

All Contributors Build status Open Issues PRs Last Commit

This is a project on my live coding stream Codebase Alpha starting with episode 34. The aim of the project is to explore some of the features of the extensive the NAudio digital audio library. To do this, I'm using .NET Core 3.0 and WPF to develop a simple synthesizer, starting with a monophonic keyboard, but going on throughout the project to introduce such things as polyphony, ADSR envelopes, instruments and voices, and visualisations (such as a spectrum analyser). Basically, let's see how far we can take this!

Please note that, despite this being a .NET Core project, because I'm using NAudio and WPF, this code is Windows-only at this time.

The NAudio Github repo can be found here.

Twitter

Progress

Episode 34

A simple monophonic synthesizer was created. The code needs tidying up but its working at a basic level. Next up: add polyphony anf the ability to change the octave the keyboard covers!

Episode 35

Added a GUI octave selector and had initial stab at making the keyboard polyphonic. Merged a PR that added a T4 template to generate the view model.

Episode 36

Merged a PR that added a spectrum analyser and waveform visualizer to the GUI. Moved from wavetables to signal generators in the SynthWaveProvider class, and implemented ADSR envelopes to shape the sound profile of notes. Finally, created a low pass filter and a tremolo effect for the synthesizer. The GUI elements of these latter were left for another stream.

Episode 37

Tidied up the GUI, adding wave form selection and realtime controls for the low pass filter. Also developed LFO frequency modulation in order to add a vibrato effect to notes. No GUI controls for the vibrato are planned, as the feature will form part of the instrument/voice presets concept I want to develop for the project (although this may change!).

Episode 38

Added Sub-oscillator for sine wave and GUI controls for Vibrato and Tremolo.

image

In order to practice creating audio effects, I implemented a Chorus effect off-stream. It still requires wiring up to the GUI.

Episode 39

Merged a PR to make the T4 Template that builds our view model even more useful! Wired up the Chorus effect to the GUI and implemented a Phaser effect for the synth, including adding GUI control over the effect's parameters.

Off-stream, implemented a Delay effect but it's not wired into the GUI at this time.

Episode 40

Added 2 additional voices per note, complete with GUI controls for level, waveform, ADSR and relative tuning. Determined some settings that produced a nice bell sound; will use these for our first preset patch in a later stream.

Episode 41

Added support for using a MIDI controller to play the synthesizer - including velocity sensitivity. Also wired up the Delay effect to GUI controls. Hit a bug with the Delay effect - logged as Issue #29 (subsequently fixed off-stream).

Episode 42

Added the facility to save and load settings files as JSON, which we refer to as "patches". Some refactoring is required to tidy up the code.

Contributors

Thanks goes to these wonderful people (emoji key):

mrange
mrange

๐Ÿ’ป ๐Ÿค”

This project follows the all-contributors specification. Contributions of any kind welcome!

synthesizer's People

Contributors

essenbee avatar mrange avatar allcontributors[bot] avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.