Skip to content

FigBug/Gin

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Gin

Build Windows Build macOS Build Linux codecov

A comprehensive collection of extra modules for JUCE, providing professional-grade utilities, UI components, DSP processors, and more for audio plugin and application development.

Table of Contents

Prerequisites

  • JUCE 7.0+ (included as submodule)
  • CMake 3.15+
  • C++20 compatible compiler
  • Supported Platforms: Windows, macOS (10.13+), Linux

Installation

Adding Gin to Your CMake Project

  1. Add Gin as a submodule or clone into your project:
git submodule add https://github.com/FigBug/Gin.git libs/Gin
  1. 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
)
  1. Include Gin modules in your code:
#include <gin/gin.h>
#include <gin_plugin/gin_plugin.h>

Modules

Gin is organized into focused modules that can be included independently:

Module Description
gin Core utilities, file system watching, download manager, math utilities
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
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_webp WebP image format support

Features

Core Utilities (gin)

  • 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

Graphics & Images (gin_graphics)

  • ImageEffects - Sepia, vignette, soften, sharpen, invert, contrast, hue, saturation, stack blur
  • ImageMetadata - Read/write JPEG and PNG metadata
  • BMPImageFormat - Windows Bitmap support

DSP & Audio (gin_dsp)

  • Oscillators - Wavetable oscillator with multiple waveforms
  • Effects - Compressor, reverb, filters
  • Envelopes - ADSR envelope generator
  • PerlinNoise - Natural-sounding noise generation
  • Modulation - LFO and modulation matrix

GUI Components (gin_gui)

  • 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

Network (gin_network)

  • WebSocket - Full-featured WebSocket client
  • SecureStreamingSocket - SSL/TLS socket support
  • OpenStreetMaps - Tile fetching from OSM servers

Examples

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

Building the Examples

cd Gin
cmake -B build -DCMAKE_BUILD_TYPE=Release
cmake --build build

The built applications will be in build/examples/.

Quick Start Example

#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);

Help & Documentation

Credits

Gin incorporates and builds upon several excellent open-source libraries and algorithms:

Special Thanks

reFX Audio Software Inc. for supporting the development of Gin.

About

A few extras for juce

Topics

Resources

License

Stars

Watchers

Forks

Sponsor this project

 

Packages

No packages published