A comprehensive collection of extra modules for JUCE, providing professional-grade utilities, UI components, DSP processors, and more for audio plugin and application development.
- JUCE 7.0+ (included as submodule)
- CMake 3.15+
- C++20 compatible compiler
- Supported Platforms: Windows, macOS (10.13+), Linux
- Add Gin as a submodule or clone into your project:
git submodule add https://github.com/FigBug/Gin.git libs/Gin- In your
CMakeLists.txt:
add_subdirectory(libs/Gin/modules)
target_link_libraries(YourTarget PRIVATE
gin
gin_plugin # For audio plugins
gin_dsp # For DSP components
gin_gui # For UI components
# ... other gin modules as needed
)- Include Gin modules in your code:
#include <gin/gin.h>
#include <gin_plugin/gin_plugin.h>Gin is organized into focused modules that can be included independently:
| Module | Description |
|---|---|
| gin | Core utilities, file system watching, download manager, math utilities |
| gin_3d | Basic wireframe 3D rendering engine |
| gin_dsp | Audio DSP components: oscillators, filters, effects, modulation |
| gin_graphics | Image processing, effects, metadata, BMP format support |
| gin_gui | UI components, property editors, layout system, OpenStreetMap integration |
| gin_location | GPS location services (macOS CoreLocation) |
| gin_metadata | Image metadata reading from JPEG, GIF, and PNG files |
| gin_network | WebSocket, secure sockets |
| gin_plugin | Audio plugin utilities and common functionality |
| gin_simd | SIMD-optimized operations |
| gin_standaloneplugin | Standalone audio plugin application wrapper |
| gin_webp | WebP image format support |
- DownloadManager - Asynchronous downloads with zero main thread delay
- FileSystemWatcher - Real-time notifications when files change
- SharedMemory - Inter-process memory sharing
- Ellipse - Geometric calculations for ellipses
- LeastSquaresRegression - Curve fitting to data points
- LinearRegression - Line fitting to data points
- Spline - Smooth cubic spline interpolation
- Integrator - Numerical integration
- ImageEffects - Sepia, vignette, soften, sharpen, invert, contrast, hue, saturation, stack blur
- ImageMetadata - Read/write JPEG and PNG metadata
- BMPImageFormat - Windows Bitmap support
- Oscillators - Wavetable oscillator with multiple waveforms
- Effects - Compressor, reverb, filters
- Envelopes - ADSR envelope generator
- PerlinNoise - Natural-sounding noise generation
- Modulation - LFO and modulation matrix
- Property Components - File chooser, color picker
- Layout System - JSON-based flexible layouts
- Synth UI - Ready-to-use synthesizer interface components
- Map Components - OpenStreetMap integration and tile rendering
- WebSocket - Full-featured WebSocket client
- SecureStreamingSocket - SSL/TLS socket support
- Processor - Extended audio processor with parameter management
- Parameter - Smart parameters with modulation support
- ModMatrix - Flexible modulation matrix system
- Plugin Components - Knobs, ADSR, LFO, and MSEG UI components
- Patch Browser - Preset management and browsing
- EXIF - Read EXIF metadata from images
- IPTC - Read IPTC metadata from images
- XMP - Read XMP metadata from images
- MIPP Integration - Cross-platform SIMD abstraction (SSE/NEON)
- Optimized Math - SIMD-accelerated math operations
- WebPImageFormat - Read and write WebP images
- Vec3/Mat4 - 3D vector and matrix math
- Camera3D - 3D camera with projection
- Scene3D - Scene graph for 3D objects
- Renderer3D - Wireframe rendering to 2D
- StandaloneApp - Application wrapper for running plugins standalone
- StandaloneFilterWindow - Window hosting the plugin UI
- SidebarComponent - Audio analysis display
The repository includes several complete example projects:
- Demo - Comprehensive demonstration of all Gin features
- Synth - Complete synthesizer plugin example
- Effect - Audio effect plugin example
- UnitTests - Test suite for Gin components
cd Gin
cmake -B build -DCMAKE_BUILD_TYPE=Release
cmake --build buildThe built applications will be in build/examples/.
#include <gin/gin.h>
// Use the download manager
gin::DownloadManager dm;
dm.downloadAsync(juce::URL("https://example.com/file.zip"),
[](juce::InputStream* stream) {
// Process downloaded data
});
// Watch a directory for changes
gin::FileSystemWatcher watcher;
watcher.addFolder(juce::File::getSpecialLocation(
juce::File::userDocumentsDirectory));
watcher.addListener(this);
// Use a spline for smooth interpolation
gin::Spline spline;
spline.addPoint({0.0f, 0.0f});
spline.addPoint({1.0f, 1.0f});
float interpolated = spline.get(0.5f);- Discord Community - Get help and discuss Gin
- Developer Blog - Tutorials and articles
- Doxygen API Documentation - Complete API reference
Gin incorporates and builds upon several excellent open-source libraries and algorithms:
- JUCE by Roli - The foundational framework
- Stack Blur by Mario Klingemann - Fast blur algorithm
- muParser by Ingo Berg - Mathematical expression parser
- Spline by Devin Lane - Cubic spline interpolation
- AVIR by Aleksey Vaneev - Image resizing
- easywsclient - WebSocket client implementation
- mbed TLS - SSL/TLS library
- Least Squares Regression - Curve fitting algorithms
reFX Audio Software Inc. for supporting the development of Gin.