OliverVea / Synthesizer

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Synthesizer Project

WIP project of writing a (relatively) simple synthesizer. Developed using TDD (Test-Driven Development) principles.

Project Management

Project management to keep track of goals and tasks. I find it important to have a direction when doing TDD.

Tasks

  • Github setup
    • Create repo
    • Create setup
    • Create pipeline with tests and dotnet format
  • Synthesizer CRUD
    • Creating basic synthesizer
    • Getting synthesizer
    • Listing synthesizers
    • Deleting synthesizer
    • Updating synthesizer
  • Oscillators
    • Create new service for CRUD
      • Get
      • List
      • Create
      • Delete
      • Update
    • Add oscillator to synthesizer
  • Generating audio samples
    • Create SynthesizerConfiurationService
    • Create SynthesizerGenerationService
  • Playing audio
  • Getting real-time input
  • Envelope CRUD
    • Create service for CRUD
    • Attaching to synthesizer and saving
    • Effect on audio sample generation
  • Filter CRUD
    • Attaching to synthesizer and saving
    • Effect on audio sample generation

MVP definition

  • Being able to create one synthesizer containing:
    • A sample rate
    • A display name
    • An auto-generated id
    • A master volume control
    • One oscillator containing
      • Waveform
      • Frequency
      • Amplitude
    • One envelope
      • Levels
        • Attack
        • Sustain
      • Timings
        • Attack
        • Decay
        • Release
    • One filter
      • Low
      • High
      • Resonance
  • It must be possible to generate audio samples with the synthesizer.
    • The audio samples should be generated in a streamable manner.
  • It must be possible to stream the audio to an output audio device in windows.
  • Synthesizer configuration should be stored persistently.

Project structure

Project structure illustration

Not decided

  • Method of IO - everything is services, could be web-based, GUI, etc.
  • Implement the most simple file-based storage, another storage method can be found later.
  • Deployment style of application.

Future stuff

  • Polyphonic audio generation
  • MIDI input
  • Web-based input
  • GUI
  • Other kinds of signal generation
    • From audio files
  • Customizable signal paths
    • Recursive signal paths

About


Languages

Language:C# 100.0%