All Projects → sjaehn → BSchaffl

sjaehn / BSchaffl

Licence: GPL-3.0 license
MIDI groove quantizer LV2 plugin

Programming Languages

C++
36643 projects - #6 most used programming language
c
50402 projects - #5 most used programming language
objective c
16641 projects - #2 most used programming language
Makefile
30231 projects

Projects that are alternatives of or similar to BSchaffl

Ardour
Mirror of Ardour Source Code
Stars: ✭ 2,318 (+8178.57%)
Mutual labels:  midi, lv2
midiomatic
A collection of MIDI filter, generator and processor plugins
Stars: ✭ 23 (-17.86%)
Mutual labels:  midi, lv2
Jexer
Java Text User Interface
Stars: ✭ 174 (+521.43%)
Mutual labels:  swing
AnimatedEnvironmentLayer
A custom arcgis js api layer to display GRIB data formatted as json as animated particles on a canvas
Stars: ✭ 41 (+46.43%)
Mutual labels:  velocity
Darklaf
Darklaf - A themeable swing Look and Feel based on Darcula-Laf
Stars: ✭ 249 (+789.29%)
Mutual labels:  swing
Wepush
专注批量推送的小而美的工具,目前支持:模板消息-公众号、模板消息-小程序、微信客服消息、微信企业号/企业微信消息、阿里云短信、阿里大于模板短信 、腾讯云短信、云片网短信、E-Mail、HTTP请求、钉钉、华为云短信、百度云短信、又拍云短信、七牛云短信
Stars: ✭ 2,597 (+9175%)
Mutual labels:  swing
oddvoices
An indie singing synthesizer
Stars: ✭ 4 (-85.71%)
Mutual labels:  midi
Snake
A simple snake game in java - Well documented
Stars: ✭ 158 (+464.29%)
Mutual labels:  swing
osmid
osmid is a tool to bridge MIDI and OSC. It is currently in use in Sonic Pi
Stars: ✭ 63 (+125%)
Mutual labels:  midi
Java Javafx Swing Projects Desktop Application Gui Software
All projects are based on ☕ Java(Swing.All projects are database(MySql) connected📂 and compatible to run is🖥️ Desktop(with .exe)🖱️.All projects have a Graphical User Interface(GUI)👨🏻‍💻 that user can communicate and understand the application easily).
Stars: ✭ 245 (+775%)
Mutual labels:  swing
midi2img
MIDI to image and image to MIDI conversion scripts
Stars: ✭ 48 (+71.43%)
Mutual labels:  midi
Cxtouch
View and manage Android devices from PC client based java swing, supporting Windows, Linux and MacOS
Stars: ✭ 229 (+717.86%)
Mutual labels:  swing
Projector Installer
Install, configure and run JetBrains IDEs with Projector Server on Linux or in WSL
Stars: ✭ 197 (+603.57%)
Mutual labels:  swing
Pedalino
Smart wireless MIDI foot controller for guitarists and more.
Stars: ✭ 105 (+275%)
Mutual labels:  midi
Vue Swing
Vue.js wrapper for Swing
Stars: ✭ 193 (+589.29%)
Mutual labels:  swing
MIDI.jl
A Julia library for handling MIDI files
Stars: ✭ 55 (+96.43%)
Mutual labels:  midi
Substance
A modern and high-performant Swing look-and-feel library
Stars: ✭ 163 (+482.14%)
Mutual labels:  swing
Javastud
Official, Main: This is Core/Advance java example series project. It help to learn java step by step using pdf tutorial provided here and corresponding demo project for the eclipse. Tag: Java Student, Java Stud, Stud Java, StudJava, Java Teachers, Studs Quick Start Guide, Studs Java, Object Oriented Programming, Core Java, Java SE, Java EE, Java Enterprise Edition, Java Blog, Java Articles, Java Web, JSP, Servlet, Maven, Spring, Hibernate, Spring-boot, Spring MVC Web, Angular JS, Angular 2, Java Security, Java CRUD, Java Login Example, File Handling, Multi threading, exception handling, Collection classes, Swing, Database, Date Time, Joda Time, JPA.
Stars: ✭ 220 (+685.71%)
Mutual labels:  swing
Systemtray
Cross-platform SystemTray support for Swing/AWT, GtkStatusIcon, and AppIndicator on Java 8+
Stars: ✭ 253 (+803.57%)
Mutual labels:  swing
from-data-to-sound
🎵 Simple Node.js script for transforming data to a MIDI file
Stars: ✭ 33 (+17.86%)
Mutual labels:  midi

B.Schaffl

Groove quantizer LV2 MIDI plugin.

B.Schaffl is a slider / shape-controlled MIDI amp & time stretch plugin to vitalize sequencer-controlled MIDI instruments and to produce shuffle / swing effects.

Key features:

  • MIDI velocity amplification and timing manipulation plugin
  • Swing and shuffle rhythms
  • Pre-generator dynamics
  • Tempo rubato
  • Pattern (sliders) or shape-controlled
  • MIDI filters
  • Smart quantization
  • Group / link individual instances of B.Schaffl
  • Free and open source

screenshot

Installation

a) Install the bschaffl package for your system

Note: This will NOT necessarily install the latest version of B.Schaffl. The version provided depends on the packagers.

b) Use the latest provided binaries

Unpack the provided bschaffl-*.zip or bschaffl-*.tar.xz from the latest release and copy the BSchaffl.lv2 folder to your lv2 directory (depending on your system settings, ~/.lv2/, /usr/lib/lv2/, /usr/local/lib/lv2/, or ...).

c) Build your own binaries in the following three steps.

Step 1: Download the latest published version of B.Schaffl. Or clone or download the master of this repository.

Step 2: Install pkg-config and the development packages for x11, cairo, and lv2 if not done yet. If you don't have already got the build tools (compilers, make, libraries) then install them too.

On Debian-based systems you may run:

sudo apt-get install build-essential
sudo apt-get install pkg-config libx11-dev libcairo2-dev lv2-dev

On Arch-based systems you may run:

sudo pacman -S base-devel
sudo pacman -S pkg-config libx11 cairo lv2

Step 3: Building and installing into the default lv2 directory (/usr/local/lib/lv2/) is easy using make and make install. Simply call:

make
sudo make install

Optional: Standard make and make install parameters are supported. Alternatively, you may build a debugging version using make CPPFLAGS+=-g. For installation into an alternative directory (e.g., /usr/lib/lv2/), change the variable PREFIX while installing: sudo make install PREFIX=/usr. If you want to freely choose the install target directory, change the variable LV2DIR (e.g., make install LV2DIR=~/.lv2) or even define DESTDIR.

Optional: Further supported parameters include LANGUAGE (usually two letters code) to change the GUI language (see customize).

Running

After the installation Ardour, Carla, and any other LV2 host should automatically detect B.Schaffl.

If jalv is installed, you can also call it using one of the supported jalv flavours (jalv.gtk, jalv.gtk3, jalv.qt4, jalv.qt5), like

jalv.gtk https://www.jahnichen.de/plugins/lv2/BSchaffl

to run it (pseudo) stand-alone and connect it to the JACK system.

Note: Jack transport is required to get information about beat / position in the beat(s) or bar(s) mode!

Usage

B.Schaffl is a MIDI converting plugin. It needs a MIDI input and a MIDI output. Thus, it must be placed before an instrument (synth or sampler).

The graphical user interface is divided into thee parts. In the top right you can find the core of the plugin, the sequence editor. The sequence editor contains a visualization of the full sequence from MIDI input (IN), over controls (or a shape) to change the step amplification (AMP) and markers to stretch or shrink the step size (STR) to MIDI output (OUT).

In the bottom right are controllers to directly effect the MIDI editing (sequence size, nr of steps, amp swing, amp randomness, amp process, step swing, step swing randomness, step swing process). The left part contains a menu for global settings (MIDI channel filter, MIDI message filter, smart quantization, latency).

Sequence editor

Amp control mode

The sequence editor supports two different modes. Select between step controlled (sliders) and shape controlled mode. The step controlled mode uses constant amp values for the whole respective step. If you want more flexibility and change the amp value during a step (e. g., for accents), you can use the shape mode.

Slider-controlled amp mode: Step amp controls

Drag (or scroll) the sliders to reduce the velocity of MIDI notes for the respective step.

Shape-controlled amp mode: Amp shape

Alternatively, draw a shape for the reduction of velocity of MIDI notes. Use tools (see toolbox) to set different types of nodes, to cut, copy or paste nodes, to undo, redo or reset changes, and to hide, show or snap to the grid.

Step stretch markers

Drag the stretch markers to manually shrink or stretch the step size.

All stretch markers are set to "auto" by default. This means that all markers are homogeneously distributed and are automatically re-positioned after changes. The markers status is changed to "manual" once a marker is dragged. You can also change the markers status by right-clicking on it. Then you can choose between "auto", "manual" and "enter". This third option allows to enter a new marker position (either as fraction of a sequence or as number of steps) or a new step length (again, either as fraction of a sequence or as number of steps). The marker is set to the new position upon clicking "Apply" and switched to the manual mode. Finally, you can also set all markers at once by pressing the "All markers" buttons in the toolbox.

Toolbox

Symbols Description
convert_to_sliders convert_to_shape Convert shape to sliders or vice versa
marker_tools Set all markers to auto or manual
node_tools Node tools (only in shape-controlled mode)
edit_tools Edit tools: cut, copy and paste (only in shape-controlled mode)
history_tools History: reset, undo and redo
grid_tools Grid: show grid or snap to grid

Sequence size

Set the size of a full sequence ranging from 1/8 to 4 second(s), beat(s), or bar(s). You need Jack transport to get position information to use beat(s) or bar(s) as base.

Number of steps

You can divide each sequence into up to 16 steps.

Amp swing

Step amplification swing. This feature can be used to either reduce velocity of MIDI notes for odd steps or for even steps. Values lower than 1 (down to 1/128) mean reduction of odd step MIDI velocity. Values higher than 1 (up to 128) mean reduction of even step MIDI velocity.

Amp randomness

Symmetrically randomizes the amplification for each MIDI note velocity. An amp randomization value of 0.0 means no randomization. An amp randomization value of 1.0 means full randomization and the resulting MIDI note velocity will be in the range between 0 and two times the unrandomized velocity.

Amp process

Applies plugin amp effects (amp sliders, amp swing, amp randomness) to the MIDI note velocity. A value of 0.0 results in unchanged MIDI note velocity. A value of 1.0 fully applies the plugin amp effects to the MIDI note velocity. Also values outside the 0.0 .. 1.0 range are allowed. A value of -1.0 inversely applies the plugin amp effects to the MIDI note velocity. And a value of 2.0 applies the double plugin amp effects to the MIDI note velocity.

Step swing

Step stretch swing. This feature can be used to compress or to stretch even and odd steps. Values lower than 1 (down to 1/3) mean compression of odd steps for the benefit of the following even step. Values higher than 1 (up to 3) mean stretching of odd steps to the disadvantage of the following even step.

Step swing randomness

Randomizes the start and end positions for each step to both directions. A step swing randomization value of 0.0 means no randomization. A step swing randomization value of 0.5 means half randomization and the step start and end positions are left or rightward-shifted in the range between 0 and the half distance to the respective neighbor step.

Step swing process

Applies plugin amp effects (amp sliders, amp swing, amp randomness) to the step stretch. A value of 0.0 results in unchanged temporal MIDI signal positions. A value of 1.0 fully applies the plugin step stretch effects to the respective MIDI signal positions.

MIDI channel filter

Select the MIDI channels to be processed by the plugin. All non-selected channels are bypassed.

MIDI message filter

Select the MIDI messages (MIDI status byte) to be processed by the plugin. All non-selected messages are bypassed.

MIDI note options

Keep note position

Keeps the note position unaffected from step stretch. Take care, this may cause overlapping notes.

Keep note duration

Keeps the note duration unaffected from step stretch. Take care, this may cause overlapping notes.

If notes overlap

B.Schaffl may temporarily produce overlapping notes if either the note position or the note duration is kept unaffected from step stretch. Overlapping MIDI notes usually end at the first MIDI NOTE_OFF. You may change this behavior to merge both notes or to split to two (ore more) discreet notes.

Note off amp

There are two options to amplify the NOTE_OFF velocity signal. Either amplification with the same value as the NOTE_ON signal or amplification with the amp value for the step/position of the NOTE_OFF signal.

Smart quantization

During live playing and even if in computer-generated sequences, MIDI signals often do not exactly fit into the host-communicated beat/bar pattern. The smart quantization algorithm synchronizes not exactly fitting MIDI input signals (e.g., notes) with the step pattern if the signal is within a user-defined range from the step start or end.

It is recommended to set the range (in steps) to the half size of the shortest expected note for the start.

MIDI input signals can be synchronized just by assignment to a step or by fitting into a step or both. Assignment means that the MIDI input signal is re-assigned to the just starting step if a step starts within the range. Fitting means that all MIDI input signals except NOTE_OFF are moved to the start of a step if the start is within the range. NOTE_OFF signals are moved to the end of a step if the end is within the range. You should combine both for quantization.

Latency

Latency is required if a marker is automatically or manually dragged to the left. The plugin itself calculates the latency by default. This value (in ms) is shown in the top right of the plugin. Alternatively, the user may manually set a fixed latency of up to 192000 frames. It is recommended to manually set this parameter to the maximally expected latency if you automate and/or change step markers, step swing, and/or step swing process during playback.

Latency-correction of time/position data (time, bar, beat) is required for the proper work of B.Schaffl. However, hosts may differently handle latency and time/position data. Some correct it by themselves (as in Ardour 6) others not (Ardour 5). Switch on latency-correction of time/position if the host doesn't correct it by itself.

🔗 Shared data

If you use multiple instances of B.Schaffl you may be interested in sharing the plugin settings between the instances. Click on one of the four shared data fields and the respective plugin instance is linked to the shared data. The plugin instance data are copied to the shared data field if no other plugin instance is linked to this shared data field before (otherwise vise versa).

If you now click on the same shared data box in another plugin instance, both plugin instances get the same data.

Click again on the selected box to unlink the plugin instance from shared data. The plugin now shows the host-provided data.

Note: Shared data are unlinked from host automation.

Customize

You can create customized builds of B.Schaffl using the parameter LANGUAGE (e.g., make LANGUAGE=DE). To create a new language pack, copy src/Locale_EN.hpp and edit the text for the respective definitions. But do not change or delete any definition symbol!

What's new

  • Enter absolute or relative maker positions and step lengths
  • Support keys HOME, END

Acknowledgments

  • Bart Brouns for the original idea plus subsequent ideas about principle and features
  • Robin Gareus for ideas to technically solve rubato-related problems
  • Jatin Chowdhury for ideas to technically solve shared data storage

Links

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].