From b6e002131c7f2e1218ead4f0e4c253c13e75a5d3 Mon Sep 17 00:00:00 2001 From: Petr Semiletov Date: Tue, 13 Aug 2024 14:15:04 +0300 Subject: [PATCH] 4.0.0 --- CMakeLists.txt | 17 +++---- NEWS | 22 +++++---- Source/PluginEditor.cpp | 99 +++++++++++++++----------------------- Source/PluginEditor.h | 13 ++--- Source/PluginProcessor.cpp | 50 ++++++------------- Source/kits.cpp | 2 + docs/about.html | 16 +++--- docs/install.html | 15 +++--- docs/manual.html | 12 +++-- 9 files changed, 104 insertions(+), 142 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index f6a4ef4..39fed30 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -2,7 +2,7 @@ cmake_minimum_required(VERSION 3.15) include(FetchContent) -project(DRUMLABOOH LANGUAGES CXX C VERSION 3.1.0) +project(DRUMLABOOH LANGUAGES CXX C VERSION 4.0.0) message("Compiler ID: ${CMAKE_CXX_COMPILER_ID}") @@ -18,7 +18,6 @@ set(LV2_INSTALL_DIR lib/lv2 CACHE PATH "Specifies where the LV2 libraries should set(VST3_INSTALL_DIR lib/vst3 CACHE PATH "Specifies where the VST3 libraries should be installed") - set(FETCHCONTENT_QUIET FALSE) @@ -117,8 +116,6 @@ endif() - - # default plugin formats #set(JUCE_FORMATS AU VST3 Standalone) set(JUCE_FORMATS VST3 Standalone) @@ -146,11 +143,11 @@ juce_add_plugin(drumlabooh # IS_MIDI_EFFECT TRUE/FALSE # Is this plugin a MIDI effect? EDITOR_WANTS_KEYBOARD_FOCUS TRUE # Does the editor need keyboard focus? # COPY_PLUGIN_AFTER_BUILD TRUE/FALSE # Should the plugin be installed to a default location after building? - PLUGIN_MANUFACTURER_CODE PetR # A four-character manufacturer id with at least one upper-case character - PLUGIN_CODE Petr # A unique four-character plugin id with exactly one upper-case character + PLUGIN_MANUFACTURER_CODE PetR # A four-character manufacturer id with at least one upper-case character + PLUGIN_CODE Petr # A unique four-character plugin id with exactly one upper-case character # GarageBand 10.3 requires the first letter to be upper-case, and the remaining letters to be lower-case - FORMATS ${JUCE_FORMATS} # The formats to build. Other valid formats are: AAX Unity VST AU AUv3 - PRODUCT_NAME "drumlabooh") # The name of the final executable, which can differ from the target name + FORMATS ${JUCE_FORMATS} # The formats to build. Other valid formats are: AAX Unity VST AU AUv3 + PRODUCT_NAME "drumlabooh") # The name of the final executable, which can differ from the target name # `juce_generate_juce_header` will create a JuceHeader.h for a given target, which will be generated # into your build tree. This should be included with `#include `. The include path for @@ -226,8 +223,8 @@ if(MULTI) NEEDS_MIDI_INPUT TRUE # Does the plugin need midi input? VST3_CATEGORIES Instrument Sampler Synth Drum EDITOR_WANTS_KEYBOARD_FOCUS TRUE # Does the editor need keyboard focus? - PLUGIN_MANUFACTURER_CODE PEtR # A four-character manufacturer id with at least one upper-case character - PLUGIN_CODE PetR # A unique four-character plugin id with exactly one upper-case character + PLUGIN_MANUFACTURER_CODE PEtR # A four-character manufacturer id with at least one upper-case character + PLUGIN_CODE PetR # A unique four-character plugin id with exactly one upper-case character # GarageBand 10.3 requires the first letter to be upper-case, and the remaining letters to be lower-case FORMATS ${JUCE_FORMATS} # The formats to build. Other valid formats are: AAX Unity VST AU AUv3 PRODUCT_NAME "drumlabooh-multi") # The name of the final executable, which can differ from the target name diff --git a/NEWS b/NEWS index 6eb777c..30bf410 100644 --- a/NEWS +++ b/NEWS @@ -1,14 +1,18 @@ - Drumlabooh 3.1.0 + Drumlabooh 4.0.0 - Hello! - Drumlabooh now supports (currently in Drumlabooh kit format only) Round Robin and Random Order options for the sample layers. This features are used at two new drum kits those are bundled with the plugin: + What's new? + The first and visible one - "Analog" saturator slider at the main screen, applied to the whole mix at the end of the signal flow. Move the slider to make tiny and weak drums bigger and stronger, if that you need. + This version also introduces new multi-sampling mode, where the engine plays sample layers according to MIDI velocity, but the velocity's value is not included to the final signal calculation formula. It's useful when we have too quiet sampled layers. Read https://github.com/psemiletov/drum_sklad for the details of such option at the drumkit. + New compilation flag for the packagers - use cmake -DINSTALLKITS=OFF to disable fetching and installing the drumkits, so now you can build just the package with the binaries, and make separated package with kits from https://github.com/psemiletov/drum_sklad/archive/refs/heads/main.zip + Speaking of the kits. Now you can place them also to $HOME/drum_sklad (to simpilify keeping them up-to-date in the case of the manual installing/updating via git). + And, the new kits: + + 1. Gretch Jazzkit - sampled from famous Gretch drums and cymbals, compiled from C0 sample packs of Bigjoedrummer and Shpira, and includes, among others: Gretsch Cat Maple 22 Bass Drum, Premier Artist Maple snare 14x5.5, +Gretsch Catalina Maple floor tom 14 inch +Gretsch Catalina Maple tom 12 inch, Gretsch Catalina Maple tom 10 inch, Gretsch Catalina Maple tom 8 inch. - 1. Ludwig Sixties (based on free Scott McLean's Ludwig Oyster Blue Pearl Drum Kit for Reaper). It contains samples from: Ludwig 5"x14" snare drum (1965), Ludwig 5"x14" snare drum (1967), Ludwig 14"x22" kick drum (1968), Ludwig 8"x12" tom tom drum (1969), Ludwig 9"x13" tom tom drum (1969), Ludwig 14"x14" floor tom drum (1969), 13" Zildjian Thin Crash, -14" Zildjian New Beat Hihats, 15" Zildjian Thin Crash, 15" Wuhan China Cymbal, 16" Zildjian Thin Crash, 17" Zildjian Thin Crash, -20" Zildjian Ping Ride. - - 2. Ludwig Basic (based on free "Ludwig whole kit with Cymbals" by M-Rose Productions/Gyom Amphoux, plus hihats from Scott McLean). + 2. The Almighty Sound Drumkit - another acoustic drumkit at this update, sampled by the member rock band The Almighty Sound, Paul Xavier Luke. Includes samples: 1966 Ludwig Acrolite snare drum, 20" Zildjian Ride Cymbal, 16" Yamaha DP Floor Tom, 22" Yamaha DP Kick Drum, 13" Yamaha DP Riding Tom, Paiste 18" Crash Cymbal, Sabian B8 Pro Hi Hat/ - Other changes/fixes: the documentation update, engine fix to handle non-existed files, etc. + 3. Kits of sampled rare old drum machines: MTI AO-1, GEM Drum15 Stay tuned, Peter Semiletov! diff --git a/Source/PluginEditor.cpp b/Source/PluginEditor.cpp index 7ecacdb..04befad 100644 --- a/Source/PluginEditor.cpp +++ b/Source/PluginEditor.cpp @@ -1,13 +1,12 @@ /* -written at 2023 by Peter Semiletov +written at 2023-24 by Peter Semiletov this code is the public domain - */ +*/ #include "PluginProcessor.h" #include "PluginEditor.h" - #include "kits.h" #include "utl.h" #include "dsp.h" @@ -15,9 +14,6 @@ this code is the public domain #define XFILLER 4 #define YFILLER 16 -//#define WINDOW_HEIGHT 580 -//#define WINDOW_WIDTH 790 - CDocumentWindow::CDocumentWindow (const String &name, @@ -54,8 +50,6 @@ CFx::CFx() int yoffs = YFILLER * 2; - //ANALOG /////////////////////////////// - addChildComponent (gr_group_analog); gr_group_analog.setText ("ANALOG"); @@ -81,11 +75,9 @@ CFx::CFx() gr_group_analog.setVisible (true); - xoffs = gr_group_analog.getWidth() + XFILLER * 2; yoffs = YFILLER * 2; - //LP /////////////////////////////// addChildComponent (gr_group_lp); @@ -103,22 +95,18 @@ CFx::CFx() sl_lp_cutoff.setTopLeftPosition (xoffs, yoffs); sl_lp_cutoff.setSize (68, 32); - sl_lp_cutoff.setSliderStyle (juce::Slider::LinearHorizontal); sl_lp_cutoff.setTextBoxStyle (juce::Slider::TextBoxBelow, false, 80, 20); - sl_lp_cutoff.setTooltip ("Cutoff"); xoffs += sl_lp_cutoff.getWidth(); xoffs += XFILLER; - addAndMakeVisible (sl_lp_reso); + sl_lp_reso.setTopLeftPosition (xoffs, yoffs); sl_lp_reso.setSize (68, 32); - sl_lp_reso.setSliderStyle (juce::Slider::LinearHorizontal); - sl_lp_reso.setTextBoxStyle (juce::Slider::TextBoxBelow, false, 80, 20); sl_lp_reso.setTooltip ("Reso"); @@ -152,21 +140,18 @@ CFx::CFx() sl_hp_cutoff.setTopLeftPosition (xoffs, yoffs); sl_hp_cutoff.setSize (68, 32); - sl_hp_cutoff.setSliderStyle (juce::Slider::LinearHorizontal); sl_hp_cutoff.setTextBoxStyle (juce::Slider::TextBoxBelow, false, 80, 20); - sl_hp_cutoff.setTooltip ("Cutoff"); xoffs += sl_hp_cutoff.getWidth(); xoffs += XFILLER; - addAndMakeVisible (sl_hp_reso); + sl_hp_reso.setTopLeftPosition (xoffs, yoffs); sl_hp_reso.setSize (68, 32); sl_hp_reso.setSliderStyle (juce::Slider::LinearHorizontal); - sl_hp_reso.setTextBoxStyle (juce::Slider::TextBoxBelow, false, 80, 20); sl_hp_reso.setTooltip ("Reso"); @@ -182,7 +167,6 @@ CFx::CFx() setSize (gr_group_analog.getWidth() + XFILLER + gr_group_lp.getWidth() + XFILLER * 2, gr_group_lp.getHeight() + gr_group_lp.getHeight() + YFILLER * 3); - //setAlwaysOnTop(true); } @@ -201,7 +185,6 @@ CFx::~CFx() att_analog = nullptr; att_analog_amount = nullptr; - } @@ -219,7 +202,6 @@ void CLed::paint(Graphics& g) CDrumCell::CDrumCell() { addChildComponent (fx); - addChildComponent (gr_group); int xoffs = XFILLER * 2; @@ -294,10 +276,8 @@ CDrumCell::CDrumCell() gr_group.setVisible (true); gr_group.setSize (xoffs, 32 + YFILLER + YFILLER); - setSize (xoffs + XFILLER, 32 + YFILLER + YFILLER); - bt_fx.onClick = [this] { if (! wnd_fx) { @@ -317,7 +297,6 @@ CDrumCell::CDrumCell() wnd_fx->setVisible (! wnd_fx->isVisible()); wnd_fx->setTopLeftPosition (bt_fx.getScreenX() + bt_fx.getWidth(), bt_fx.getScreenY() + bt_fx.getHeight()); }; - } #else @@ -338,7 +317,6 @@ CDrumCell::CDrumCell() xoffs += led.getWidth(); xoffs += XFILLER; - addAndMakeVisible (cell_label); cell_label.setTopLeftPosition (xoffs, YFILLER); @@ -378,27 +356,22 @@ CDrumCell::CDrumCell() wnd_fx->setContentNonOwned (&fx, true); } - if (! wnd_fx) + if (! wnd_fx) return; - if (wnd_fx->isOnDesktop()) + if (wnd_fx->isOnDesktop()) wnd_fx->removeFromDesktop(); - else + else wnd_fx->addToDesktop();//ComponentPeer::StyleFlags::windowIsTemporary | ComponentPeer::StyleFlags::windowHasTitleBar | ComponentPeer::StyleFlags::windowHasCloseButton); wnd_fx->setVisible (! wnd_fx->isVisible()); wnd_fx->setTopLeftPosition (bt_fx.getScreenX() + bt_fx.getWidth(), bt_fx.getScreenY() + bt_fx.getHeight()); }; - } - #endif - - - CDrumCell::~CDrumCell() { if (wnd_fx) @@ -457,7 +430,6 @@ void CDrumCell::attach_params (CAudioProcessorEditor *ed, int cellno) fx.att_analog_amount.reset (new juce::AudioProcessorValueTreeState::SliderAttachment (ed->valueTreeState, param_name, fx.sl_analog_amount)); } - #else //MULTICHANNEL VERSION @@ -465,7 +437,6 @@ void CDrumCell::attach_params (CAudioProcessorEditor *ed, int cellno) { cell_number = cellno; - std::string param_name = "lp" + std::to_string (cell_number); fx.att_lp.reset (new juce::AudioProcessorValueTreeState::ButtonAttachment (ed->valueTreeState, param_name, fx.bt_lp)); @@ -549,7 +520,6 @@ void CAudioProcessorEditor::load_kit (const std::string &kitpath) } - CAudioProcessorEditor::CAudioProcessorEditor (CAudioProcessor& parent, juce::AudioProcessorValueTreeState& vts) : AudioProcessorEditor (&parent), audioProcessor (parent), @@ -571,7 +541,7 @@ CAudioProcessorEditor::CAudioProcessorEditor (CAudioProcessor& parent, juce::Aud cmb_drumkit_selector.setTextWhenNoChoicesAvailable ("NO DRUMKITS FOUND"); */ - cmb_drumkit_selector.setText ("CLICK HERE TO SELECT THE DRUMKIT", juce::NotificationType::dontSendNotification ); + cmb_drumkit_selector.setText ("CLICK HERE TO SELECT THE DRUMKIT", juce::NotificationType::dontSendNotification); cmb_drumkit_selector.setScrollWheelEnabled (true); cmb_drumkit_selector.setTooltip ("Select from installed drum kits"); @@ -584,18 +554,17 @@ CAudioProcessorEditor::CAudioProcessorEditor (CAudioProcessor& parent, juce::Aud cmb_drumkit_selector.addListener (this); cmb_drumkit_selector.setTopLeftPosition (xoffs, 8); - bt_file_open.setButtonText ("Or select file"); addAndMakeVisible (bt_file_open); bt_file_open.onClick = [this] { - dlg_fileopen = std::make_unique ("Select file to load...", - File::getSpecialLocation (juce::File::userHomeDirectory)); + dlg_fileopen = std::make_unique ("Select file to load...", + File::getSpecialLocation (juce::File::userHomeDirectory)); - auto folderChooserFlags = juce::FileBrowserComponent::openMode; + auto folderChooserFlags = juce::FileBrowserComponent::openMode; - dlg_fileopen->launchAsync (folderChooserFlags, [this] (const juce::FileChooser& chooser) + dlg_fileopen->launchAsync (folderChooserFlags, [this] (const juce::FileChooser& chooser) { juce::File f (dlg_fileopen->getResult()); if (! f.exists()) @@ -653,7 +622,6 @@ CAudioProcessorEditor::CAudioProcessorEditor (CAudioProcessor& parent, juce::Aud drumcells_viewer.setSize (drumcells_container.getWidth() + (XFILLER * 5), 480); drumcells_viewer.setScrollBarThickness (24); - drumcells_group.setTopLeftPosition (xoffs, yoffs); drumcells_group.setSize (drumcells_viewer.getWidth() + (XFILLER * 3), 480 + (YFILLER * 2)); @@ -667,7 +635,6 @@ CAudioProcessorEditor::CAudioProcessorEditor (CAudioProcessor& parent, juce::Aud bt_file_open.setTopLeftPosition (cmb_drumkit_selector.getRight() + XFILLER, 8); bt_file_open.setSize (64, 48); - addAndMakeVisible (drumcells_viewer); @@ -759,9 +726,9 @@ CAudioProcessorEditor::CAudioProcessorEditor (CAudioProcessor& parent, juce::Aud gr_options.setSize (gr_kitinfo.getWidth(), sl_base_note.getHeight() + YFILLER + bt_ignore_midi_velocity.getHeight() + YFILLER * 2); - #endif +#ifndef MULTICHANNEL //////////////NEW GLOBAL ANALOG addAndMakeVisible (bt_global_analog_on); @@ -781,16 +748,8 @@ CAudioProcessorEditor::CAudioProcessorEditor (CAudioProcessor& parent, juce::Aud sl_global_analog_amount.setTextBoxStyle (juce::Slider::TextBoxBelow, false, 80, 20); sl_global_analog_amount.setColour (juce::Slider::thumbColourId, juce::Colours::orange); - att_global_analog_amount.reset (new juce::AudioProcessorValueTreeState::SliderAttachment (valueTreeState, "global_analog_amount", sl_global_analog_amount)); - - - - //sl_global_analog_amount.setTooltip ("Pan"); - - - - ////////////// + addAndMakeVisible (l_plugin_name); l_plugin_name.setSize (180 + XFILLER, 36); @@ -800,11 +759,31 @@ CAudioProcessorEditor::CAudioProcessorEditor (CAudioProcessor& parent, juce::Aud addAndMakeVisible (l_plugin_author); l_plugin_author.setSize (180 + XFILLER, 24); - l_plugin_author.setTopLeftPosition (gr_options.getX() + l_plugin_name.getWidth() + XFILLER, /*l_plugin_name.getBottom()*/bt_global_analog_on.getBottom() + YFILLER); + l_plugin_author.setTopLeftPosition (gr_options.getX() + l_plugin_name.getWidth() + XFILLER, bt_global_analog_on.getBottom() + YFILLER); + +// l_plugin_author.setTopLeftPosition (l_plugin_name.getX(), /*l_plugin_name.getBottom()*/bt_global_analog_on.getBottom() + YFILLER); + l_plugin_author.setText (juce::CharPointer_UTF8("by Peter Semiletov"), juce::NotificationType::dontSendNotification); + //l_plugin_author.setFont (f_logo); + +#else + + addAndMakeVisible (l_plugin_name); + l_plugin_name.setSize (180 + XFILLER, 36); + l_plugin_name.setTopLeftPosition (gr_options.getX(), gr_options.getBottom() + YFILLER); + l_plugin_name.setText (juce::CharPointer_UTF8("DRUMLABOOH"), juce::NotificationType::dontSendNotification); + l_plugin_name.setFont (f_logo); + + addAndMakeVisible (l_plugin_author); + l_plugin_author.setSize (180 + XFILLER, 24); + l_plugin_author.setTopLeftPosition (gr_options.getX() + l_plugin_name.getWidth() + XFILLER, l_plugin_name.getY()); // l_plugin_author.setTopLeftPosition (l_plugin_name.getX(), /*l_plugin_name.getBottom()*/bt_global_analog_on.getBottom() + YFILLER); l_plugin_author.setText (juce::CharPointer_UTF8("by Peter Semiletov"), juce::NotificationType::dontSendNotification); //l_plugin_author.setFont (f_logo); + +#endif + + addAndMakeVisible (hl_homepage); hl_homepage.setSize (280 + XFILLER, 24); @@ -826,15 +805,14 @@ CAudioProcessorEditor::CAudioProcessorEditor (CAudioProcessor& parent, juce::Aud CAudioProcessorEditor::~CAudioProcessorEditor() { - - att_global_analog_amount = nullptr; att_ignore_midi_velocity = nullptr; - att_global_analog_on = nullptr; att_base_note = nullptr; - #ifndef MULTICHANNEL +#ifndef MULTICHANNEL att_pan_mode = nullptr; + att_global_analog_amount = nullptr; + att_global_analog_on = nullptr; #endif } @@ -926,7 +904,6 @@ void CTimer::hiResTimerCallback() if (! uplink->audioProcessor.drumkit) return; - for (int i = 0; i < uplink->audioProcessor.drumkit->v_samples.size(); i++) { bool actv = uplink->audioProcessor.drumkit->v_samples[i]->active; diff --git a/Source/PluginEditor.h b/Source/PluginEditor.h index fba77f0..1c81661 100644 --- a/Source/PluginEditor.h +++ b/Source/PluginEditor.h @@ -175,10 +175,9 @@ class CDrumCell: public juce::Component/*, JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (CDrumCell) }; - - #endif + class CAudioProcessorEditor: public juce::AudioProcessorEditor, public juce::Button::Listener, public juce::ComboBox::Listener, @@ -198,6 +197,9 @@ class CAudioProcessorEditor: public juce::AudioProcessorEditor, juce::ToggleButton bt_ignore_midi_velocity; + +#ifndef MULTICHANNEL + std::unique_ptr att_global_analog_on = nullptr; juce::ToggleButton bt_global_analog_on; @@ -205,8 +207,6 @@ class CAudioProcessorEditor: public juce::AudioProcessorEditor, juce::Slider sl_global_analog_amount; -#ifndef MULTICHANNEL - std::unique_ptr att_pan_mode; juce::Label l_pan_mode { {}, "Pan mode" }; juce::ComboBox cmb_pan_mode; @@ -232,7 +232,6 @@ class CAudioProcessorEditor: public juce::AudioProcessorEditor, juce::HyperlinkButton hl_homepage; - juce::Font f_sitelink { 20.0f, juce::Font::bold}; juce::Font f_logo { 30.0f, juce::Font::bold}; @@ -243,7 +242,6 @@ class CAudioProcessorEditor: public juce::AudioProcessorEditor, juce::Component drumcells_container; juce::Viewport drumcells_viewer; - juce::Label l_drumkit_name; juce::TextButton bt_drumkit_info; @@ -263,8 +261,7 @@ class CAudioProcessorEditor: public juce::AudioProcessorEditor, void kit_changed(); void sliderValueChanged (juce::Slider* slider) override; - void comboBoxChanged(juce::ComboBox *comboBox) override; - + void comboBoxChanged(juce::ComboBox* comboBox) override; void buttonClicked (juce::Button* button) override; diff --git a/Source/PluginProcessor.cpp b/Source/PluginProcessor.cpp index d5a5851..3772cf1 100644 --- a/Source/PluginProcessor.cpp +++ b/Source/PluginProcessor.cpp @@ -247,7 +247,6 @@ CAudioProcessor::~CAudioProcessor() const juce::String CAudioProcessor::getName() const { - // return JucePlugin_Name; #ifndef MULTICHANNEL @@ -258,11 +257,9 @@ const juce::String CAudioProcessor::getName() const juce::String s = "drumlabooh-multi"; - #endif return s; - } @@ -485,7 +482,7 @@ void CAudioProcessor::processBlock (juce::AudioBuffer& buffer, juce::Midi CDrumSample *s2 = drumkit->v_samples[i]; //point to the sample if (s2->hihat_open) s2->untrigger_sample(); - } + } } } @@ -586,21 +583,11 @@ void CAudioProcessor::processBlock (juce::AudioBuffer& buffer, juce::Midi channel_data[drum_sample_index][out_buf_offs] = fl; } - +#ifndef MULTICHANNEL if (*global_analog_on > 0.5f) - { channel_data[drum_sample_index][out_buf_offs] = warmify (channel_data[0][out_buf_offs],*(global_analog_amount)); - // channel_data[1][out_buf_offs] = warmify (channel_data[1][out_buf_offs],*(global_analog_amount)); - } - - +#endif } - - - - - - } //std::cout << "CAudioProcessor::processBlock -6 " << std::endl; //} @@ -839,39 +826,34 @@ void CAudioProcessor::processBlock (juce::AudioBuffer& buffer, juce::Midi if (*panner_mode == PANMODE07) pan_equal_power3 (pan_left, pan_right, pan); - float coef_right = 0; float coef_left = 0; - if (s->layer_index_mode != LAYER_INDEX_MODE_NOVELOCITY) - { - coef_right = pan_right * vol * s->velocity; - coef_left = pan_left * vol * s->velocity; - } - else + if (s->layer_index_mode != LAYER_INDEX_MODE_NOVELOCITY) { - coef_right = pan_right * vol; - coef_left = pan_left * vol; + coef_right = pan_right * vol * s->velocity; + coef_left = pan_left * vol * s->velocity; } - - - + else + { + coef_right = pan_right * vol; + coef_left = pan_left * vol; + } channel_data[0][out_buf_offs] += fl * coef_left; channel_data[1][out_buf_offs] += fl * coef_right; } - - } - +#ifndef MULTICHANNEL if (*global_analog_on > 0.5f) { - channel_data[0][out_buf_offs] = warmify (channel_data[0][out_buf_offs],*(global_analog_amount)); - channel_data[1][out_buf_offs] = warmify (channel_data[1][out_buf_offs],*(global_analog_amount)); - } + channel_data[0][out_buf_offs] = warmify (channel_data[0][out_buf_offs],*(global_analog_amount)); + channel_data[1][out_buf_offs] = warmify (channel_data[1][out_buf_offs],*(global_analog_amount)); + } +#endif } //std::cout << "CAudioProcessor::processBlock -6 " << std::endl; diff --git a/Source/kits.cpp b/Source/kits.cpp index 13cd3ca..eeb5516 100644 --- a/Source/kits.cpp +++ b/Source/kits.cpp @@ -938,6 +938,8 @@ void CDrumKitsScanner::scan() v_kits_locations.push_back (get_home_dir() + "/.drmr/drumkits"); v_kits_locations.push_back (get_home_dir() + "/drumrox-kits"); v_kits_locations.push_back (get_home_dir() + "/drumlabooh-kits"); + v_kits_locations.push_back (get_home_dir() + "/drum_sklad"); + v_kits_locations.push_back (get_home_dir() + "/sfz-kits"); /* juce::File home_location = File::getSpecialLocation (juce::File::SpecialLocationType::userHomeDirectory); diff --git a/docs/about.html b/docs/about.html index 33558ff..984c078 100644 --- a/docs/about.html +++ b/docs/about.html @@ -36,22 +36,24 @@

Features

* Built-in mixer with Pan, Volume, mute controls and pan mode option
-* FX for each instrument slot: LP, HP resonance filters and Analog knob to make the sound warmer
+* FX for each instrument slot: LP, HP resonance filters and Analog knob to make the sound warmer (per-instrument or/and for the whole mix)
* Up to 36 instrument slots with layers (max 127 layers)
+* Layer change by MIDI velocity, Round Robin or Random order
+ * Automatic open hihat mute on hihat close
* Drumkit image (if provided) at plugin window
-* Written in C++, based on JUSE toolkit +* Written in C++, based on JUCE toolkit

Some history

Drumlabooh was written as the replacement of Drumrox, my fork of DrMr (see Nicklan's DrMr and Filipe Coelho's fork. -

DrMr is cool C/Gtk+2 LV2 plugin that I used for a years, but then it stopped support current Hydrogen's drumkit format. First I "fixed" kits XML files manually, and at the some point I made a fork of DrMr called Drumrox and fix it at the XML parsing level. +

DrMr is cool C/GTK+2 LV2 plugin that I used for a years, but then it stopped support current Hydrogen's drumkit format. First I "fixed" kits XML files manually, and at the some point I made a fork of DrMr called Drumrox and fix it at the XML parsing level.

It was a spring 2023.

@@ -80,15 +82,17 @@

Возможности

* Встроенный микшер с регуляторами панорамы, громкости, заглушения, и выбором режима панорамы
-* Эффекты для каждого инструмента: фильтры низких и высоких частот, а также регулятор Аналог для придания звуку теплоты
+* Эффекты для каждого инструмента: фильтры низких и высоких частот, а также регулятор Аналог для придания звуку теплоты (отдельно для инструмента либо всего микса)
* Сэмплер на 36 инструментов с поддержкой 127 слоев в каждом
+* Режимы выбора слоя: MIDI velocity, Round Robin, Random Order
+ * Автоматические заглушение открытого хайхета если играется закрытый
* Отображение картинки драмкита, если таковая включена в его состав
-* Плагин написан на C++ с использованием тулкита JUSE +* Плагин написан на C++ с использованием тулкита JUCE

История создания

@@ -111,11 +115,9 @@

История создания

- - \ No newline at end of file diff --git a/docs/install.html b/docs/install.html index 6612048..24addab 100644 --- a/docs/install.html +++ b/docs/install.html @@ -23,19 +23,19 @@

Drumlabooh | Драмлабух: INSTALL

Get the plugin!

-

Latest release (3.1.0).
+

Latest release (4.0.0).
Github page
-Windows VSTi installer (3.1.0) (installs to C:\Program Files (x86)\Common Files\VST3)
+Windows VSTi installer (4.0.0) (installs to C:\Program Files (x86)\Common Files\VST3)
AUR page // yay -S drumlabooh

Windows: installation

-

Download and run this installer (installs to (installs to C:\Program Files (x86)\Common Files\VST3)). -It install also some drumkits, but get more with Hydrogen, or Drumlabooh kits manually from Drum sklad (just copy/unpack kit directories to C:\drumlabooh_kits or D:\drumlabooh_kits or, for SFZ format C:\sfz_kits or D:\sfz_kits. Please read the Manual for a details. +

Download and run this installer (installs to (installs to C:\Program Files (x86)\Common Files\VST3)). +It install also some drumkits, but you can get more with Hydrogen, or Drumlabooh kits manually from Drum sklad (just copy/unpack kit directories to C:\drumlabooh_kits or D:\drumlabooh_kits or, for SFZ format C:\sfz_kits or D:\sfz_kits. Please read the Manual for a details.

@@ -45,7 +45,6 @@

Linux: Build from the source

Dependencies (Ubuntu packages names):

-
libasound2-dev
 libfreetype6-dev
 libx11-dev
@@ -89,18 +88,18 @@ 

Linux: Build from the source

Скачать плагин!

-

Свежий выпуск (3.1.0)
+

Свежий выпуск (4.0.0)
Страница на Github
-Установщик VSTi для Windows (3.1.0)(устанавливается в C:\Program Files (x86)\Common Files\VST3))
+Установщик VSTi для Windows(устанавливается в C:\Program Files (x86)\Common Files\VST3))
Страница на AUR //yay -S drumlabooh

Windows: установка

-

Скачайте и установите этот установщик VSTi, заодно поставится необходимый минимум драм-китов. Затем по вкусу установите еще какие-нибудь драмкиты, например в драм-машине Hydrogen, или вручную, формата Drumлабуха с сайта Drum sklad (скопируйте/распакуйте папки драмкитов в C:\drumlabooh_kits или D:\drumlabooh_kits либо, в случае формата SFZ: C:\sfz_kits или D:\sfz_kits. За подробностями обратитесь к Руководству пользователя. Зачитаетесь! +

Скачайте и установите этот установщик VSTi, заодно поставится необходимый минимум драм-китов. Затем по вкусу установите еще какие-нибудь драмкиты, например в драм-машине Hydrogen, или вручную, формата Drumлабуха с сайта Drum sklad (скопируйте/распакуйте папки драмкитов в C:\drumlabooh_kits или D:\drumlabooh_kits либо, в случае формата SFZ: C:\sfz_kits или D:\sfz_kits. За подробностями обратитесь к Руководству пользователя. Зачитаетесь! По умолчанию все киты с гитхаба устанавливаются и так, а вот в телеге на https://t.me/drum_sklad лежат дополнительные.

Linux: сборка из исходника

diff --git a/docs/manual.html b/docs/manual.html index 384da6d..11c0ed4 100644 --- a/docs/manual.html +++ b/docs/manual.html @@ -53,7 +53,7 @@

2. Get kits

For Hydrogen drumkits, run Hydrogen, then go there to Drumkits - Online import menu and download kits from Hydrogen or Musical Artifacts repositories.

-

To install or update Drumlabooh format kits, download them from Drum sklad (usually installed with the plugins by default) and Drumlabooh kits at Telegram, then copy or unpack drumkits folders to $HOME/drumlabooh-kits. Each kit = one folder.

+

To install or update Drumlabooh format kits, download them from Drum sklad (usually installed with the plugins by default) and Drumlabooh kits at Telegram (additional kits), then copy or unpack drumkits folders to $HOME/drumlabooh-kits or $HOME/drum_sklad (you may git clone to $HOME). Each kit = one folder.

Similary, Dramlabooh searches SFZ kits at $HOME/sfz-kits

@@ -68,6 +68,7 @@

2. Get kits

/usr/share/drumrox-kits
 $HOME/drumrox-kits
+$HOME/drum_sklad
 /usr/share/drumlabooh-kits
 $HOME/drumlabooh-kits
@@ -86,7 +87,7 @@

2. Get kits

Notes:

-

When Drumlabooh loads the kit samples, it converts them before use, on the fly, to the DAW's project session rate (if needed), so the conversion can take some time. Please note that any resampling changes how samples sounds, at some degree.

+

When Drumlabooh loads the kit samples, it converts them before use, on the fly, to the DAW's project session rate (if needed), so the conversion can take some time with big kits. Please note that any resampling changes how samples sounds, at some degree.

Drumlabooh loads pre-panned stereo samples as mono, using the left channel. The pre-panning makes the actual panning on the mixing just weird. So Drumlabooh with it's own stereo mixer treats all source samples as mono.

@@ -211,8 +212,8 @@

2. Скачайте драмкиты

Драмкиты для Hydrogen проще скачать так - запустите Hydrogen, а в нем пойдите в меню Drumkits - Online import и скачайте драмкиты по вкусу из предложенных хранилищ, их есть два - Hydrogen и Musicak Artifacts.

-

Чтобы установить драмкиты формата Драмлабуха, скачайте их с Drum sklad или Драмсклад в Телеге, а затем скопируйте распакованные папки драмкитов в -$HOME/drumlabooh-kits. Каждый кит = одна папка.

+

Чтобы установить драмкиты формата Драмлабуха, скачайте их с Drum sklad (эти обычно устанавливаются по умолчанию) или Драмсклад в Телеге (дополнительные киты), а затем скопируйте распакованные папки драмкитов в +$HOME/drumlabooh-kits или в $HOME/drum_sklad (сюда удобно сделать git clone, находясь в $HOME). Каждый кит = одна папка.

При установке самого Драмлабуха обычно устанавливаются киты с гитхаба Драмсклада, а в его тележной части лежат дополнительные киты.

@@ -233,7 +234,8 @@

2. Скачайте драмкиты

/usr/share/drumrox-kits
 $HOME/drumrox-kits
 /usr/share/drumlabooh-kits
-$HOME/drumlabooh-kits
+$HOME/drumlabooh-kits +$HOME/drum_sklad

Киты в формате Hydrogen: