Giter VIP home page Giter VIP logo

synth's Introduction

Synth

A browser-based synth using the Web Audio API and HTML.

synth screenshot

Features

  • Polyphonic
  • On-screen keyboard
    • Play by clicking mouse
    • Play by pressing corresponding qwerty keys
    • Drag "handle" to remap qwerty keys around keyboard
  • MIDI Keyboard
    • Tested with M-Audio Keystation Mini 32
    • Volume knob will modify whichever parameter has focus
  • Oscillators
    • Various wave forms
    • Shift and detune parameters
  • Filters
    • Various pass/band types
    • Cutoff frequency parameter
  • Amplifier
    • Gain parameter
    • ADSR envelope
  • Stereo panning
    • With LFO and envelope
  • Parameters
    • Immediately update audio when changed
    • Have linear or exponential mappings for enhanced control, e.g. pitch shift (linear) or frequency cutoff (exp)
    • Can be continuous or discrete, e.g. detune (continuous) or pitch shift (discrete notes)
    • Right click to reset back to initial value
  • LFOs
    • Can be synced for improved polyphony
    • Can use standard wave shapes or a random generator
  • Import and export patches as JSON files

How To Run

Access the online version at synthrack.app.

Or download this repository and open index.html in a browser window.

Or download this repository and host it locally: python -m http.server and then open localhost:8000 in your favourite browser.

(Currently only tested in Google Chrome on laptop and Android).

To Do

  • Add preset patches
  • Improve naming of input elements to assist screen readers
  • Try reusing oscillators/nodes instead of creating/disposing
    • This doesn't seem necessary now I fixed the memory leak

Future Considerations

  • Create a noise oscillator
  • Add reverb/echo/delay effects etc.
  • Add recording/editing functionality
    • Basic sound capture/layering/playback
    • MIDI capture for editing and parameter automation
  • Utilise key press velocity from MIDI messages
  • Add "hold" button to keep keys pressed while editing
  • Add a module mute button
  • Add a master volume control
  • Add other non-keyboard controllers
    • Use the trackpad like a thermin?
    • Modify incoming audio files
  • Consider collapsible sections, i.e. modules or components
  • Add wood skins and metal skins etc.

synth's People

Contributors

calumraine 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.