LiveWebApp -> https://dovvnloading.github.io/NeumaWave-Shaper/
NeumaWave Shaper is a browser-based, polyphonic wavetable synthesizer built on the Web Audio API. It features a fully neumorphic user interface designed for tactile responsiveness and integrates a custom waveform editor allowing users to draw and manipulate oscillator shapes in real-time.
The engine utilizes pure mathematical signal generation without reliance on external audio samples, ensuring a lightweight footprint and infinite sonic possibilities.
- Triple Oscillator Engine: Three independent oscillators (A, B, C) with individual volume, octave, and fine-tune controls.
- Custom Waveform Editor: Interactive HTML5 Canvas visualizer allowing freehand drawing of waveform cycles.
- Algorithmic Generators: Context-menu tools to generate standard shapes (Sine, Saw, Square, Triangle, Noise) or modify existing shapes (Normalize, Smooth, Invert, Rectify, Bitcrush).
- Spectral Unison: Advanced unison stack supporting up to 9 voices per oscillator with spread, detune, and blend controls. Includes multiple distribution modes (Classic, Uniform, Fifth, Octave).
- State Variable Filter: Resonant filter with Lowpass, Highpass, and Bandpass topologies.
- Stereo Delay: BPM-synced or free-running delay with feedback and wet/dry mix.
- Convolution Reverb: Algorithmic impulse response generation for creating realistic or unnatural spaces.
- Dynamics Processing: Integrated master compressor and soft-clipping limiter to manage headroom and add analog-style saturation.
- Neumorphic Design System: Custom CSS implementation of Soft UI principles using complex shadow layering for depth perception.
- Virtual Input: Fully mapped QWERTY keyboard support (FL Studio layout) and an on-screen touch-capable piano.
- Preset Management: JSON-based preset system with save functionality and a digital monitor display.
NeumaWave is built using React 19 and TypeScript, leveraging Vite for the build toolchain.
The audio core (audioEngine.ts) is a singleton class wrapping the browser's AudioContext. It abstracts the node graph management:
- Oscillator Node Generation: When a note is triggered, the engine creates a cluster of
OscillatorNodesbased on the active unison settings. - PeriodicWave Creation: Custom waveforms drawn on the canvas are converted into Real and Imaginary Fourier coefficients using FFT, generating a
PeriodicWaveobject that prevents aliasing. - Signal Chain:
Oscillators -> Panners -> Envelope Gain -> FX Bus -> Filter -> Delay -> Reverb -> Soft Clipper -> Master Gain -> Compressor -> Destination
React handles the UI state (knob positions, active menus), while the Audio Engine maintains the imperative audio graph state. Unidirectional data flow ensures that UI updates (e.g., dragging a knob) immediately propagate to the AudioParam targets (e.g., filterNode.frequency.setTargetAtTime).
- Node.js (v18.0.0 or higher)
- npm or yarn
-
Clone the repository
git clone https://github.com/yourusername/neumawave-shaper.git cd neumawave-shaper -
Install dependencies
npm install
-
Start the development server
npm run dev
-
Build for production
npm run build
- Draw: Left-click and drag inside the visualizer window to draw a single cycle of the waveform.
- Context Menu: Right-click the visualizer to access algorithmic generators (Sine, Triangle, etc.) and modifiers (Smooth, Fold, Drive).
- Knobs: Click and drag vertically to adjust values. Double-click to type a specific value.
- Inputs: Supports both mouse/touch interaction and keyboard input.
- Keyboard Shortcut: The middle row (ASDF...) controls the lower octave, and the top row (QWERTY...) controls the upper octave.
This project is licensed under the MIT License. See the LICENSE file for details.