A modern, web-based synthesizer built with React, TypeScript, and Web Audio API. This project creates a Moog-inspired synthesizer experience in the browser with a beautiful, authentic interface that draws inspiration from classic Moog synthesizers.
- 3 Oscillators with multiple waveforms (sine, sawtooth, triangle, square)
- Mixer for blending oscillator outputs
- Noise Generator with white and pink noise options
- Filter Section with lowpass, highpass, and bandpass filters
- ADSR Envelope for dynamic sound shaping
- LFO (Low Frequency Oscillator) with multiple routing options
- Reverb with adjustable decay and EQ
- Distortion with output gain and EQ controls
- Delay with time and feedback controls
- Modulation Wheel for real-time parameter control
- Virtual Keyboard with mouse and keyboard support
- MIDI Support for external controller integration
- Preset System with classic Moog-inspired sounds
- Arpeggiator for rhythmic patterns
- Power Button and authentic UI styling
- Web Audio API for high-quality audio processing
- Real-time parameter updates with smooth transitions
- Responsive design that works on desktop and tablet
- TypeScript for type safety and better development experience
- Node.js (version 16 or higher)
- npm or yarn package manager
-
Clone the repository
git clone <repository-url> cd model-1
-
Install dependencies
npm install
-
Start the development server
npm run dev
-
Open your browser Navigate to
http://localhost:5173to see the synthesizer in action.
npm run buildThe built files will be in the dist directory.
- Power On: Click the power button to activate the synthesizer
- Select Preset: Choose from the preset dropdown to load classic sounds
- Play Notes: Use your computer keyboard (QWERTY layout) or click the virtual keyboard
- Adjust Parameters: Turn the knobs and sliders to shape your sound
- Computer Keyboard: Use the QWERTY keys to play notes
- Octave Control: Use the octave buttons to change pitch range
- Modulation: Use the modulation wheel for real-time parameter changes
Connect a MIDI controller to your computer and the synthesizer will automatically detect and respond to:
- Note on/off messages
- Pitch bend
- Modulation wheel
- Control change messages
src/
├── components/ # React components
│ ├── ADSR/ # Envelope controls
│ ├── Arpeggiator/ # Arpeggiator interface
│ ├── Effects/ # Reverb, delay, distortion
│ ├── Keyboard/ # Virtual keyboard
│ ├── Knob/ # Reusable knob component
│ ├── Mixer/ # Oscillator mixer
│ ├── Modifiers/ # Filter and LFO controls
│ ├── Noise/ # Noise generator
│ ├── OscillatorBank/ # Oscillator controls
│ ├── PresetSelector/ # Preset management
│ └── Synth/ # Main synthesizer component
├── hooks/ # Custom React hooks
├── store/ # Zustand state management
├── styles/ # CSS modules and global styles
├── synth/ # Audio engine and presets
└── types/ # TypeScript type definitions
- React 19 - UI framework
- TypeScript - Type safety
- Vite - Build tool and dev server
- Zustand - State management
- Web Audio API - Audio processing
- Tone.js - Audio framework
- TunaJS - Audio effects
- CSS Modules - Styled components
- PostCSS - CSS processing
Edit src/synth/presets.ts to add new synthesizer presets:
"Your Preset Name": {
octave: 0,
modMix: 50,
oscillators: [
{
waveform: "sawtooth",
frequency: 0,
range: "8",
volume: 0.8,
detune: 0,
},
// ... more oscillators
],
// ... other parameters
}The project uses CSS Modules for component styling. Global styles are in src/styles/ and component-specific styles are co-located with their components.
npm run dev- Start development servernpm run build- Build for productionnpm run preview- Preview production buildnpm run lint- Run ESLintnpm run lint:css- Run Stylelint
The project uses:
- ESLint for JavaScript/TypeScript linting
- Stylelint for CSS linting
- Prettier for code formatting
This project is licensed under the MIT License - see the LICENSE file for details.
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add some amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
- Inspired by classic Moog synthesizer designs and interfaces
- Built with modern web technologies for accessibility and performance
- Special thanks to the Web Audio API community
Note: This synthesizer is designed for educational and entertainment purposes. For professional audio production, consider using dedicated hardware or software synthesizers.