• Stars
    star
    382
  • Rank 112,241 (Top 3 %)
  • Language
    C++
  • License
    Boost Software Li...
  • Created over 6 years ago
  • Updated over 1 year ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

FM Chip Synthesizer — OPL & OPN — VST/LV2/Standalone

ADLplug

Synthesizer plugin for ADLMIDI and OPNMIDI (VST/LV2)

screenshot

Introduction

This software package provides FM synthesizer plugins, based on OPL3 and OPN2 sound chip emulations.
The emulations and the drivers are provided by libADLMIDI and libOPNMIDI.

  • control of multiple YMF262/YM2612 emulated chips
  • high fidelity emulation, with choice of compromise level (good fidelity/fast, excellent fidelity/slow)
  • synthesis of melodic and percussive instruments
  • extensible polyphony
  • bundled collection of instruments
  • support for dynamic parameterization and automation
  • rigorous implementation of the MIDI standard
  • multi-channel operation with General MIDI compatibility
  • ability to synthesize entire MIDI files out of the box

Author: Jean Pierre Cimalando
Contributors: Olivier Humbert, Christopher Arndt, Bruce Sutherland, David Runge, Jérémy Frey

Development builds

Build Status

You can find automatic builds of the development branch here.

Useful links

FM core characteristics

Core Chip Accuracy Speed Rhythm-mode channels Extended panning
DOSBox OPL3 ★★★★★ ★★★★★ ★★
Nuked 1.8 OPL3 ★★★★★ + ★☆☆☆☆ ★★
Nuked 1.7 OPL3 ★★★★★ + ★★★☆☆ ★★
Opal OPL3 ★★★★☆ ★★★☆☆ ☆☆
Java OPL3 ★★★★☆ ☆☆☆☆☆ ★☆
Core Chip Accuracy Speed SSG-EG Extended panning
MAME OPN2 ★★★★★ ★★★★☆ ★★★★☆
Nuked OPN2 ★★★★★ + ☆☆☆☆☆ ★★★★★
Gens OPN2 ★★★☆☆ ★★★★☆ ★☆☆☆☆
Neko Project II Kai OPNA ★★★★☆ ★★★☆☆ ★????
MAME FM OPNA ★★★★★ ★★★☆☆ ★????

Build instructions

Install required dependencies:

  • the CMake build system
  • a C++11 compiler
  • development packages for Linux: Jack, ALSA, Freetype, X11

Compiling

git clone --recursive https://github.com/jpcima/ADLplug.git
mkdir ADLplug/build
cd ADLplug/build
cmake -DCMAKE_BUILD_TYPE=Release ..  #<more build options...>
cmake --build .

This package is able to build several plugins from a single source:

  • to build the OPL3 variant, define the option ADLplug_CHIP to OPL3;
  • to build the OPN2 variant, define the option ADLplug_CHIP to OPN2.
Build option Description
-DADLplug_VST2=ON/OFF Build a VST2 plugin
-DADLplug_VST3=ON/OFF Build a VST3 plugin
-DADLplug_LV2=ON/OFF Build a LV2 plugin
-DADLplug_Standalone=ON/OFF Build a standalone program
-DADLplug_Jack=ON/OFF Build a standalone program for Jack with better features
-DADLplug_CHIP=OPL3/OPN2 Build a variant for the given chip type (default: OPL3)
-DADLplug_PCH=ON/OFF Use precompiled headers, on a compiler which supports it
-DADLplug_ASSERTIONS=ON/OFF Force building with assertions regardless of build type

Installing

sudo cmake --build . --target install

Change Log

dev

  • Fixed state reloading under certain plugin hosts
  • Linked to pthread on platforms where relevant
  • Fixed the user interface using 100% CPU on Windows

1.0.2

  • English translation of the user manual by Bruce Sutherland
  • modified KSL editing behavior to make it linear with regards to attenuation
  • added a build option to link with system-wide libfmt
  • made the resource system compatible with unsigned-char targets

1.0.1

  • updated XG bank by Wohlstand for OPN with new percussion instruments
  • partial rework of the state handling mechanism
  • initial version of Audio Unit; does not pass the validation yet

1.0.0

  • added the Java OPL3 emulator by Robson Cozendey
  • added the Opal OPL3 emulator from Reality Adlib Tracker
  • fixed missing percussion in case the key is released very quickly
  • allowed to play the full drum set on virtual keyboard
  • prevented selection of percussive instruments on melodic channels and vice-versa
  • permitted changing programs using the scroll wheel over the combo box
  • limited the scroll wheel step to 1 for discrete controls
  • displayed the exact value for knob and slider controls
  • supported the rhythm-mode channels for bank files which use it
  • performed more efficient channel management in case of many sustained notes
  • fixed a rare fatal error in case hold pedal is used and channel pressure is high
  • implemented a custom resource system for faster rebuilds
  • changed the user interface in minor ways

1.0.0.beta.5

  • added a new chip: YM2608 (OPNA) using Neko Project II Kai emulation
  • added a new emulator: MAME YM2608
  • allowed to choose a chip rate which matches either OPN2 or OPNA instruments
  • allowed saving and restoring the program selection, part selection and bank name
  • added Non session management capabilities optional-gui, switch
  • hidden a large number of parameters to improve performance under hosts
  • fixed incorrect handling of OPN levels on the graphical interface
  • permitted a VST2 build using VeSTige as a replacement of Steinberg SDK
  • added a CLI flag --version in the JACK standalone
  • added a window icon in the JACK standalone
  • built the macOS standalone as an app bundle

1.0.0.beta.4

  • add a control for master volume
  • support loading SBI instruments
  • support the Non session manager
  • fixed a case when the state loading fallback would fail because of a bad initialization sequence
  • fixed the editor state after closing and reopening under certain hosts
  • allow to reload a saved bank which has no melodic banks or no percussive banks
  • add an ability to delete entire banks
  • memorize the instrument directory between uses
  • update the bank collection for OPN2

1.0.0.beta.3

  • added the ability to add, delete and rename banks and programs
  • support extended key maps with unicode characters
  • fixed a crash at startup when the state is restored before setting up the synthesizer
  • added soft panning support for OPN2
  • fixed a case where parameters would not be synchronized after receiving MIDI program change

1.0.0.beta.2

  • added the CLI flag -a for auto-connection to system outputs in the JACK-only standalone
  • added the freedesktop shortcuts and icons
  • support for keyboard mappings other than QWERTY
  • support setting the keyboard's octave
  • highlighted the keys played via MIDI input
  • made the program selection follow MIDI program change events
  • allowed to install into the GNU standard installation directories
  • we have been selected for the Open Source Music FM Synthesizer Challenge! 🎉

1.0.0.beta.1

  • support of OPN2 synthesis in a distinct plugin
  • fixed the plugin state which would be saved incomplete
  • fixed the extension of OPN2 bank files in the file chooser

1.0.0.alpha.3

  • compensation of MIDI latency at high buffer sizes
  • fixed a mismanagement of the 4-op channel map
  • fixed cases of bad channel allocations following a long idle period
  • improved internal timing precision
  • gained an ability to save and restore the current state
  • added a large collection of embedded banks
  • enhanced the UI in various ways

License

ADLplug consists of various parts distributed under different free software licenses. The parts developed exclusively for this project are Boost licensed. The other parts and respective licenses are indicated here below.

Files License
thirdparty/fmt 3-Clause BSD
thirdparty/JUCE GNU GPL v3
thirdparty/libADLMIDI GNU LGPL v3, GNU LGPL v2.1, GNU GPL v3, Public Domain
thirdparty/libOPNMIDI GNU LGPL v3, GNU LGPL v2.1, GNU GPL v3
thirdparty/simpleini MIT
thirdparty/vst3sdk GNU GPL v3
thirdparty/nonlib ISC
thirdparty/wopl GNU LGPL v3
thirdparty/wopn GNU LGPL v3
sources/opl3/adl/measurer GNU GPL v3
sources/opl3/adl/measurer/chips/dosbox GNU GPL v2+
sources/opn2/adl/measurer GNU GPL v3
sources/opn2/adl/measurer/chips/mame GNU GPL v2+
sources/opl3/ui/components/opl3_waves.cc GNU LGPL v2.1

More Repositories

1

ysfx

Hosting library for JSFX
C++
164
star
2

DelayArchitect

A visual, musical editor for delay effects
C++
110
star
3

string-machine

Digital model of electronic string ensemble instrument
C++
60
star
4

spectacle

Realtime graphical spectrum analyzer
C++
60
star
5

fast-filters

Implementation of FIR and IIR filters optimized for SIMD processing
C++
46
star
6

HybridReverb2

Reverb effect using hybrid impulse convolution
C++
41
star
7

smf-dsp

Advanced MIDI file player
C++
41
star
8

stone-phaser

A classic analog phaser effect, made with DPF and Faust
C++
40
star
9

adljack

OPL3/OPN2 synthesizer using ADLMIDI and OPNMIDI, for Jack and cross-platform audio
C
38
star
10

Hera

Juno 60 emulation synthesizer
C++
36
star
11

ring-buffer

Ring buffer library for C++17
C++
28
star
12

ensemble-chorus

Digital model of electronic string ensemble chorus
C++
28
star
13

faustpp

A post-processor for faust, which allows to generate with more flexibility
Python
23
star
14

Bass21

Bass21 tone plugin
C++
23
star
15

fmidi

A library to read and play back MIDI files
C++
23
star
16

zita-resampler-mod

Zita-resampler (personal fork). This is a C++ library for sample rate conversion of audio signals.
C++
20
star
17

quadrafuzz

Multi-band fuzz distortion plugin
C++
16
star
18

fverb

Plugin version of reverb effect to include in sfizz
C++
16
star
19

rezonateur

Virtual-analog 3-band resonator
C++
14
star
20

pd-externals

Externals for Puredata
C++
12
star
21

pd-visualization

Real time signal visualizers for Pure Data
C++
12
star
22

fast-track-ultra

Automatic setup of M-Audio Fast Track Ultra for JACK on Linux
Shell
11
star
23

skeleton.lv2

Quick-start template for LV2 plugins with GUI
C
10
star
24

midifuzz

MIDI Fuzzer to test plugin robustness, library and LV2 plugin
C++
7
star
25

midibench

MIDI tool for developer
C++
7
star
26

mpe-surface

Application to use an Android tablet as MIDI Polyphonic Expression keyboard (MPE)
C++
6
star
27

dpf-imgui-example

DPF example plugin with Dear ImGui user interface
C++
6
star
28

bbd-delay-experimental

Testing grounds for newer BBD delay implementation
C++
6
star
29

faustmd

Static metadata generator for Faust/C++
C++
5
star
30

ssr

A sympathetic string resonator
C++
5
star
31

fmprog

Automatic FM patch programmer with Genetic Algorithm
C
5
star
32

claptrap

C++
5
star
33

midiwake

A utility to block the screen saver during MIDI activity
C++
5
star
34

zbessel

Complex Bessel functions
C++
4
star
35

spectral-profiler

Real-time frequency response analyzer for JACK
C++
4
star
36

cws80

??? synthesizer (INCOMPLETE)
C
4
star
37

cl-why

(X)HTML generation macros, fork of CL-WHO
Common Lisp
3
star
38

juce-linux-patches

Repository of JUCE patches for Linux functionality not available in upstream
3
star
39

rc-effect-playground

mystery audio effect (WIP)
C++
3
star
40

cmus-plugin-vgm

Video Game Music file support for cmus (vgm/vgz/dro/s98)
C++
3
star
41

AuRez

Portable compiler of AudioUnit resource forks
C++
3
star
42

BitWizzard

C++
3
star
43

dessiner-un-son

Sound drawing software
C++
3
star
44

AppImage-OpenMPT

Custom AppImage for OpenMPT with bundled Wine
Makefile
3
star
45

amfm

AM/FM DAFX (it does not work yet, do not use it)
C++
3
star
46

libdunemusic

C++
3
star
47

HybridReverb2-impulse-response-database

Impulse response database for HybridReverb2
2
star
48

opl3-time-measurement

Experiment for time measurements on OPL3
C
2
star
49

arch-mingw-w64

MinGW-w64 packages for personal CI builds
Shell
2
star
50

stone.lv2

Testing repository for phaser (convert this to DPF later...)
Makefile
2
star
51

amplifier-profiling

Frequency response analyser used for amplifier profiling
C++
2
star
52

simple-resampler

Windowed sinc resampler
C++
2
star
53

wavetables-in-faust

C++
1
star
54

coreutil

C++ utility library
C++
1
star
55

bin2audio

Convertit les fichiers binaires en échantillons de bruit audio
C++
1
star
56

faust-misc-things

Faust
1
star
57

EarlyReflections

Experimentation on reverb ER, stereo, scaling
C++
1
star
58

wopl-textconv

A tool to compare WOPL/WOPN timbre banks as text, integrated with git-diff
C
1
star
59

sfzero-lite

A simple SFZ player plugin (minus Juce dependency, WIP)
C++
1
star
60

lv2-plugin-checker

LV2 Plugin Checker
C++
1
star
61

timidityplus

TiMidity++ from ZMusic, just the library
C++
1
star
62

zita-resampler-callback

Callback-based API for Zita-resampler
C++
1
star
63

dezing

Convertit en français classique une traduction gettext PO écrite en inclusif.
C++
1
star
64

midi-shell

Scheme REPL for sending MIDI commands
Scheme
1
star
65

A55N-raw-samples

1
star
66

miniopl3

A simple mono-timbral OPL3 plugin
C++
1
star
67

WaveTableFactory

C++
1
star
68

dll-bundler

Deployment helper which copies DLL dependencies next to the executable
C++
1
star
69

ElOscuro

Enhanced version of “Rise of the Triad for Linux”.
C
1
star
70

Flw_Piano

Piano widget for FLTK
C++
1
star
71

sbcl-image-builder

Lisp image build for SBCL
Common Lisp
1
star
72

p81z

test repo based on TX81Z example from Soul, with update to accept VMEM patches
C++
1
star
73

JUCE-tests

Small projects with JUCE just for testing
C++
1
star
74

sfz-filters-experimental

C++
1
star
75

jest

JACK client for FAUST processors, using JIT with GCC or Clang compiler
C++
1
star