├── .github └── ISSUE_TEMPLATE │ ├── bug_report.md │ └── feature_request.md ├── .gitignore ├── Builds ├── Doxyfile ├── build.sh ├── doxygen_autogen.py ├── linux │ └── gmake │ │ ├── Makefile │ │ ├── squeezer_standalone_mono.make │ │ ├── squeezer_standalone_stereo.make │ │ ├── squeezer_vst2_mono.make │ │ ├── squeezer_vst2_mono_no_sidechain.make │ │ ├── squeezer_vst2_stereo.make │ │ └── squeezer_vst2_stereo_no_sidechain.make ├── premake5.lua ├── render_templates.bat ├── render_templates.sh ├── settings.template └── windows │ └── vs2017 │ ├── squeezer.sln │ ├── squeezer_standalone_mono.vcxproj │ ├── squeezer_standalone_mono.vcxproj.filters │ ├── squeezer_standalone_stereo.vcxproj │ ├── squeezer_standalone_stereo.vcxproj.filters │ ├── squeezer_vst2_mono.vcxproj │ ├── squeezer_vst2_mono.vcxproj.filters │ ├── squeezer_vst2_mono_no_sidechain.vcxproj │ ├── squeezer_vst2_mono_no_sidechain.vcxproj.filters │ ├── squeezer_vst2_stereo.vcxproj │ ├── squeezer_vst2_stereo.vcxproj.filters │ ├── squeezer_vst2_stereo_no_sidechain.vcxproj │ ├── squeezer_vst2_stereo_no_sidechain.vcxproj.filters │ ├── squeezer_vst3_mono.vcxproj │ ├── squeezer_vst3_mono.vcxproj.filters │ ├── squeezer_vst3_stereo.vcxproj │ └── squeezer_vst3_stereo.vcxproj.filters ├── CODE_OF_CONDUCT.markdown ├── JuceLibraryCode ├── AppConfig.h ├── JuceHeader.h ├── ReadMe.txt ├── include_juce_audio_basics.cpp ├── include_juce_audio_basics.mm ├── include_juce_audio_devices.cpp ├── include_juce_audio_devices.mm ├── include_juce_audio_formats.cpp ├── include_juce_audio_formats.mm ├── include_juce_audio_plugin_client_AAX.cpp ├── include_juce_audio_plugin_client_AAX.mm ├── include_juce_audio_plugin_client_AU.r ├── include_juce_audio_plugin_client_AU_1.mm ├── include_juce_audio_plugin_client_AU_2.mm ├── include_juce_audio_plugin_client_AUv3.mm ├── include_juce_audio_plugin_client_RTAS.r ├── include_juce_audio_plugin_client_RTAS_1.cpp ├── include_juce_audio_plugin_client_RTAS_2.cpp ├── include_juce_audio_plugin_client_RTAS_3.cpp ├── include_juce_audio_plugin_client_RTAS_4.cpp ├── include_juce_audio_plugin_client_RTAS_utils.cpp ├── include_juce_audio_plugin_client_RTAS_utils.mm ├── include_juce_audio_plugin_client_Standalone.cpp ├── include_juce_audio_plugin_client_Unity.cpp ├── include_juce_audio_plugin_client_VST2.cpp ├── include_juce_audio_plugin_client_VST3.cpp ├── include_juce_audio_plugin_client_VST_utils.mm ├── include_juce_audio_plugin_client_utils.cpp ├── include_juce_audio_processors.cpp ├── include_juce_audio_processors.mm ├── include_juce_audio_utils.cpp ├── include_juce_audio_utils.mm ├── include_juce_core.cpp ├── include_juce_core.mm ├── include_juce_cryptography.cpp ├── include_juce_cryptography.mm ├── include_juce_data_structures.cpp ├── include_juce_data_structures.mm ├── include_juce_events.cpp ├── include_juce_events.mm ├── include_juce_graphics.cpp ├── include_juce_graphics.mm ├── include_juce_gui_basics.cpp ├── include_juce_gui_basics.mm ├── include_juce_gui_extra.cpp ├── include_juce_gui_extra.mm ├── include_juce_video.cpp └── include_juce_video.mm ├── LICENSE ├── README.markdown ├── Source ├── .ackrc ├── .astylerc ├── R │ └── optical_detector.R ├── compressor.cpp ├── compressor.h ├── format_code.bat ├── format_code.sh ├── frut │ ├── .astylerc │ ├── .sublimelinterrc │ ├── FrutHeader.h │ ├── amalgamated │ │ ├── include_frut_audio.cpp │ │ ├── include_frut_audio.h │ │ ├── include_frut_dsp.cpp │ │ ├── include_frut_dsp.h │ │ ├── include_frut_math.cpp │ │ ├── include_frut_math.h │ │ ├── include_frut_parameters.cpp │ │ ├── include_frut_parameters.h │ │ ├── include_frut_skin.cpp │ │ ├── include_frut_skin.h │ │ ├── include_frut_widgets.cpp │ │ └── include_frut_widgets.h │ ├── audio │ │ ├── buffer_position.cpp │ │ ├── buffer_position.h │ │ ├── ring_buffer.cpp │ │ └── ring_buffer.h │ ├── dsp │ │ ├── biquad_filter.cpp │ │ ├── biquad_filter.h │ │ ├── dither.cpp │ │ ├── dither.h │ │ ├── fftw_runner.cpp │ │ ├── fftw_runner.h │ │ ├── filter_chebyshev.cpp │ │ ├── filter_chebyshev.h │ │ ├── filter_chebyshev_stage.cpp │ │ ├── filter_chebyshev_stage.h │ │ ├── fir_filter_box.cpp │ │ ├── fir_filter_box.h │ │ ├── iir_filter_box.cpp │ │ ├── iir_filter_box.h │ │ ├── rate_converter.cpp │ │ ├── rate_converter.h │ │ ├── true_peak_meter.cpp │ │ └── true_peak_meter.h │ ├── format_code.bat │ ├── format_code.sh │ ├── jinja │ │ ├── copy_vst.macros │ │ ├── copy_vst.template │ │ ├── finalise_binaries.macros │ │ ├── finalise_binaries.template │ │ ├── package_releases.macros │ │ ├── package_releases.template │ │ ├── premake5.macros │ │ ├── premake5.template │ │ ├── render_templates.py │ │ └── settings.template │ ├── lint.sh │ ├── math │ │ ├── averager.cpp │ │ ├── averager.h │ │ └── simple_math.h │ ├── parameters │ │ ├── juggler.cpp │ │ ├── juggler.h │ │ ├── par_boolean.cpp │ │ ├── par_boolean.h │ │ ├── par_combined.cpp │ │ ├── par_combined.h │ │ ├── par_continuous.cpp │ │ ├── par_continuous.h │ │ ├── par_string.cpp │ │ ├── par_string.h │ │ ├── par_switch.cpp │ │ ├── par_switch.h │ │ ├── parameter.cpp │ │ └── parameter.h │ ├── skin │ │ ├── look_and_feel_v3.cpp │ │ ├── look_and_feel_v3.h │ │ ├── skin.cpp │ │ └── skin.h │ └── widgets │ │ ├── channel_slider.cpp │ │ ├── channel_slider.h │ │ ├── meter_bar.cpp │ │ ├── meter_bar.h │ │ ├── meter_segment.cpp │ │ ├── meter_segment.h │ │ ├── meter_segment_continuous.cpp │ │ ├── meter_segment_continuous.h │ │ ├── meter_segment_discrete.cpp │ │ ├── meter_segment_discrete.h │ │ ├── needle_meter.cpp │ │ ├── needle_meter.h │ │ ├── orientation.h │ │ ├── resources │ │ ├── COPYRIGHT │ │ ├── button_gpl_down.svg │ │ ├── button_gpl_normal.svg │ │ ├── convert_resources.sh │ │ ├── output │ │ │ ├── button_gpl_down.png │ │ │ └── button_gpl_normal.png │ │ ├── resources.cpp │ │ └── resources.h │ │ ├── signal_led.cpp │ │ ├── signal_led.h │ │ ├── slider.h │ │ ├── slider_combined.cpp │ │ ├── slider_combined.h │ │ ├── slider_continuous.cpp │ │ ├── slider_continuous.h │ │ ├── slider_switch.cpp │ │ ├── slider_switch.h │ │ ├── slider_switch_linear_bar.cpp │ │ ├── slider_switch_linear_bar.h │ │ ├── state_label.cpp │ │ ├── state_label.h │ │ ├── window_about_content.cpp │ │ ├── window_about_content.h │ │ ├── window_settings_content.cpp │ │ ├── window_settings_content.h │ │ ├── window_skin_content.cpp │ │ ├── window_skin_content.h │ │ ├── window_validation_content.cpp │ │ └── window_validation_content.h ├── gain_stage.h ├── gain_stage_fet.cpp ├── gain_stage_fet.h ├── gain_stage_optical.cpp ├── gain_stage_optical.h ├── lint.sh ├── meter_bar_gain_reduction.cpp ├── meter_bar_gain_reduction.h ├── meter_bar_level.cpp ├── meter_bar_level.h ├── plugin_editor.cpp ├── plugin_editor.h ├── plugin_parameters.cpp ├── plugin_parameters.h ├── plugin_processor.cpp ├── plugin_processor.h ├── side_chain.cpp ├── side_chain.h ├── skin.cpp └── skin.h ├── Squeezer.jucer ├── bin ├── copy_vst.bat ├── final │ ├── README │ ├── squeezer │ └── squeezer.pdf ├── finalise_binaries.sh ├── package_releases.sh ├── standalone │ ├── squeezer.pdf │ └── squeezer │ │ ├── doc │ │ ├── CC-BY-SA-4.0 │ │ ├── CONTRIBUTORS │ │ ├── HISTORY │ │ └── LICENSE │ │ └── skins ├── vst2 │ ├── squeezer │ └── squeezer.pdf └── vst3 │ ├── squeezer │ └── squeezer.pdf ├── doc ├── .gitignore ├── CC-BY-SA-4.0 ├── CONTRIBUTORS ├── HISTORY ├── LICENSE ├── TODO ├── include │ ├── cc-by-sa-4.0.tex │ ├── gpl_v3.tex │ ├── hyphenation.sty │ ├── images │ │ ├── VST_Compatible_Logo_Steinberg_negative.png │ │ ├── button_about_off.png │ │ ├── button_about_on.png │ │ ├── button_auto_makeup_gain_off.png │ │ ├── button_auto_makeup_gain_on.png │ │ ├── button_bypass_off.png │ │ ├── button_bypass_on.png │ │ ├── button_feedback_off.png │ │ ├── button_feedback_on.png │ │ ├── button_gpl_off.png │ │ ├── button_gpl_on.png │ │ ├── button_opto_off.png │ │ ├── button_opto_on.png │ │ ├── button_reset_off.png │ │ ├── button_reset_on.png │ │ ├── button_rms_off.png │ │ ├── button_rms_on.png │ │ ├── button_settings_off.png │ │ ├── button_settings_on.png │ │ ├── button_sidechain_external_off.png │ │ ├── button_sidechain_external_on.png │ │ ├── button_sidechain_listen_off.png │ │ ├── button_sidechain_listen_on.png │ │ ├── button_skin_off.png │ │ ├── button_skin_on.png │ │ ├── buttons_knee_width.png │ │ ├── buttons_release_curve.png │ │ ├── cc-by-sa.png │ │ ├── knob_attack_time.png │ │ ├── knob_compression_ratio.png │ │ ├── knob_hpf_cutoff.png │ │ ├── knob_input_trim.png │ │ ├── knob_lpf_cutoff.png │ │ ├── knob_output_gain.png │ │ ├── knob_release_time.png │ │ ├── knob_stereo_link.png │ │ ├── knob_threshold.png │ │ ├── knob_toggle_locked.png │ │ ├── knob_toggle_unlocked.png │ │ ├── knob_wet_dry.png │ │ ├── meter_gain_reduction.png │ │ ├── meter_levels.png │ │ └── squeezer.png │ └── settings.sty ├── licensing │ ├── vst_id_registration_1.pdf │ ├── vst_id_registration_2.pdf │ ├── vst_id_registration_3.pdf │ └── vst_id_registration_4.pdf ├── squeezer.pdf └── squeezer.tex ├── libraries ├── juce ├── juce_5.4.7.zip ├── vst2 └── vst3 ├── skins ├── Default.skin ├── Default │ ├── Default.svg │ ├── LICENSE │ ├── backgrounds │ │ └── background.png │ ├── buttons │ │ ├── button_about_off.png │ │ ├── button_about_on.png │ │ ├── button_about_over.png │ │ ├── button_auto_makeup_gain_off.png │ │ ├── button_auto_makeup_gain_on.png │ │ ├── button_auto_makeup_gain_over.png │ │ ├── button_bypass_off.png │ │ ├── button_bypass_on.png │ │ ├── button_bypass_over.png │ │ ├── button_curve_linear_off.png │ │ ├── button_curve_linear_on.png │ │ ├── button_curve_linear_over.png │ │ ├── button_curve_smooth_branching_off.png │ │ ├── button_curve_smooth_branching_on.png │ │ ├── button_curve_smooth_branching_over.png │ │ ├── button_curve_smooth_decoupled_off.png │ │ ├── button_curve_smooth_decoupled_on.png │ │ ├── button_curve_smooth_decoupled_over.png │ │ ├── button_design_feedback_off.png │ │ ├── button_design_feedback_on.png │ │ ├── button_design_feedback_over.png │ │ ├── button_gainstage_optical_off.png │ │ ├── button_gainstage_optical_on.png │ │ ├── button_gainstage_optical_over.png │ │ ├── button_knee_hard_off.png │ │ ├── button_knee_hard_on.png │ │ ├── button_knee_hard_over.png │ │ ├── button_knee_medium_off.png │ │ ├── button_knee_medium_on.png │ │ ├── button_knee_medium_over.png │ │ ├── button_knee_soft_off.png │ │ ├── button_knee_soft_on.png │ │ ├── button_knee_soft_over.png │ │ ├── button_reset_off.png │ │ ├── button_reset_on.png │ │ ├── button_reset_over.png │ │ ├── button_rms_window_off.png │ │ ├── button_rms_window_on.png │ │ ├── button_rms_window_over.png │ │ ├── button_settings_off.png │ │ ├── button_settings_on.png │ │ ├── button_settings_over.png │ │ ├── button_sidechain_external_off.png │ │ ├── button_sidechain_external_on.png │ │ ├── button_sidechain_external_over.png │ │ ├── button_sidechain_listen_off.png │ │ ├── button_sidechain_listen_on.png │ │ ├── button_sidechain_listen_over.png │ │ ├── button_skin_off.png │ │ ├── button_skin_on.png │ │ └── button_skin_over.png │ ├── green_lemon.svg │ ├── labels │ │ └── label_debug.png │ ├── meters │ │ ├── meter_gain_reduction.png │ │ ├── meter_input.png │ │ └── meters_vertical.png │ └── sliders │ │ ├── slider_attack.png │ │ ├── slider_hpf.png │ │ ├── slider_output.png │ │ └── slider_threshold.png └── include │ └── dtd │ └── squeezer-skin.dtd └── validation └── trim_test ├── Recorded ├── Landkarte 2020 Drums (Squeezer Test).flac └── Piano.flac └── trim_test.rpp /.github/ISSUE_TEMPLATE/bug_report.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Bug report 3 | about: Create a report to help us improve 4 | title: 'Bug: ' 5 | labels: '' 6 | assignees: '' 7 | 8 | --- 9 | 10 | ### Describe the bug 11 | 12 | A *clear and concise* description of what the bug is. 13 | 14 | 15 | ### Steps to reproduce 16 | 17 | List *all* steps to reproduce the behavior: 18 | 19 | 1. [ start Reaper ] 20 | 2. [ create a new song ] 21 | 3. [ open the mixer ] 22 | 4. [ add a stereo track ] 23 | 5. [ add *Squeezer Stereo, no side-chain* to the track's first plug-in slot ] 24 | 6. [ see error ... ] 25 | 26 | 27 | ### Expected behavior 28 | 29 | A *clear and concise* description of what you expected to happen. 30 | 31 | 32 | ### Screenshots 33 | 34 | If applicable, add screenshots to help explain your problem. 35 | 36 | 37 | ### Environment (please complete the following information) 38 | 39 | - OS: [ Windows 10 (64-bit), Linux AV v2020.4.10 (32-bit) ] 40 | - DAW: [ Reaper v6.0.8 (32-bit), Ardour v5.12.0 (32-bit) ] 41 | - Plug-in: [ Squeezer v2.5.3 VST2 (64-bit), Squeezer v2.5.3 stand-alone (64-bit) ] 42 | 43 | Did you compile Squeezer yourself? [no] 44 | 45 | 46 | ### Tool set (if you compiled the plug-in yourself) 47 | 48 | You only need to add the tools you actually used: 49 | 50 | - Build automation: [ premake v5.0.0 alpha14 ] 51 | - Compiler: [ Visual Studio 2017, Clang v6.0.0, gcc Ubuntu v7.5.0 ] 52 | - JUCE: [ v5.4.7 ] 53 | - SDK: [ VST2 2.4 (from SDK v3.6.10), VST3 3.6.14, stand-alone ] 54 | - ... 55 | 56 | 57 | ### Additional context 58 | 59 | Add any other context about the problem here. 60 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature_request.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Feature request 3 | about: Suggest an idea for this project 4 | title: 'Feature request: ' 5 | labels: '' 6 | assignees: '' 7 | 8 | --- 9 | 10 | ### Is your feature request related to a problem? If so, please describe. 11 | 12 | A *clear and concise* description of what the problem is. (I'm always frustrated when ...) 13 | 14 | 15 | ### Describe the solution you'd like 16 | 17 | A *clear and concise* description of what you want to happen. 18 | 19 | 20 | ### Describe alternatives you've considered 21 | 22 | A *clear and concise* description of any alternative solutions or features you've considered. 23 | 24 | 25 | ### Additional context 26 | 27 | Add any other context or screenshots about the feature request here. 28 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | *~ 2 | .*~ 3 | *.db 4 | *.log 5 | *.ncb 6 | *.pdb 7 | *.sdf 8 | *.suo 9 | *.vcproj.*.user 10 | *.vcxproj.user 11 | 12 | .vs 13 | .Rhistory 14 | 15 | bin/.intermediate_* 16 | 17 | bin/standalone/Squeezer*.exe 18 | bin/standalone/squeezer_* 19 | 20 | bin/vst2/Squeezer*.dll 21 | bin/vst2/squeezer_*.so 22 | 23 | bin/vst3/Squeezer*.vst3 24 | bin/vst3/squeezer_*.so 25 | 26 | skins/default_skin.ini 27 | 28 | Source/api/ 29 | 30 | final/ 31 | ignore/ 32 | releases/ 33 | 34 | ipch/ 35 | Debug/ 36 | Release/ 37 | -------------------------------------------------------------------------------- /Builds/render_templates.bat: -------------------------------------------------------------------------------- 1 | @echo off 2 | 3 | @rem --------------------------------------------------------------------------- 4 | @rem 5 | @rem Squeezer 6 | @rem ======== 7 | @rem Flexible general-purpose audio compressor with a touch of citrus 8 | @rem 9 | @rem Copyright (c) 2013-2020 Martin Zuther (http://www.mzuther.de/) 10 | @rem 11 | @rem This program is free software: you can redistribute it and/or modify 12 | @rem it under the terms of the GNU General Public License as published by 13 | @rem the Free Software Foundation, either version 3 of the License, or 14 | @rem (at your option) any later version. 15 | @rem 16 | @rem This program is distributed in the hope that it will be useful, 17 | @rem but WITHOUT ANY WARRANTY; without even the implied warranty of 18 | @rem MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 19 | @rem GNU General Public License for more details. 20 | @rem 21 | @rem You should have received a copy of the GNU General Public License 22 | @rem along with this program. If not, see . 23 | @rem 24 | @rem Thank you for using free software! 25 | @rem 26 | @rem --------------------------------------------------------------------------- 27 | 28 | @echo. 29 | @echo "=== Rendering templates ===" 30 | python.exe "../Source/frut/jinja/render_templates.py" 31 | 32 | 33 | @echo. 34 | @premake5 --os=windows vs2017 35 | 36 | @echo. 37 | @premake5 --cc=clang --os=linux gmake 38 | @rem premake5 --cc=gcc --os=linux gmake 39 | 40 | @echo. 41 | @pause 42 | -------------------------------------------------------------------------------- /Builds/render_templates.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # ---------------------------------------------------------------------------- 4 | # 5 | # Squeezer 6 | # ======== 7 | # Flexible general-purpose audio compressor with a touch of citrus 8 | # 9 | # Copyright (c) 2013-2020 Martin Zuther (http://www.mzuther.de/) 10 | # 11 | # This program is free software: you can redistribute it and/or modify 12 | # it under the terms of the GNU General Public License as published by 13 | # the Free Software Foundation, either version 3 of the License, or 14 | # (at your option) any later version. 15 | # 16 | # This program is distributed in the hope that it will be useful, 17 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 18 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 19 | # GNU General Public License for more details. 20 | # 21 | # You should have received a copy of the GNU General Public License 22 | # along with this program. If not, see . 23 | # 24 | # Thank you for using free software! 25 | # 26 | # ---------------------------------------------------------------------------- 27 | 28 | cd "$(dirname "$0")" || exit 29 | 30 | echo 31 | echo "=== Rendering templates ===" 32 | python3 "../Source/frut/jinja/render_templates.py" 33 | 34 | 35 | echo 36 | premake5 --os=windows vs2017 37 | 38 | echo 39 | premake5 --cc=clang --os=linux gmake 40 | # premake5 --cc=gcc --os=linux gmake 41 | 42 | echo 43 | -------------------------------------------------------------------------------- /JuceLibraryCode/JuceHeader.h: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | IMPORTANT! This file is auto-generated each time you save your 4 | project - if you alter its contents, your changes may be overwritten! 5 | 6 | This is the header file that your files should include in order to get all the 7 | JUCE library headers. You should avoid including the JUCE headers directly in 8 | your own source files, because that wouldn't pick up the correct configuration 9 | options for your app. 10 | 11 | */ 12 | 13 | #pragma once 14 | 15 | #include "AppConfig.h" 16 | 17 | #include 18 | #include 19 | #include 20 | #include 21 | #include 22 | #include 23 | #include 24 | #include 25 | #include 26 | #include 27 | #include 28 | #include 29 | #include 30 | #include 31 | 32 | 33 | #if defined (JUCE_PROJUCER_VERSION) && JUCE_PROJUCER_VERSION < JUCE_VERSION 34 | /** If you've hit this error then the version of the Projucer that was used to generate this project is 35 | older than the version of the JUCE modules being included. To fix this error, re-save your project 36 | using the latest version of the Projucer or, if you aren't using the Projucer to manage your project, 37 | remove the JUCE_PROJUCER_VERSION define from the AppConfig.h file. 38 | */ 39 | #error "This project was last saved using an outdated version of the Projucer! Re-save this project with the latest version to fix this error." 40 | #endif 41 | 42 | #if ! DONT_SET_USING_JUCE_NAMESPACE 43 | // If your code uses a lot of JUCE classes, then this will obviously save you 44 | // a lot of typing, but can be disabled by setting DONT_SET_USING_JUCE_NAMESPACE. 45 | using namespace juce; 46 | #endif 47 | 48 | #if ! JUCE_DONT_DECLARE_PROJECTINFO 49 | namespace ProjectInfo 50 | { 51 | const char* const projectName = "Squeezer"; 52 | const char* const companyName = "Martin Zuther"; 53 | const char* const versionString = "2.5.4"; 54 | const int versionNumber = 0x20504; 55 | } 56 | #endif 57 | -------------------------------------------------------------------------------- /JuceLibraryCode/ReadMe.txt: -------------------------------------------------------------------------------- 1 | 2 | Important Note!! 3 | ================ 4 | 5 | The purpose of this folder is to contain files that are auto-generated by the Projucer, 6 | and ALL files in this folder will be mercilessly DELETED and completely re-written whenever 7 | the Projucer saves your project. 8 | 9 | Therefore, it's a bad idea to make any manual changes to the files in here, or to 10 | put any of your own files in here if you don't want to lose them. (Of course you may choose 11 | to add the folder's contents to your version-control system so that you can re-merge your own 12 | modifications after the Projucer has saved its changes). 13 | -------------------------------------------------------------------------------- /JuceLibraryCode/include_juce_audio_basics.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | IMPORTANT! This file is auto-generated each time you save your 4 | project - if you alter its contents, your changes may be overwritten! 5 | 6 | */ 7 | 8 | #include "AppConfig.h" 9 | #include 10 | -------------------------------------------------------------------------------- /JuceLibraryCode/include_juce_audio_basics.mm: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | IMPORTANT! This file is auto-generated each time you save your 4 | project - if you alter its contents, your changes may be overwritten! 5 | 6 | */ 7 | 8 | #include "AppConfig.h" 9 | #include 10 | -------------------------------------------------------------------------------- /JuceLibraryCode/include_juce_audio_devices.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | IMPORTANT! This file is auto-generated each time you save your 4 | project - if you alter its contents, your changes may be overwritten! 5 | 6 | */ 7 | 8 | #include "AppConfig.h" 9 | #include 10 | -------------------------------------------------------------------------------- /JuceLibraryCode/include_juce_audio_devices.mm: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | IMPORTANT! This file is auto-generated each time you save your 4 | project - if you alter its contents, your changes may be overwritten! 5 | 6 | */ 7 | 8 | #include "AppConfig.h" 9 | #include 10 | -------------------------------------------------------------------------------- /JuceLibraryCode/include_juce_audio_formats.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | IMPORTANT! This file is auto-generated each time you save your 4 | project - if you alter its contents, your changes may be overwritten! 5 | 6 | */ 7 | 8 | #include "AppConfig.h" 9 | #include 10 | -------------------------------------------------------------------------------- /JuceLibraryCode/include_juce_audio_formats.mm: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | IMPORTANT! This file is auto-generated each time you save your 4 | project - if you alter its contents, your changes may be overwritten! 5 | 6 | */ 7 | 8 | #include "AppConfig.h" 9 | #include 10 | -------------------------------------------------------------------------------- /JuceLibraryCode/include_juce_audio_plugin_client_AAX.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | IMPORTANT! This file is auto-generated each time you save your 4 | project - if you alter its contents, your changes may be overwritten! 5 | 6 | */ 7 | 8 | #include "AppConfig.h" 9 | #include 10 | -------------------------------------------------------------------------------- /JuceLibraryCode/include_juce_audio_plugin_client_AAX.mm: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | IMPORTANT! This file is auto-generated each time you save your 4 | project - if you alter its contents, your changes may be overwritten! 5 | 6 | */ 7 | 8 | #include "AppConfig.h" 9 | #include 10 | -------------------------------------------------------------------------------- /JuceLibraryCode/include_juce_audio_plugin_client_AU.r: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | IMPORTANT! This file is auto-generated each time you save your 4 | project - if you alter its contents, your changes may be overwritten! 5 | 6 | */ 7 | 8 | #include "AppConfig.h" 9 | #include 10 | -------------------------------------------------------------------------------- /JuceLibraryCode/include_juce_audio_plugin_client_AU_1.mm: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | IMPORTANT! This file is auto-generated each time you save your 4 | project - if you alter its contents, your changes may be overwritten! 5 | 6 | */ 7 | 8 | #include "AppConfig.h" 9 | #include 10 | -------------------------------------------------------------------------------- /JuceLibraryCode/include_juce_audio_plugin_client_AU_2.mm: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | IMPORTANT! This file is auto-generated each time you save your 4 | project - if you alter its contents, your changes may be overwritten! 5 | 6 | */ 7 | 8 | #include "AppConfig.h" 9 | #include 10 | -------------------------------------------------------------------------------- /JuceLibraryCode/include_juce_audio_plugin_client_AUv3.mm: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | IMPORTANT! This file is auto-generated each time you save your 4 | project - if you alter its contents, your changes may be overwritten! 5 | 6 | */ 7 | 8 | #include "AppConfig.h" 9 | #include 10 | -------------------------------------------------------------------------------- /JuceLibraryCode/include_juce_audio_plugin_client_RTAS.r: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | IMPORTANT! This file is auto-generated each time you save your 4 | project - if you alter its contents, your changes may be overwritten! 5 | 6 | */ 7 | 8 | #include "AppConfig.h" 9 | #include 10 | -------------------------------------------------------------------------------- /JuceLibraryCode/include_juce_audio_plugin_client_RTAS_1.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | IMPORTANT! This file is auto-generated each time you save your 4 | project - if you alter its contents, your changes may be overwritten! 5 | 6 | */ 7 | 8 | #include "AppConfig.h" 9 | #include 10 | -------------------------------------------------------------------------------- /JuceLibraryCode/include_juce_audio_plugin_client_RTAS_2.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | IMPORTANT! This file is auto-generated each time you save your 4 | project - if you alter its contents, your changes may be overwritten! 5 | 6 | */ 7 | 8 | #include "AppConfig.h" 9 | #include 10 | -------------------------------------------------------------------------------- /JuceLibraryCode/include_juce_audio_plugin_client_RTAS_3.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | IMPORTANT! This file is auto-generated each time you save your 4 | project - if you alter its contents, your changes may be overwritten! 5 | 6 | */ 7 | 8 | #include "AppConfig.h" 9 | #include 10 | -------------------------------------------------------------------------------- /JuceLibraryCode/include_juce_audio_plugin_client_RTAS_4.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | IMPORTANT! This file is auto-generated each time you save your 4 | project - if you alter its contents, your changes may be overwritten! 5 | 6 | */ 7 | 8 | #include "AppConfig.h" 9 | #include 10 | -------------------------------------------------------------------------------- /JuceLibraryCode/include_juce_audio_plugin_client_RTAS_utils.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | IMPORTANT! This file is auto-generated each time you save your 4 | project - if you alter its contents, your changes may be overwritten! 5 | 6 | */ 7 | 8 | #include "AppConfig.h" 9 | #include 10 | -------------------------------------------------------------------------------- /JuceLibraryCode/include_juce_audio_plugin_client_RTAS_utils.mm: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | IMPORTANT! This file is auto-generated each time you save your 4 | project - if you alter its contents, your changes may be overwritten! 5 | 6 | */ 7 | 8 | #include "AppConfig.h" 9 | #include 10 | -------------------------------------------------------------------------------- /JuceLibraryCode/include_juce_audio_plugin_client_Standalone.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | IMPORTANT! This file is auto-generated each time you save your 4 | project - if you alter its contents, your changes may be overwritten! 5 | 6 | */ 7 | 8 | #include "AppConfig.h" 9 | #include 10 | -------------------------------------------------------------------------------- /JuceLibraryCode/include_juce_audio_plugin_client_Unity.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | IMPORTANT! This file is auto-generated each time you save your 4 | project - if you alter its contents, your changes may be overwritten! 5 | 6 | */ 7 | 8 | #include "AppConfig.h" 9 | #include 10 | -------------------------------------------------------------------------------- /JuceLibraryCode/include_juce_audio_plugin_client_VST2.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | IMPORTANT! This file is auto-generated each time you save your 4 | project - if you alter its contents, your changes may be overwritten! 5 | 6 | */ 7 | 8 | #include "AppConfig.h" 9 | #include 10 | -------------------------------------------------------------------------------- /JuceLibraryCode/include_juce_audio_plugin_client_VST3.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | IMPORTANT! This file is auto-generated each time you save your 4 | project - if you alter its contents, your changes may be overwritten! 5 | 6 | */ 7 | 8 | #include "AppConfig.h" 9 | #include 10 | -------------------------------------------------------------------------------- /JuceLibraryCode/include_juce_audio_plugin_client_VST_utils.mm: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | IMPORTANT! This file is auto-generated each time you save your 4 | project - if you alter its contents, your changes may be overwritten! 5 | 6 | */ 7 | 8 | #include "AppConfig.h" 9 | #include 10 | -------------------------------------------------------------------------------- /JuceLibraryCode/include_juce_audio_plugin_client_utils.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | IMPORTANT! This file is auto-generated each time you save your 4 | project - if you alter its contents, your changes may be overwritten! 5 | 6 | */ 7 | 8 | #include "AppConfig.h" 9 | #include 10 | -------------------------------------------------------------------------------- /JuceLibraryCode/include_juce_audio_processors.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | IMPORTANT! This file is auto-generated each time you save your 4 | project - if you alter its contents, your changes may be overwritten! 5 | 6 | */ 7 | 8 | #include "AppConfig.h" 9 | #include 10 | -------------------------------------------------------------------------------- /JuceLibraryCode/include_juce_audio_processors.mm: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | IMPORTANT! This file is auto-generated each time you save your 4 | project - if you alter its contents, your changes may be overwritten! 5 | 6 | */ 7 | 8 | #include "AppConfig.h" 9 | #include 10 | -------------------------------------------------------------------------------- /JuceLibraryCode/include_juce_audio_utils.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | IMPORTANT! This file is auto-generated each time you save your 4 | project - if you alter its contents, your changes may be overwritten! 5 | 6 | */ 7 | 8 | #include "AppConfig.h" 9 | #include 10 | -------------------------------------------------------------------------------- /JuceLibraryCode/include_juce_audio_utils.mm: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | IMPORTANT! This file is auto-generated each time you save your 4 | project - if you alter its contents, your changes may be overwritten! 5 | 6 | */ 7 | 8 | #include "AppConfig.h" 9 | #include 10 | -------------------------------------------------------------------------------- /JuceLibraryCode/include_juce_core.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | IMPORTANT! This file is auto-generated each time you save your 4 | project - if you alter its contents, your changes may be overwritten! 5 | 6 | */ 7 | 8 | #include "AppConfig.h" 9 | #include 10 | -------------------------------------------------------------------------------- /JuceLibraryCode/include_juce_core.mm: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | IMPORTANT! This file is auto-generated each time you save your 4 | project - if you alter its contents, your changes may be overwritten! 5 | 6 | */ 7 | 8 | #include "AppConfig.h" 9 | #include 10 | -------------------------------------------------------------------------------- /JuceLibraryCode/include_juce_cryptography.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | IMPORTANT! This file is auto-generated each time you save your 4 | project - if you alter its contents, your changes may be overwritten! 5 | 6 | */ 7 | 8 | #include "AppConfig.h" 9 | #include 10 | -------------------------------------------------------------------------------- /JuceLibraryCode/include_juce_cryptography.mm: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | IMPORTANT! This file is auto-generated each time you save your 4 | project - if you alter its contents, your changes may be overwritten! 5 | 6 | */ 7 | 8 | #include "AppConfig.h" 9 | #include 10 | -------------------------------------------------------------------------------- /JuceLibraryCode/include_juce_data_structures.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | IMPORTANT! This file is auto-generated each time you save your 4 | project - if you alter its contents, your changes may be overwritten! 5 | 6 | */ 7 | 8 | #include "AppConfig.h" 9 | #include 10 | -------------------------------------------------------------------------------- /JuceLibraryCode/include_juce_data_structures.mm: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | IMPORTANT! This file is auto-generated each time you save your 4 | project - if you alter its contents, your changes may be overwritten! 5 | 6 | */ 7 | 8 | #include "AppConfig.h" 9 | #include 10 | -------------------------------------------------------------------------------- /JuceLibraryCode/include_juce_events.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | IMPORTANT! This file is auto-generated each time you save your 4 | project - if you alter its contents, your changes may be overwritten! 5 | 6 | */ 7 | 8 | #include "AppConfig.h" 9 | #include 10 | -------------------------------------------------------------------------------- /JuceLibraryCode/include_juce_events.mm: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | IMPORTANT! This file is auto-generated each time you save your 4 | project - if you alter its contents, your changes may be overwritten! 5 | 6 | */ 7 | 8 | #include "AppConfig.h" 9 | #include 10 | -------------------------------------------------------------------------------- /JuceLibraryCode/include_juce_graphics.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | IMPORTANT! This file is auto-generated each time you save your 4 | project - if you alter its contents, your changes may be overwritten! 5 | 6 | */ 7 | 8 | #include "AppConfig.h" 9 | #include 10 | -------------------------------------------------------------------------------- /JuceLibraryCode/include_juce_graphics.mm: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | IMPORTANT! This file is auto-generated each time you save your 4 | project - if you alter its contents, your changes may be overwritten! 5 | 6 | */ 7 | 8 | #include "AppConfig.h" 9 | #include 10 | -------------------------------------------------------------------------------- /JuceLibraryCode/include_juce_gui_basics.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | IMPORTANT! This file is auto-generated each time you save your 4 | project - if you alter its contents, your changes may be overwritten! 5 | 6 | */ 7 | 8 | #include "AppConfig.h" 9 | #include 10 | -------------------------------------------------------------------------------- /JuceLibraryCode/include_juce_gui_basics.mm: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | IMPORTANT! This file is auto-generated each time you save your 4 | project - if you alter its contents, your changes may be overwritten! 5 | 6 | */ 7 | 8 | #include "AppConfig.h" 9 | #include 10 | -------------------------------------------------------------------------------- /JuceLibraryCode/include_juce_gui_extra.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | IMPORTANT! This file is auto-generated each time you save your 4 | project - if you alter its contents, your changes may be overwritten! 5 | 6 | */ 7 | 8 | #include "AppConfig.h" 9 | #include 10 | -------------------------------------------------------------------------------- /JuceLibraryCode/include_juce_gui_extra.mm: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | IMPORTANT! This file is auto-generated each time you save your 4 | project - if you alter its contents, your changes may be overwritten! 5 | 6 | */ 7 | 8 | #include "AppConfig.h" 9 | #include 10 | -------------------------------------------------------------------------------- /JuceLibraryCode/include_juce_video.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | IMPORTANT! This file is auto-generated each time you save your 4 | project - if you alter its contents, your changes may be overwritten! 5 | 6 | */ 7 | 8 | #include "AppConfig.h" 9 | #include 10 | -------------------------------------------------------------------------------- /JuceLibraryCode/include_juce_video.mm: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | IMPORTANT! This file is auto-generated each time you save your 4 | project - if you alter its contents, your changes may be overwritten! 5 | 6 | */ 7 | 8 | #include "AppConfig.h" 9 | #include 10 | -------------------------------------------------------------------------------- /Source/.ackrc: -------------------------------------------------------------------------------- 1 | # ignore documentation directory 2 | --ignore-dir=api 3 | -------------------------------------------------------------------------------- /Source/.astylerc: -------------------------------------------------------------------------------- 1 | # indent using given number of spaces 2 | --indent=spaces=4 3 | 4 | # indent C++ comments beginning in column one 5 | --indent-col1-comments 6 | 7 | # pad empty lines around header blocks ('if', 'for', 'while'...) 8 | --break-blocks 9 | 10 | 11 | 12 | # break brackets from their pre-block statements 13 | --style=break 14 | 15 | # add brackets to one line conditional statements ('if', 'for', 'while'...) 16 | --add-brackets 17 | 18 | 19 | 20 | # remove extra space padding around parentheses 21 | --unpad-paren 22 | 23 | # insert space padding after paren headers only ('if', 'for', 'while'...) 24 | --pad-header 25 | 26 | # insert space padding around operators 27 | --pad-oper 28 | 29 | # attach pointer or reference operators (* or &) to the variable name (right) 30 | --align-pointer=name 31 | 32 | 33 | 34 | # display optional information 35 | --verbose 36 | 37 | # only display changed files 38 | --formatted 39 | 40 | # force Linux-style line endings (LF) 41 | --lineend=linux 42 | 43 | # append given suffix to the original file name 44 | --suffix=.astyle~ 45 | -------------------------------------------------------------------------------- /Source/R/optical_detector.R: -------------------------------------------------------------------------------- 1 | samples <- 3000 2 | samples_1_3 = samples / 3 3 | samples_2_3 = samples_1_3 * 2 4 | samples_half <- samples / 2 5 | sample_rate <- 48000 6 | 7 | factor <- 12.0 8 | start <- 2.0 * factor 9 | mid_1 <- 1.0 * factor 10 | mid_2 <- 0.0 * factor 11 | end <- start 12 | 13 | rate <- 0.00001 14 | coef_1 <- exp(log(0.10) / (rate * sample_rate)) 15 | coef_1 16 | 17 | input <- array(start, samples) 18 | 19 | for (n in (2:samples_1_3)) 20 | { 21 | input[n] <- mid_1 + sin(n / 10) 22 | } 23 | 24 | for (n in ((samples_1_3 + 1):samples_2_3)) 25 | { 26 | input[n] <- mid_2 + sin(n / 10) 27 | } 28 | 29 | for (n in ((samples_2_3 + 1):samples)) 30 | { 31 | input[n] <- end + sin(n / 10) 32 | } 33 | 34 | output <- array(0.0, samples) 35 | output[1] <- start 36 | 37 | for (n in (2:samples)) 38 | { 39 | output[n] <- (1.0 - coef_1) * output[n - 1] + coef_1 * input[n] 40 | } 41 | 42 | plot(input, type="l", col="grey", xlab="Sample", ylab="Level [dB]") 43 | lines(output, type="l", col="blue") 44 | 45 | 46 | coef_2 <- coef_1 47 | coef_prep <- log(0.10) / (rate * sample_rate) 48 | 49 | y1 <- 0.33 50 | x2 <- 3.0 51 | 52 | a <- 1.0 / y1 53 | b <- (1 + x2 - a) / x2 54 | 55 | output <- array(0.0, samples) 56 | output[1] <- start 57 | last <- start 58 | 59 | for (n in (2:samples)) 60 | { 61 | if (input[n] > last) 62 | { 63 | output[n] <- (1.0 - coef_2) * output[n - 1] + coef_2 * input[n] 64 | } 65 | else 66 | { 67 | gr_new <- last - input[n - 1] 68 | coef_factor <- (a + b * gr_new) / (1 + gr_new) 69 | coef_curr <- exp(coef_prep * coef_factor) 70 | output[n] <- (1.0 - coef_curr) * output[n - 1] + coef_curr * input[n] 71 | } 72 | 73 | last <- output[n] 74 | } 75 | 76 | lines(output, type="l", col="red") 77 | 78 | 79 | ## values <- c(1:50 - 1) / 2 80 | ## corr <- 100.0 * (a + b * values) / (1 + values) 81 | ## plot(values, corr, type="l", xlab="Level [dB]", ylab="Release rate correction [%]") 82 | 83 | ## abline(v=x2, lty="13", lwd=1, col="red") 84 | ## abline(h=100.0, lty="13", lwd=1, col="red") 85 | 86 | ## abline(v=0, lty="13", lwd=1, col="blue") 87 | ## abline(h=100.0 / y1, lty="13", lwd=1, col="blue") 88 | -------------------------------------------------------------------------------- /Source/format_code.bat: -------------------------------------------------------------------------------- 1 | @echo off 2 | 3 | @rem --------------------------------------------------------------------------- 4 | @rem 5 | @rem Squeezer 6 | @rem ======== 7 | @rem Flexible general-purpose audio compressor with a touch of citrus 8 | @rem 9 | @rem Copyright (c) 2013-2020 Martin Zuther (http://www.mzuther.de/) 10 | @rem 11 | @rem This program is free software: you can redistribute it and/or modify 12 | @rem it under the terms of the GNU General Public License as published by 13 | @rem the Free Software Foundation, either version 3 of the License, or 14 | @rem (at your option) any later version. 15 | @rem 16 | @rem This program is distributed in the hope that it will be useful, 17 | @rem but WITHOUT ANY WARRANTY; without even the implied warranty of 18 | @rem MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 19 | @rem GNU General Public License for more details. 20 | @rem 21 | @rem You should have received a copy of the GNU General Public License 22 | @rem along with this program. If not, see . 23 | @rem 24 | @rem Thank you for using free software! 25 | @rem 26 | @rem --------------------------------------------------------------------------- 27 | 28 | @AStyle --recursive --exclude="resources" --options=./.astylerc "*.cpp" "*.h" 29 | @pause 30 | -------------------------------------------------------------------------------- /Source/format_code.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # ---------------------------------------------------------------------------- 4 | # 5 | # Squeezer 6 | # ======== 7 | # Flexible general-purpose audio compressor with a touch of citrus 8 | # 9 | # Copyright (c) 2013-2020 Martin Zuther (http://www.mzuther.de/) 10 | # 11 | # This program is free software: you can redistribute it and/or modify 12 | # it under the terms of the GNU General Public License as published by 13 | # the Free Software Foundation, either version 3 of the License, or 14 | # (at your option) any later version. 15 | # 16 | # This program is distributed in the hope that it will be useful, 17 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 18 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 19 | # GNU General Public License for more details. 20 | # 21 | # You should have received a copy of the GNU General Public License 22 | # along with this program. If not, see . 23 | # 24 | # Thank you for using free software! 25 | # 26 | # ---------------------------------------------------------------------------- 27 | 28 | astyle --recursive --exclude="resources" --options=./.astylerc \ 29 | "*.cpp" \ 30 | "*.h" 31 | -------------------------------------------------------------------------------- /Source/frut/.astylerc: -------------------------------------------------------------------------------- 1 | ../.astylerc -------------------------------------------------------------------------------- /Source/frut/.sublimelinterrc: -------------------------------------------------------------------------------- 1 | { 2 | "@python": 3, 3 | "linters": 4 | { 5 | "clang": { 6 | "args": 7 | [ 8 | "-std=c++14", 9 | "-include", 10 | "${project}/Source/frut/FrutHeader.h" 11 | ] 12 | } 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /Source/frut/FrutHeader.h: -------------------------------------------------------------------------------- 1 | /* ---------------------------------------------------------------------------- 2 | 3 | FrutJUCE 4 | ======== 5 | Common classes for use with the JUCE library 6 | 7 | Copyright (c) 2010-2020 Martin Zuther (http://www.mzuther.de/) 8 | 9 | This program is free software: you can redistribute it and/or modify 10 | it under the terms of the GNU General Public License as published by 11 | the Free Software Foundation, either version 3 of the License, or 12 | (at your option) any later version. 13 | 14 | This program is distributed in the hope that it will be useful, 15 | but WITHOUT ANY WARRANTY; without even the implied warranty of 16 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 17 | GNU General Public License for more details. 18 | 19 | You should have received a copy of the GNU General Public License 20 | along with this program. If not, see . 21 | 22 | Thank you for using free software! 23 | 24 | ---------------------------------------------------------------------------- */ 25 | 26 | #ifndef FRUT_HEADER_H 27 | #define FRUT_HEADER_H 28 | 29 | // external includes 30 | #include "JuceHeader.h" 31 | 32 | #ifndef FRUT_DSP_USE_FFTW 33 | #define FRUT_DSP_USE_FFTW 0 34 | #endif 35 | 36 | 37 | namespace frut 38 | { 39 | 40 | /// Simple helper class. 41 | /// 42 | class Frut 43 | { 44 | public: 45 | /// Get version number of Frut common classes. 46 | /// 47 | /// @return version number 48 | /// 49 | static const juce::String getVersion() 50 | { 51 | return "2.0.4"; 52 | } 53 | 54 | 55 | static void printVersionNumbers() 56 | { 57 | #ifndef DEBUG 58 | Logger::outputDebugString(SystemStats::getJUCEVersion()); 59 | #endif 60 | 61 | Logger::outputDebugString(String("FRUT v") + frut::Frut::getVersion()); 62 | Logger::outputDebugString(String("App v") + JucePlugin_VersionString); 63 | Logger::outputDebugString(""); 64 | 65 | String simd = "SIMD "; 66 | 67 | if (juce::SystemStats::hasSSE()) 68 | { 69 | simd += "SSE "; 70 | } 71 | 72 | if (juce::SystemStats::hasSSE2()) 73 | { 74 | simd += "SSE2 "; 75 | } 76 | 77 | if (juce::SystemStats::hasAVX()) 78 | { 79 | simd += "AVX "; 80 | } 81 | 82 | if (juce::SystemStats::hasAVX2()) 83 | { 84 | simd += "AVX2 "; 85 | } 86 | 87 | Logger::outputDebugString("CPU " + juce::SystemStats::getCpuModel()); 88 | Logger::outputDebugString(simd); 89 | Logger::outputDebugString(""); 90 | } 91 | }; 92 | 93 | } 94 | 95 | 96 | // normal includes 97 | #include "amalgamated/include_frut_audio.h" 98 | #include "amalgamated/include_frut_dsp.h" 99 | #include "amalgamated/include_frut_math.h" 100 | #include "amalgamated/include_frut_parameters.h" 101 | #include "amalgamated/include_frut_widgets.h" 102 | 103 | // post includes 104 | #include "amalgamated/include_frut_skin.h" 105 | 106 | #endif // FRUT_HEADER_H 107 | -------------------------------------------------------------------------------- /Source/frut/amalgamated/include_frut_audio.cpp: -------------------------------------------------------------------------------- 1 | /* ---------------------------------------------------------------------------- 2 | 3 | FrutJUCE 4 | ======== 5 | Common classes for use with the JUCE library 6 | 7 | Copyright (c) 2010-2020 Martin Zuther (http://www.mzuther.de/) 8 | 9 | This program is free software: you can redistribute it and/or modify 10 | it under the terms of the GNU General Public License as published by 11 | the Free Software Foundation, either version 3 of the License, or 12 | (at your option) any later version. 13 | 14 | This program is distributed in the hope that it will be useful, 15 | but WITHOUT ANY WARRANTY; without even the implied warranty of 16 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 17 | GNU General Public License for more details. 18 | 19 | You should have received a copy of the GNU General Public License 20 | along with this program. If not, see . 21 | 22 | Thank you for using free software! 23 | 24 | ---------------------------------------------------------------------------- */ 25 | 26 | #ifndef FRUT_AMALGAMATED_AUDIO_CPP 27 | #define FRUT_AMALGAMATED_AUDIO_CPP 28 | 29 | 30 | #include "../FrutHeader.h" 31 | 32 | #include "../audio/buffer_position.cpp" 33 | #include "../audio/ring_buffer.cpp" 34 | 35 | 36 | #endif // FRUT_AMALGAMATED_AUDIO_CPP 37 | -------------------------------------------------------------------------------- /Source/frut/amalgamated/include_frut_audio.h: -------------------------------------------------------------------------------- 1 | /* ---------------------------------------------------------------------------- 2 | 3 | FrutJUCE 4 | ======== 5 | Common classes for use with the JUCE library 6 | 7 | Copyright (c) 2010-2020 Martin Zuther (http://www.mzuther.de/) 8 | 9 | This program is free software: you can redistribute it and/or modify 10 | it under the terms of the GNU General Public License as published by 11 | the Free Software Foundation, either version 3 of the License, or 12 | (at your option) any later version. 13 | 14 | This program is distributed in the hope that it will be useful, 15 | but WITHOUT ANY WARRANTY; without even the implied warranty of 16 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 17 | GNU General Public License for more details. 18 | 19 | You should have received a copy of the GNU General Public License 20 | along with this program. If not, see . 21 | 22 | Thank you for using free software! 23 | 24 | ---------------------------------------------------------------------------- */ 25 | 26 | #ifndef FRUT_AMALGAMATED_AUDIO_H 27 | #define FRUT_AMALGAMATED_AUDIO_H 28 | 29 | 30 | // normal includes 31 | #include "../audio/buffer_position.h" 32 | #include "../audio/ring_buffer.h" 33 | 34 | 35 | #endif // FRUT_AMALGAMATED_AUDIO_H 36 | -------------------------------------------------------------------------------- /Source/frut/amalgamated/include_frut_dsp.cpp: -------------------------------------------------------------------------------- 1 | /* ---------------------------------------------------------------------------- 2 | 3 | FrutJUCE 4 | ======== 5 | Common classes for use with the JUCE library 6 | 7 | Copyright (c) 2010-2020 Martin Zuther (http://www.mzuther.de/) 8 | 9 | This program is free software: you can redistribute it and/or modify 10 | it under the terms of the GNU General Public License as published by 11 | the Free Software Foundation, either version 3 of the License, or 12 | (at your option) any later version. 13 | 14 | This program is distributed in the hope that it will be useful, 15 | but WITHOUT ANY WARRANTY; without even the implied warranty of 16 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 17 | GNU General Public License for more details. 18 | 19 | You should have received a copy of the GNU General Public License 20 | along with this program. If not, see . 21 | 22 | Thank you for using free software! 23 | 24 | ---------------------------------------------------------------------------- */ 25 | 26 | #ifndef FRUT_AMALGAMATED_DSP_CPP 27 | #define FRUT_AMALGAMATED_DSP_CPP 28 | 29 | 30 | #include "../FrutHeader.h" 31 | 32 | #include "../dsp/biquad_filter.cpp" 33 | #include "../dsp/dither.cpp" 34 | #include "../dsp/fftw_runner.cpp" 35 | #include "../dsp/filter_chebyshev.cpp" 36 | #include "../dsp/filter_chebyshev_stage.cpp" 37 | #include "../dsp/fir_filter_box.cpp" 38 | #include "../dsp/iir_filter_box.cpp" 39 | #include "../dsp/rate_converter.cpp" 40 | #include "../dsp/true_peak_meter.cpp" 41 | 42 | 43 | #endif // FRUT_AMALGAMATED_DSP_CPP 44 | -------------------------------------------------------------------------------- /Source/frut/amalgamated/include_frut_dsp.h: -------------------------------------------------------------------------------- 1 | /* ---------------------------------------------------------------------------- 2 | 3 | FrutJUCE 4 | ======== 5 | Common classes for use with the JUCE library 6 | 7 | Copyright (c) 2010-2020 Martin Zuther (http://www.mzuther.de/) 8 | 9 | This program is free software: you can redistribute it and/or modify 10 | it under the terms of the GNU General Public License as published by 11 | the Free Software Foundation, either version 3 of the License, or 12 | (at your option) any later version. 13 | 14 | This program is distributed in the hope that it will be useful, 15 | but WITHOUT ANY WARRANTY; without even the implied warranty of 16 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 17 | GNU General Public License for more details. 18 | 19 | You should have received a copy of the GNU General Public License 20 | along with this program. If not, see . 21 | 22 | Thank you for using free software! 23 | 24 | ---------------------------------------------------------------------------- */ 25 | 26 | #ifndef FRUT_AMALGAMATED_DSP_H 27 | #define FRUT_AMALGAMATED_DSP_H 28 | 29 | 30 | // special includes 31 | #include 32 | #include 33 | 34 | #if FRUT_DSP_USE_FFTW 35 | #include "fftw/api/fftw3.h" 36 | #endif // FRUT_DSP_USE_FFTW 37 | 38 | // normal includes 39 | #include "../dsp/biquad_filter.h" 40 | #include "../dsp/dither.h" 41 | #include "../dsp/fftw_runner.h" 42 | #include "../dsp/filter_chebyshev_stage.h" 43 | #include "../dsp/fir_filter_box.h" 44 | #include "../dsp/iir_filter_box.h" 45 | #include "../dsp/rate_converter.h" 46 | #include "../dsp/true_peak_meter.h" 47 | 48 | // post includes 49 | #include "../dsp/filter_chebyshev.h" 50 | 51 | 52 | #endif // FRUT_AMALGAMATED_DSP_H 53 | -------------------------------------------------------------------------------- /Source/frut/amalgamated/include_frut_math.cpp: -------------------------------------------------------------------------------- 1 | /* ---------------------------------------------------------------------------- 2 | 3 | FrutJUCE 4 | ======== 5 | Common classes for use with the JUCE library 6 | 7 | Copyright (c) 2010-2020 Martin Zuther (http://www.mzuther.de/) 8 | 9 | This program is free software: you can redistribute it and/or modify 10 | it under the terms of the GNU General Public License as published by 11 | the Free Software Foundation, either version 3 of the License, or 12 | (at your option) any later version. 13 | 14 | This program is distributed in the hope that it will be useful, 15 | but WITHOUT ANY WARRANTY; without even the implied warranty of 16 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 17 | GNU General Public License for more details. 18 | 19 | You should have received a copy of the GNU General Public License 20 | along with this program. If not, see . 21 | 22 | Thank you for using free software! 23 | 24 | ---------------------------------------------------------------------------- */ 25 | 26 | #ifndef FRUT_AMALGAMATED_MATH_CPP 27 | #define FRUT_AMALGAMATED_MATH_CPP 28 | 29 | 30 | #include "../FrutHeader.h" 31 | 32 | #include "../math/averager.cpp" 33 | 34 | 35 | #endif // FRUT_AMALGAMATED_MATH_CPP 36 | -------------------------------------------------------------------------------- /Source/frut/amalgamated/include_frut_math.h: -------------------------------------------------------------------------------- 1 | /* ---------------------------------------------------------------------------- 2 | 3 | FrutJUCE 4 | ======== 5 | Common classes for use with the JUCE library 6 | 7 | Copyright (c) 2010-2020 Martin Zuther (http://www.mzuther.de/) 8 | 9 | This program is free software: you can redistribute it and/or modify 10 | it under the terms of the GNU General Public License as published by 11 | the Free Software Foundation, either version 3 of the License, or 12 | (at your option) any later version. 13 | 14 | This program is distributed in the hope that it will be useful, 15 | but WITHOUT ANY WARRANTY; without even the implied warranty of 16 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 17 | GNU General Public License for more details. 18 | 19 | You should have received a copy of the GNU General Public License 20 | along with this program. If not, see . 21 | 22 | Thank you for using free software! 23 | 24 | ---------------------------------------------------------------------------- */ 25 | 26 | #ifndef FRUT_AMALGAMATED_MATH_H 27 | #define FRUT_AMALGAMATED_MATH_H 28 | 29 | 30 | // normal includes 31 | #include "../math/averager.h" 32 | #include "../math/simple_math.h" 33 | 34 | 35 | #endif // FRUT_AMALGAMATED_MATH_H 36 | -------------------------------------------------------------------------------- /Source/frut/amalgamated/include_frut_parameters.cpp: -------------------------------------------------------------------------------- 1 | /* ---------------------------------------------------------------------------- 2 | 3 | FrutJUCE 4 | ======== 5 | Common classes for use with the JUCE library 6 | 7 | Copyright (c) 2010-2020 Martin Zuther (http://www.mzuther.de/) 8 | 9 | This program is free software: you can redistribute it and/or modify 10 | it under the terms of the GNU General Public License as published by 11 | the Free Software Foundation, either version 3 of the License, or 12 | (at your option) any later version. 13 | 14 | This program is distributed in the hope that it will be useful, 15 | but WITHOUT ANY WARRANTY; without even the implied warranty of 16 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 17 | GNU General Public License for more details. 18 | 19 | You should have received a copy of the GNU General Public License 20 | along with this program. If not, see . 21 | 22 | Thank you for using free software! 23 | 24 | ---------------------------------------------------------------------------- */ 25 | 26 | #ifndef FRUT_AMALGAMATED_PARAMETERS_CPP 27 | #define FRUT_AMALGAMATED_PARAMETERS_CPP 28 | 29 | 30 | #include "../FrutHeader.h" 31 | 32 | #include "../parameters/juggler.cpp" 33 | #include "../parameters/par_boolean.cpp" 34 | #include "../parameters/par_combined.cpp" 35 | #include "../parameters/par_continuous.cpp" 36 | #include "../parameters/par_string.cpp" 37 | #include "../parameters/par_switch.cpp" 38 | #include "../parameters/parameter.cpp" 39 | 40 | 41 | #endif // FRUT_AMALGAMATED_PARAMETERS_CPP 42 | -------------------------------------------------------------------------------- /Source/frut/amalgamated/include_frut_parameters.h: -------------------------------------------------------------------------------- 1 | /* ---------------------------------------------------------------------------- 2 | 3 | FrutJUCE 4 | ======== 5 | Common classes for use with the JUCE library 6 | 7 | Copyright (c) 2010-2020 Martin Zuther (http://www.mzuther.de/) 8 | 9 | This program is free software: you can redistribute it and/or modify 10 | it under the terms of the GNU General Public License as published by 11 | the Free Software Foundation, either version 3 of the License, or 12 | (at your option) any later version. 13 | 14 | This program is distributed in the hope that it will be useful, 15 | but WITHOUT ANY WARRANTY; without even the implied warranty of 16 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 17 | GNU General Public License for more details. 18 | 19 | You should have received a copy of the GNU General Public License 20 | along with this program. If not, see . 21 | 22 | Thank you for using free software! 23 | 24 | ---------------------------------------------------------------------------- */ 25 | 26 | #ifndef FRUT_AMALGAMATED_PARAMETERS_H 27 | #define FRUT_AMALGAMATED_PARAMETERS_H 28 | 29 | 30 | // pre includes 31 | #include "../parameters/parameter.h" 32 | 33 | // normal includes 34 | #include "../parameters/par_boolean.h" 35 | #include "../parameters/par_continuous.h" 36 | #include "../parameters/par_string.h" 37 | #include "../parameters/par_switch.h" 38 | 39 | // post includes 40 | #include "../parameters/par_combined.h" 41 | #include "../parameters/juggler.h" 42 | 43 | 44 | #endif // FRUT_AMALGAMATED_PARAMETERS_H 45 | -------------------------------------------------------------------------------- /Source/frut/amalgamated/include_frut_skin.cpp: -------------------------------------------------------------------------------- 1 | /* ---------------------------------------------------------------------------- 2 | 3 | FrutJUCE 4 | ======== 5 | Common classes for use with the JUCE library 6 | 7 | Copyright (c) 2010-2020 Martin Zuther (http://www.mzuther.de/) 8 | 9 | This program is free software: you can redistribute it and/or modify 10 | it under the terms of the GNU General Public License as published by 11 | the Free Software Foundation, either version 3 of the License, or 12 | (at your option) any later version. 13 | 14 | This program is distributed in the hope that it will be useful, 15 | but WITHOUT ANY WARRANTY; without even the implied warranty of 16 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 17 | GNU General Public License for more details. 18 | 19 | You should have received a copy of the GNU General Public License 20 | along with this program. If not, see . 21 | 22 | Thank you for using free software! 23 | 24 | ---------------------------------------------------------------------------- */ 25 | 26 | #ifndef FRUT_AMALGAMATED_SKIN_CPP 27 | #define FRUT_AMALGAMATED_SKIN_CPP 28 | 29 | 30 | #include "../FrutHeader.h" 31 | 32 | #include "../skin/look_and_feel_v3.cpp" 33 | #include "../skin/skin.cpp" 34 | 35 | 36 | #endif // FRUT_AMALGAMATED_SKIN_CPP 37 | -------------------------------------------------------------------------------- /Source/frut/amalgamated/include_frut_skin.h: -------------------------------------------------------------------------------- 1 | /* ---------------------------------------------------------------------------- 2 | 3 | FrutJUCE 4 | ======== 5 | Common classes for use with the JUCE library 6 | 7 | Copyright (c) 2010-2020 Martin Zuther (http://www.mzuther.de/) 8 | 9 | This program is free software: you can redistribute it and/or modify 10 | it under the terms of the GNU General Public License as published by 11 | the Free Software Foundation, either version 3 of the License, or 12 | (at your option) any later version. 13 | 14 | This program is distributed in the hope that it will be useful, 15 | but WITHOUT ANY WARRANTY; without even the implied warranty of 16 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 17 | GNU General Public License for more details. 18 | 19 | You should have received a copy of the GNU General Public License 20 | along with this program. If not, see . 21 | 22 | Thank you for using free software! 23 | 24 | ---------------------------------------------------------------------------- */ 25 | 26 | #ifndef FRUT_AMALGAMATED_SKIN_H 27 | #define FRUT_AMALGAMATED_SKIN_H 28 | 29 | 30 | // normal includes 31 | #include "../skin/look_and_feel_v3.h" 32 | #include "../skin/skin.h" 33 | 34 | 35 | #endif // FRUT_AMALGAMATED_SKIN_H 36 | -------------------------------------------------------------------------------- /Source/frut/amalgamated/include_frut_widgets.cpp: -------------------------------------------------------------------------------- 1 | /* ---------------------------------------------------------------------------- 2 | 3 | FrutJUCE 4 | ======== 5 | Common classes for use with the JUCE library 6 | 7 | Copyright (c) 2010-2020 Martin Zuther (http://www.mzuther.de/) 8 | 9 | This program is free software: you can redistribute it and/or modify 10 | it under the terms of the GNU General Public License as published by 11 | the Free Software Foundation, either version 3 of the License, or 12 | (at your option) any later version. 13 | 14 | This program is distributed in the hope that it will be useful, 15 | but WITHOUT ANY WARRANTY; without even the implied warranty of 16 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 17 | GNU General Public License for more details. 18 | 19 | You should have received a copy of the GNU General Public License 20 | along with this program. If not, see . 21 | 22 | Thank you for using free software! 23 | 24 | ---------------------------------------------------------------------------- */ 25 | 26 | #ifndef FRUT_AMALGAMATED_WIDGETS_CPP 27 | #define FRUT_AMALGAMATED_WIDGETS_CPP 28 | 29 | 30 | #include "../FrutHeader.h" 31 | 32 | #include "../widgets/channel_slider.cpp" 33 | #include "../widgets/meter_bar.cpp" 34 | #include "../widgets/meter_segment.cpp" 35 | #include "../widgets/meter_segment_continuous.cpp" 36 | #include "../widgets/meter_segment_discrete.cpp" 37 | #include "../widgets/needle_meter.cpp" 38 | #include "../widgets/resources/resources.cpp" 39 | #include "../widgets/signal_led.cpp" 40 | #include "../widgets/slider_combined.cpp" 41 | #include "../widgets/slider_continuous.cpp" 42 | #include "../widgets/slider_switch.cpp" 43 | #include "../widgets/slider_switch_linear_bar.cpp" 44 | #include "../widgets/state_label.cpp" 45 | #include "../widgets/window_about_content.cpp" 46 | #include "../widgets/window_settings_content.cpp" 47 | #include "../widgets/window_skin_content.cpp" 48 | #include "../widgets/window_validation_content.cpp" 49 | 50 | 51 | #endif // FRUT_AMALGAMATED_WIDGETS_CPP 52 | -------------------------------------------------------------------------------- /Source/frut/amalgamated/include_frut_widgets.h: -------------------------------------------------------------------------------- 1 | /* ---------------------------------------------------------------------------- 2 | 3 | FrutJUCE 4 | ======== 5 | Common classes for use with the JUCE library 6 | 7 | Copyright (c) 2010-2020 Martin Zuther (http://www.mzuther.de/) 8 | 9 | This program is free software: you can redistribute it and/or modify 10 | it under the terms of the GNU General Public License as published by 11 | the Free Software Foundation, either version 3 of the License, or 12 | (at your option) any later version. 13 | 14 | This program is distributed in the hope that it will be useful, 15 | but WITHOUT ANY WARRANTY; without even the implied warranty of 16 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 17 | GNU General Public License for more details. 18 | 19 | You should have received a copy of the GNU General Public License 20 | along with this program. If not, see . 21 | 22 | Thank you for using free software! 23 | 24 | ---------------------------------------------------------------------------- */ 25 | 26 | #ifndef FRUT_AMALGAMATED_WIDGETS_H 27 | #define FRUT_AMALGAMATED_WIDGETS_H 28 | 29 | 30 | // pre includes 31 | #include "../widgets/orientation.h" 32 | #include "../widgets/resources/resources.h" 33 | #include "../widgets/slider.h" 34 | 35 | // normal includes 36 | #include "../widgets/channel_slider.h" 37 | #include "../widgets/meter_segment.h" 38 | #include "../widgets/meter_segment_continuous.h" 39 | #include "../widgets/meter_segment_discrete.h" 40 | #include "../widgets/needle_meter.h" 41 | #include "../widgets/signal_led.h" 42 | #include "../widgets/slider_combined.h" 43 | #include "../widgets/slider_continuous.h" 44 | #include "../widgets/slider_switch.h" 45 | #include "../widgets/slider_switch_linear_bar.h" 46 | #include "../widgets/state_label.h" 47 | #include "../widgets/window_about_content.h" 48 | #include "../widgets/window_settings_content.h" 49 | #include "../widgets/window_skin_content.h" 50 | #include "../widgets/window_validation_content.h" 51 | 52 | // post includes 53 | #include "../widgets/meter_bar.h" 54 | 55 | 56 | #endif // FRUT_AMALGAMATED_WIDGETS_H 57 | -------------------------------------------------------------------------------- /Source/frut/dsp/biquad_filter.h: -------------------------------------------------------------------------------- 1 | /* ---------------------------------------------------------------------------- 2 | 3 | FrutJUCE 4 | ======== 5 | Common classes for use with the JUCE library 6 | 7 | Copyright (c) 2010-2020 Martin Zuther (http://www.mzuther.de/) 8 | 9 | This program is free software: you can redistribute it and/or modify 10 | it under the terms of the GNU General Public License as published by 11 | the Free Software Foundation, either version 3 of the License, or 12 | (at your option) any later version. 13 | 14 | This program is distributed in the hope that it will be useful, 15 | but WITHOUT ANY WARRANTY; without even the implied warranty of 16 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 17 | GNU General Public License for more details. 18 | 19 | You should have received a copy of the GNU General Public License 20 | along with this program. If not, see . 21 | 22 | Thank you for using free software! 23 | 24 | ---------------------------------------------------------------------------- */ 25 | 26 | #ifndef FRUT_DSP_BIQUAD_FILTER_H 27 | #define FRUT_DSP_BIQUAD_FILTER_H 28 | 29 | namespace frut 30 | { 31 | namespace dsp 32 | { 33 | 34 | class BiquadFilter 35 | { 36 | public: 37 | explicit BiquadFilter(const int numberOfChannels); 38 | ~BiquadFilter(); 39 | 40 | void neutral(); 41 | void resetDelays(); 42 | 43 | void processSample(double &sampleValue, const int channel); 44 | void processInPlace(AudioBuffer &buffer); 45 | AudioBuffer process(const AudioBuffer &inputBuffer); 46 | 47 | void setCoefficients(const double a0, const double a1, const double a2, 48 | const double b1, const double b2, 49 | const bool showCoefficients = false); 50 | 51 | void setCoefficients(const double a0, const double a1, const double a2, 52 | const double b1, const double b2, 53 | const double c0, const double d0, 54 | const bool showCoefficients = false); 55 | 56 | protected: 57 | void processSampleInternal(double &sampleValue, 58 | double &x0, double &x1, double &x2, 59 | double &y1, double &y2); 60 | 61 | private: 62 | int numberOfChannels_; 63 | 64 | double a0_; 65 | double a1_; 66 | double a2_; 67 | 68 | double b1_; 69 | double b2_; 70 | 71 | // necessary for some audio filters 72 | double c0_; 73 | double d0_; 74 | 75 | Array x0_; 76 | Array x1_; 77 | Array x2_; 78 | 79 | Array y1_; 80 | Array y2_; 81 | 82 | JUCE_LEAK_DETECTOR(BiquadFilter); 83 | }; 84 | 85 | } 86 | } 87 | 88 | #endif // FRUT_DSP_BIQUAD_FILTER_H 89 | -------------------------------------------------------------------------------- /Source/frut/dsp/dither.h: -------------------------------------------------------------------------------- 1 | /* ---------------------------------------------------------------------------- 2 | 3 | FrutJUCE 4 | ======== 5 | Common classes for use with the JUCE library 6 | 7 | Copyright (c) 2010-2020 Martin Zuther (http://www.mzuther.de/) 8 | 9 | This program is free software: you can redistribute it and/or modify 10 | it under the terms of the GNU General Public License as published by 11 | the Free Software Foundation, either version 3 of the License, or 12 | (at your option) any later version. 13 | 14 | This program is distributed in the hope that it will be useful, 15 | but WITHOUT ANY WARRANTY; without even the implied warranty of 16 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 17 | GNU General Public License for more details. 18 | 19 | You should have received a copy of the GNU General Public License 20 | along with this program. If not, see . 21 | 22 | Thank you for using free software! 23 | 24 | ---------------------------------------------------------------------------- */ 25 | 26 | #ifndef FRUT_DSP_DITHER_H 27 | #define FRUT_DSP_DITHER_H 28 | 29 | namespace frut 30 | { 31 | namespace dsp 32 | { 33 | 34 | class Dither 35 | { 36 | public: 37 | Dither(); 38 | 39 | void initialise(const int numberOfChannels, 40 | const int numberOfBits, 41 | const double noiseShaping = 0.5); 42 | 43 | void convertToDouble(const AudioBuffer &sourceBufferFloat, 44 | AudioBuffer &destinationBufferDouble); 45 | 46 | void truncateToFloat(const AudioBuffer &sourceBufferDouble, 47 | AudioBuffer &destinationBufferFloat); 48 | 49 | void denormalize(AudioBuffer &buffer); 50 | void denormalize(AudioBuffer &buffer); 51 | 52 | void denormalizeToDouble(const AudioBuffer &sourceBufferFloat, 53 | AudioBuffer &destinationBufferDouble); 54 | 55 | float ditherSample(const int currentChannel, 56 | const double &sourceValueDouble); 57 | 58 | void ditherToFloat(const AudioBuffer &sourceBufferDouble, 59 | AudioBuffer &destinationBufferFloat); 60 | 61 | private: 62 | Array randomNumber_1_; 63 | Array randomNumber_2_; 64 | 65 | Array errorFeedback_1_; 66 | Array errorFeedback_2_; 67 | 68 | const float antiDenormalFloat_; 69 | const double antiDenormalDouble_; 70 | 71 | bool isInitialized_; 72 | 73 | int numberOfChannels_; 74 | 75 | double dcOffset_; 76 | double ditherAmplitude_; 77 | double noiseShaping_; 78 | double wordLength_; 79 | double wordLengthInverted_; 80 | }; 81 | 82 | } 83 | } 84 | 85 | #endif // FRUT_DSP_DITHER_H 86 | -------------------------------------------------------------------------------- /Source/frut/dsp/fftw_runner.h: -------------------------------------------------------------------------------- 1 | /* ---------------------------------------------------------------------------- 2 | 3 | FrutJUCE 4 | ======== 5 | Common classes for use with the JUCE library 6 | 7 | Copyright (c) 2010-2020 Martin Zuther (http://www.mzuther.de/) 8 | 9 | This program is free software: you can redistribute it and/or modify 10 | it under the terms of the GNU General Public License as published by 11 | the Free Software Foundation, either version 3 of the License, or 12 | (at your option) any later version. 13 | 14 | This program is distributed in the hope that it will be useful, 15 | but WITHOUT ANY WARRANTY; without even the implied warranty of 16 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 17 | GNU General Public License for more details. 18 | 19 | You should have received a copy of the GNU General Public License 20 | along with this program. If not, see . 21 | 22 | Thank you for using free software! 23 | 24 | ---------------------------------------------------------------------------- */ 25 | 26 | #if FRUT_DSP_USE_FFTW 27 | 28 | #ifndef FRUT_DSP_FFTW_RUNNER_H 29 | #define FRUT_DSP_FFTW_RUNNER_H 30 | 31 | namespace frut 32 | { 33 | namespace dsp 34 | { 35 | 36 | class FftwRunner 37 | { 38 | public: 39 | FftwRunner(const int numberOfChannels, 40 | const int fftBufferSize); 41 | 42 | virtual ~FftwRunner(); 43 | 44 | virtual void reset(); 45 | void convolveWithKernel(const int channel, 46 | const float oversamplingRate = 1.0f); 47 | 48 | protected: 49 | DynamicLibrary dynamicLibraryFFTW; 50 | 51 | float *filterKernel_TD_; 52 | fftwf_complex *filterKernel_FD_; 53 | fftwf_plan filterKernelPlan_DFT_; 54 | 55 | float *audioSamples_TD_; 56 | fftwf_complex *audioSamples_FD_; 57 | fftwf_plan audioSamplesPlan_DFT_; 58 | fftwf_plan audioSamplesPlan_IDFT_; 59 | 60 | int numberOfChannels_; 61 | int fftBufferSize_; 62 | 63 | int fftSize_; 64 | int halfFftSizePlusOne_; 65 | 66 | AudioBuffer fftSampleBuffer_; 67 | AudioBuffer fftOverlapAddSamples_; 68 | 69 | #if (defined (_WIN32) || defined (_WIN64)) 70 | float *(*fftwf_alloc_real)(size_t); 71 | fftwf_complex *(*fftwf_alloc_complex)(size_t); 72 | void (*fftwf_free)(void *); 73 | 74 | fftwf_plan(*fftwf_plan_dft_r2c_1d)(int, float *, fftwf_complex *, unsigned); 75 | fftwf_plan(*fftwf_plan_dft_c2r_1d)(int, fftwf_complex *, float *, unsigned); 76 | void (*fftwf_destroy_plan)(fftwf_plan); 77 | 78 | void (*fftwf_execute)(const fftwf_plan); 79 | #endif 80 | 81 | private: 82 | JUCE_LEAK_DETECTOR(FftwRunner); 83 | }; 84 | 85 | } 86 | } 87 | 88 | #endif // FRUT_DSP_FFTW_RUNNER_H 89 | 90 | #endif // FRUT_DSP_USE_FFTW 91 | -------------------------------------------------------------------------------- /Source/frut/dsp/filter_chebyshev.h: -------------------------------------------------------------------------------- 1 | /* ---------------------------------------------------------------------------- 2 | 3 | FrutJUCE 4 | ======== 5 | Common classes for use with the JUCE library 6 | 7 | Copyright (c) 2010-2020 Martin Zuther (http://www.mzuther.de/) 8 | 9 | This program is free software: you can redistribute it and/or modify 10 | it under the terms of the GNU General Public License as published by 11 | the Free Software Foundation, either version 3 of the License, or 12 | (at your option) any later version. 13 | 14 | This program is distributed in the hope that it will be useful, 15 | but WITHOUT ANY WARRANTY; without even the implied warranty of 16 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 17 | GNU General Public License for more details. 18 | 19 | You should have received a copy of the GNU General Public License 20 | along with this program. If not, see . 21 | 22 | Thank you for using free software! 23 | 24 | ---------------------------------------------------------------------------- */ 25 | 26 | #ifndef FRUT_DSP_FILTER_CHEBYSHEV_H 27 | #define FRUT_DSP_FILTER_CHEBYSHEV_H 28 | 29 | namespace frut 30 | { 31 | namespace dsp 32 | { 33 | 34 | class FilterChebyshev 35 | { 36 | public: 37 | FilterChebyshev(double RelativeCutoffFrequency, 38 | bool IsHighPass, 39 | double PercentRipple, 40 | int NumberOfPoles); 41 | 42 | void changeParameters(double RelativeCutoffFrequency, 43 | bool IsHighPass); 44 | 45 | void reset(); 46 | 47 | double filterSample(double InputCurrent); 48 | void testAlgorithm(bool IsHighPass); 49 | 50 | private: 51 | OwnedArray FilterStages_; 52 | 53 | int NumberOfPoles_; 54 | double PercentRipple_; 55 | }; 56 | 57 | } 58 | } 59 | 60 | #endif // FRUT_DSP_FILTER_CHEBYSHEV_H 61 | -------------------------------------------------------------------------------- /Source/frut/dsp/filter_chebyshev_stage.h: -------------------------------------------------------------------------------- 1 | /* ---------------------------------------------------------------------------- 2 | 3 | FrutJUCE 4 | ======== 5 | Common classes for use with the JUCE library 6 | 7 | Copyright (c) 2010-2020 Martin Zuther (http://www.mzuther.de/) 8 | 9 | This program is free software: you can redistribute it and/or modify 10 | it under the terms of the GNU General Public License as published by 11 | the Free Software Foundation, either version 3 of the License, or 12 | (at your option) any later version. 13 | 14 | This program is distributed in the hope that it will be useful, 15 | but WITHOUT ANY WARRANTY; without even the implied warranty of 16 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 17 | GNU General Public License for more details. 18 | 19 | You should have received a copy of the GNU General Public License 20 | along with this program. If not, see . 21 | 22 | Thank you for using free software! 23 | 24 | ---------------------------------------------------------------------------- */ 25 | 26 | #ifndef FRUT_DSP_FILTER_CHEBYSHEV_STAGE_H 27 | #define FRUT_DSP_FILTER_CHEBYSHEV_STAGE_H 28 | 29 | namespace frut 30 | { 31 | namespace dsp 32 | { 33 | 34 | class FilterChebyshevStage 35 | { 36 | public: 37 | FilterChebyshevStage(); 38 | 39 | void changeParameters(double RelativeCutoffFrequency, 40 | bool IsHighPass, 41 | double PercentRipple, 42 | int NumberOfPoles, 43 | int PolePair); 44 | 45 | void reset(); 46 | double filterSample(double InputCurrent); 47 | 48 | String testAlgorithm(double RelativeCutoffFrequency, 49 | bool IsHighPass, 50 | double PercentRipple); 51 | String getCoefficients(); 52 | 53 | private: 54 | double RelativeCutoffFrequency_; 55 | bool IsHighPass_; 56 | 57 | double Coeff_A0_; 58 | double Coeff_A1_; 59 | double Coeff_A2_; 60 | 61 | double Coeff_B1_; 62 | double Coeff_B2_; 63 | 64 | double InputPrevious_1_; 65 | double InputPrevious_2_; 66 | 67 | double OutputPrevious_1_; 68 | double OutputPrevious_2_; 69 | }; 70 | 71 | } 72 | } 73 | 74 | #endif // FRUT_DSP_FILTER_CHEBYSHEV_STAGE_H 75 | -------------------------------------------------------------------------------- /Source/frut/dsp/fir_filter_box.cpp: -------------------------------------------------------------------------------- 1 | /* ---------------------------------------------------------------------------- 2 | 3 | FrutJUCE 4 | ======== 5 | Common classes for use with the JUCE library 6 | 7 | Copyright (c) 2010-2020 Martin Zuther (http://www.mzuther.de/) 8 | 9 | This program is free software: you can redistribute it and/or modify 10 | it under the terms of the GNU General Public License as published by 11 | the Free Software Foundation, either version 3 of the License, or 12 | (at your option) any later version. 13 | 14 | This program is distributed in the hope that it will be useful, 15 | but WITHOUT ANY WARRANTY; without even the implied warranty of 16 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 17 | GNU General Public License for more details. 18 | 19 | You should have received a copy of the GNU General Public License 20 | along with this program. If not, see . 21 | 22 | Thank you for using free software! 23 | 24 | ---------------------------------------------------------------------------- */ 25 | 26 | #if FRUT_DSP_USE_FFTW 27 | 28 | namespace frut 29 | { 30 | namespace dsp 31 | { 32 | 33 | FIRFilterBox::FIRFilterBox( 34 | const int numberOfChannels, 35 | const int fftBufferSize) : 36 | 37 | frut::dsp::FftwRunner(numberOfChannels, fftBufferSize) 38 | { 39 | } 40 | 41 | 42 | FIRFilterBox::~FIRFilterBox() 43 | { 44 | } 45 | 46 | 47 | void FIRFilterBox::reset() 48 | { 49 | FftwRunner::reset(); 50 | } 51 | 52 | 53 | // calculate filter kernel for windowed-sinc low-pass filter 54 | void FIRFilterBox::calculateKernelWindowedSincLPF( 55 | const double relativeCutoffFrequency) 56 | { 57 | int samples = fftBufferSize_ + 1; 58 | double samplesHalf = samples / 2.0; 59 | 60 | // calculate filter kernel 61 | for (int i = 0; i < samples; ++i) 62 | { 63 | if (i == samplesHalf) 64 | { 65 | filterKernel_TD_[i] = static_cast( 66 | 2.0 * M_PI * relativeCutoffFrequency); 67 | } 68 | else 69 | { 70 | filterKernel_TD_[i] = static_cast( 71 | sin(2.0 * M_PI * relativeCutoffFrequency * (i - samplesHalf)) / (i - samplesHalf) * (0.42 - 0.5 * cos(2.0 * M_PI * i / samples) + 0.08 * cos(4.0 * M_PI * i / samples))); 72 | } 73 | } 74 | 75 | // normalise filter kernel for unity gain at DC 76 | double kernelSum = 0.0; 77 | 78 | for (int i = 0; i < samples; ++i) 79 | { 80 | kernelSum += filterKernel_TD_[i]; 81 | } 82 | 83 | for (int i = 0; i < samples; ++i) 84 | { 85 | filterKernel_TD_[i] = static_cast( 86 | filterKernel_TD_[i] / kernelSum); 87 | } 88 | 89 | // pad filter kernel with zeros 90 | for (int i = samples; i < fftSize_; ++i) 91 | { 92 | filterKernel_TD_[i] = 0.0f; 93 | } 94 | 95 | // calculate DFT of filter kernel 96 | fftwf_execute(filterKernelPlan_DFT_); 97 | } 98 | 99 | } 100 | } 101 | 102 | #endif // FRUT_DSP_USE_FFTW 103 | -------------------------------------------------------------------------------- /Source/frut/dsp/fir_filter_box.h: -------------------------------------------------------------------------------- 1 | /* ---------------------------------------------------------------------------- 2 | 3 | FrutJUCE 4 | ======== 5 | Common classes for use with the JUCE library 6 | 7 | Copyright (c) 2010-2020 Martin Zuther (http://www.mzuther.de/) 8 | 9 | This program is free software: you can redistribute it and/or modify 10 | it under the terms of the GNU General Public License as published by 11 | the Free Software Foundation, either version 3 of the License, or 12 | (at your option) any later version. 13 | 14 | This program is distributed in the hope that it will be useful, 15 | but WITHOUT ANY WARRANTY; without even the implied warranty of 16 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 17 | GNU General Public License for more details. 18 | 19 | You should have received a copy of the GNU General Public License 20 | along with this program. If not, see . 21 | 22 | Thank you for using free software! 23 | 24 | ---------------------------------------------------------------------------- */ 25 | 26 | #if FRUT_DSP_USE_FFTW 27 | 28 | #ifndef FRUT_DSP_FIR_FILTER_BOX_H 29 | #define FRUT_DSP_FIR_FILTER_BOX_H 30 | 31 | namespace frut 32 | { 33 | namespace dsp 34 | { 35 | 36 | class FIRFilterBox : 37 | public FftwRunner 38 | { 39 | public: 40 | FIRFilterBox(const int numberOfChannels, 41 | const int fftBufferSize); 42 | 43 | virtual ~FIRFilterBox(); 44 | 45 | virtual void reset(); 46 | void calculateKernelWindowedSincLPF( 47 | const double relativeCutoffFrequency); 48 | 49 | private: 50 | JUCE_LEAK_DETECTOR(FIRFilterBox); 51 | }; 52 | 53 | } 54 | } 55 | 56 | #endif // FRUT_DSP_FIR_FILTER_BOX_H 57 | 58 | #endif // FRUT_DSP_USE_FFTW 59 | -------------------------------------------------------------------------------- /Source/frut/dsp/iir_filter_box.h: -------------------------------------------------------------------------------- 1 | /* ---------------------------------------------------------------------------- 2 | 3 | FrutJUCE 4 | ======== 5 | Common classes for use with the JUCE library 6 | 7 | Copyright (c) 2010-2020 Martin Zuther (http://www.mzuther.de/) 8 | 9 | This program is free software: you can redistribute it and/or modify 10 | it under the terms of the GNU General Public License as published by 11 | the Free Software Foundation, either version 3 of the License, or 12 | (at your option) any later version. 13 | 14 | This program is distributed in the hope that it will be useful, 15 | but WITHOUT ANY WARRANTY; without even the implied warranty of 16 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 17 | GNU General Public License for more details. 18 | 19 | You should have received a copy of the GNU General Public License 20 | along with this program. If not, see . 21 | 22 | Thank you for using free software! 23 | 24 | ---------------------------------------------------------------------------- */ 25 | 26 | #ifndef FRUT_DSP_IIR_FILTER_BOX_H 27 | #define FRUT_DSP_IIR_FILTER_BOX_H 28 | 29 | namespace frut 30 | { 31 | namespace dsp 32 | { 33 | 34 | class IirFilterBox : 35 | public BiquadFilter 36 | { 37 | public: 38 | IirFilterBox(const int numberOfChannels, const double sampleRate); 39 | 40 | double bandwidthToQualityFactor(const double octaveBandwidth); 41 | 42 | void passFilterFirstOrder( 43 | const double cutoffFrequencyInHz, 44 | const bool isLowPass); 45 | 46 | void passFilterSecondOrder( 47 | const double cutoffFrequencyInHz, 48 | const double qualityFactor, 49 | const bool isLowPass); 50 | 51 | void shelvingFilterFirstOrder( 52 | const double cutoffFrequencyInHz, 53 | const double gainInDecibels, 54 | const bool isLowShelving); 55 | 56 | void peakingFilterVariableQ( 57 | const double cutoffFrequencyInHz, 58 | const double gainInDecibels, 59 | const double qualityFactor); 60 | 61 | void peakingFilterConstantQ( 62 | const double cutoffFrequencyInHz, 63 | const double gainInDecibels, 64 | const double qualityFactor); 65 | 66 | protected: 67 | double sampleRate_; 68 | 69 | private: 70 | JUCE_LEAK_DETECTOR(IirFilterBox); 71 | }; 72 | 73 | } 74 | } 75 | 76 | #endif // FRUT_DSP_IIR_FILTER_BOX_H 77 | -------------------------------------------------------------------------------- /Source/frut/dsp/rate_converter.h: -------------------------------------------------------------------------------- 1 | /* ---------------------------------------------------------------------------- 2 | 3 | FrutJUCE 4 | ======== 5 | Common classes for use with the JUCE library 6 | 7 | Copyright (c) 2010-2020 Martin Zuther (http://www.mzuther.de/) 8 | 9 | This program is free software: you can redistribute it and/or modify 10 | it under the terms of the GNU General Public License as published by 11 | the Free Software Foundation, either version 3 of the License, or 12 | (at your option) any later version. 13 | 14 | This program is distributed in the hope that it will be useful, 15 | but WITHOUT ANY WARRANTY; without even the implied warranty of 16 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 17 | GNU General Public License for more details. 18 | 19 | You should have received a copy of the GNU General Public License 20 | along with this program. If not, see . 21 | 22 | Thank you for using free software! 23 | 24 | ---------------------------------------------------------------------------- */ 25 | 26 | #if FRUT_DSP_USE_FFTW 27 | 28 | #ifndef FRUT_DSP_RATE_CONVERTER_H 29 | #define FRUT_DSP_RATE_CONVERTER_H 30 | 31 | namespace frut 32 | { 33 | namespace dsp 34 | { 35 | 36 | class RateConverter : 37 | public frut::dsp::FIRFilterBox 38 | { 39 | public: 40 | RateConverter( 41 | const int numberOfChannels, 42 | const int originalFftBufferSize, 43 | const int upsamplingFactor); 44 | 45 | virtual ~RateConverter(); 46 | virtual void reset(); 47 | 48 | protected: 49 | void calculateFilterKernel(); 50 | void upsample(); 51 | 52 | int upsamplingFactor_; 53 | int originalFftBufferSize_; 54 | 55 | AudioBuffer sampleBufferOriginal_; 56 | 57 | private: 58 | JUCE_LEAK_DETECTOR(RateConverter); 59 | }; 60 | 61 | } 62 | } 63 | 64 | #endif // FRUT_DSP_RATE_CONVERTER_H 65 | 66 | #endif // FRUT_DSP_USE_FFTW 67 | -------------------------------------------------------------------------------- /Source/frut/dsp/true_peak_meter.h: -------------------------------------------------------------------------------- 1 | /* ---------------------------------------------------------------------------- 2 | 3 | FrutJUCE 4 | ======== 5 | Common classes for use with the JUCE library 6 | 7 | Copyright (c) 2010-2020 Martin Zuther (http://www.mzuther.de/) 8 | 9 | This program is free software: you can redistribute it and/or modify 10 | it under the terms of the GNU General Public License as published by 11 | the Free Software Foundation, either version 3 of the License, or 12 | (at your option) any later version. 13 | 14 | This program is distributed in the hope that it will be useful, 15 | but WITHOUT ANY WARRANTY; without even the implied warranty of 16 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 17 | GNU General Public License for more details. 18 | 19 | You should have received a copy of the GNU General Public License 20 | along with this program. If not, see . 21 | 22 | Thank you for using free software! 23 | 24 | ---------------------------------------------------------------------------- */ 25 | 26 | #if FRUT_DSP_USE_FFTW 27 | 28 | #ifndef FRUT_DSP_TRUE_PEAK_METER_H 29 | #define FRUT_DSP_TRUE_PEAK_METER_H 30 | 31 | namespace frut 32 | { 33 | namespace dsp 34 | { 35 | 36 | class TruePeakMeter : 37 | public frut::dsp::RateConverter 38 | { 39 | public: 40 | TruePeakMeter(const int numberOfChannels, 41 | const int originalFftBufferSize, 42 | const int upsamplingFactor); 43 | 44 | virtual ~TruePeakMeter(); 45 | virtual void reset(); 46 | 47 | float getLevel(const int channel); 48 | 49 | void copyFrom(const AudioBuffer &source, 50 | const int numberOfSamples); 51 | 52 | protected: 53 | void processInput(); 54 | 55 | Array truePeakLevels_; 56 | 57 | private: 58 | JUCE_LEAK_DETECTOR(TruePeakMeter); 59 | }; 60 | 61 | } 62 | } 63 | 64 | #endif // FRUT_DSP_TRUE_PEAK_METER_H 65 | 66 | #endif // FRUT_DSP_USE_FFTW 67 | -------------------------------------------------------------------------------- /Source/frut/format_code.bat: -------------------------------------------------------------------------------- 1 | @echo off 2 | 3 | @rem --------------------------------------------------------------------------- 4 | @rem 5 | @rem FrutJUCE 6 | @rem ======== 7 | @rem Common classes for use with the JUCE library 8 | @rem 9 | @rem Copyright (c) 2010-2020 Martin Zuther (http://www.mzuther.de/) 10 | @rem 11 | @rem This program is free software: you can redistribute it and/or modify 12 | @rem it under the terms of the GNU General Public License as published by 13 | @rem the Free Software Foundation, either version 3 of the License, or 14 | @rem (at your option) any later version. 15 | @rem 16 | @rem This program is distributed in the hope that it will be useful, 17 | @rem but WITHOUT ANY WARRANTY; without even the implied warranty of 18 | @rem MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 19 | @rem GNU General Public License for more details. 20 | @rem 21 | @rem You should have received a copy of the GNU General Public License 22 | @rem along with this program. If not, see . 23 | @rem 24 | @rem Thank you for using free software! 25 | @rem 26 | @rem --------------------------------------------------------------------------- 27 | 28 | @AStyle --recursive --exclude="resources" --options=./.astylerc "*.cpp" "*.h" 29 | @pause 30 | -------------------------------------------------------------------------------- /Source/frut/format_code.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # ---------------------------------------------------------------------------- 4 | # 5 | # FrutJUCE 6 | # ======== 7 | # Common classes for use with the JUCE library 8 | # 9 | # Copyright (c) 2010-2020 Martin Zuther (http://www.mzuther.de/) 10 | # 11 | # This program is free software: you can redistribute it and/or modify 12 | # it under the terms of the GNU General Public License as published by 13 | # the Free Software Foundation, either version 3 of the License, or 14 | # (at your option) any later version. 15 | # 16 | # This program is distributed in the hope that it will be useful, 17 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 18 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 19 | # GNU General Public License for more details. 20 | # 21 | # You should have received a copy of the GNU General Public License 22 | # along with this program. If not, see . 23 | # 24 | # Thank you for using free software! 25 | # 26 | # ---------------------------------------------------------------------------- 27 | 28 | astyle --recursive --exclude="resources" --options=./.astylerc \ 29 | "*.cpp" \ 30 | "*.h" 31 | -------------------------------------------------------------------------------- /Source/frut/jinja/copy_vst.template: -------------------------------------------------------------------------------- 1 | {# -*- mode: Jinja2; -*- ---------------------------------------------------- #} 2 | {# #} 3 | {# FrutJUCE #} 4 | {# ======== #} 5 | {# Common classes for use with the JUCE library #} 6 | {# #} 7 | {# Copyright (c) 2010-2020 Martin Zuther (http://www.mzuther.de/) #} 8 | {# #} 9 | {# This program is free software: you can redistribute it and/or modify #} 10 | {# it under the terms of the GNU General Public License as published by #} 11 | {# the Free Software Foundation, either version 3 of the License, or #} 12 | {# (at your option) any later version. #} 13 | {# #} 14 | {# This program is distributed in the hope that it will be useful, #} 15 | {# but WITHOUT ANY WARRANTY; without even the implied warranty of #} 16 | {# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #} 17 | {# GNU General Public License for more details. #} 18 | {# #} 19 | {# You should have received a copy of the GNU General Public License #} 20 | {# along with this program. If not, see . #} 21 | {# #} 22 | {# Thank you for using free software! #} 23 | {# #} 24 | {# -------------------------------------------------------------------------- #} 25 | 26 | 27 | {%- import 'settings.template' as settings -%} 28 | {%- import 'copy_vst.macros' as render -%} 29 | 30 | {{ render.preamble(settings.copyright, settings.vst2_category) }} 31 | 32 | {% for platform, bits in [['', '32'], [' x64', '64']] -%} 33 | 34 | {% for outdir, header in [['vst2_' + bits, bits + ' bit'], 35 | ['vst2_' + bits + '_categories', bits + ' bit, Categories']] -%} 36 | {{ render.vst2_windows(settings.name, settings.variants_vst2, platform, bits, outdir, header) }} 37 | {% endfor %} 38 | 39 | {{ render.vst3_windows(settings.name, settings.variants, platform, bits) }} 40 | 41 | {% endfor %} 42 | 43 | {{- render.postamble() }} 44 | -------------------------------------------------------------------------------- /Source/frut/jinja/finalise_binaries.template: -------------------------------------------------------------------------------- 1 | {# -*- mode: Jinja2; -*- ---------------------------------------------------- #} 2 | {# #} 3 | {# FrutJUCE #} 4 | {# ======== #} 5 | {# Common classes for use with the JUCE library #} 6 | {# #} 7 | {# Copyright (c) 2010-2020 Martin Zuther (http://www.mzuther.de/) #} 8 | {# #} 9 | {# This program is free software: you can redistribute it and/or modify #} 10 | {# it under the terms of the GNU General Public License as published by #} 11 | {# the Free Software Foundation, either version 3 of the License, or #} 12 | {# (at your option) any later version. #} 13 | {# #} 14 | {# This program is distributed in the hope that it will be useful, #} 15 | {# but WITHOUT ANY WARRANTY; without even the implied warranty of #} 16 | {# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #} 17 | {# GNU General Public License for more details. #} 18 | {# #} 19 | {# You should have received a copy of the GNU General Public License #} 20 | {# along with this program. If not, see . #} 21 | {# #} 22 | {# Thank you for using free software! #} 23 | {# #} 24 | {# -------------------------------------------------------------------------- #} 25 | 26 | 27 | {%- import 'settings.template' as settings -%} 28 | {%- import 'finalise_binaries.macros' as render -%} 29 | 30 | {{ render.preamble(settings.copyright) -}} 31 | 32 | 33 | {% for platform in ['', '_x64'] -%} 34 | 35 | {% for variant in settings.variants %} 36 | {{ render.standalone_linux(settings.name, variant, platform) -}} 37 | {% endfor %} 38 | 39 | {% for variant in settings.variants_vst2 %} 40 | {{ render.vst2_linux(settings.name, variant, platform) -}} 41 | {% endfor %} 42 | 43 | {% endfor -%} 44 | 45 | 46 | {% for platform in ['', ' x64'] -%} 47 | 48 | {% for variant in settings.variants %} 49 | {{ render.standalone_windows(settings.name, variant, platform) -}} 50 | {% endfor %} 51 | 52 | {% for variant in settings.variants_vst2 %} 53 | {{ render.vst2_windows(settings.name, variant, platform) -}} 54 | {% endfor %} 55 | 56 | {% for variant in settings.variants %} 57 | {{ render.vst3_windows(settings.name, variant, platform) -}} 58 | {% endfor %} 59 | 60 | {% endfor %} 61 | 62 | {{- render.postamble() }} 63 | -------------------------------------------------------------------------------- /Source/frut/jinja/package_releases.template: -------------------------------------------------------------------------------- 1 | {# -*- mode: Jinja2; -*- ---------------------------------------------------- #} 2 | {# #} 3 | {# FrutJUCE #} 4 | {# ======== #} 5 | {# Common classes for use with the JUCE library #} 6 | {# #} 7 | {# Copyright (c) 2010-2020 Martin Zuther (http://www.mzuther.de/) #} 8 | {# #} 9 | {# This program is free software: you can redistribute it and/or modify #} 10 | {# it under the terms of the GNU General Public License as published by #} 11 | {# the Free Software Foundation, either version 3 of the License, or #} 12 | {# (at your option) any later version. #} 13 | {# #} 14 | {# This program is distributed in the hope that it will be useful, #} 15 | {# but WITHOUT ANY WARRANTY; without even the implied warranty of #} 16 | {# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #} 17 | {# GNU General Public License for more details. #} 18 | {# #} 19 | {# You should have received a copy of the GNU General Public License #} 20 | {# along with this program. If not, see . #} 21 | {# #} 22 | {# Thank you for using free software! #} 23 | {# #} 24 | {# -------------------------------------------------------------------------- #} 25 | 26 | 27 | {%- import 'settings.template' as settings -%} 28 | {%- import 'package_releases.macros' as render -%} 29 | 30 | {{ render.preamble(settings.copyright, settings.version) }} 31 | 32 | {% for platform, bits in [['', '32'], ['_x64', '64']] -%} 33 | 34 | {{ render.standalone_linux(settings.name, settings.variants, settings.additions_copyvst, platform, bits) }} 35 | 36 | {{ render.vst2_linux(settings.name, settings.variants_vst2, settings.additions_copyvst, platform, bits) }} 37 | 38 | {% endfor -%} 39 | 40 | 41 | {% for platform, bits in [['', '32'], [' x64', '64']] -%} 42 | 43 | {{ render.standalone_windows(settings.name, settings.variants, settings.additions_copyvst, platform, bits) }} 44 | 45 | {{ render.vst2_windows(settings.name, settings.variants_vst2, settings.additions_copyvst, platform, bits) }} 46 | 47 | {{ render.vst3_windows(settings.name, settings.variants, settings.additions_copyvst, platform, bits) }} 48 | 49 | {% endfor %} 50 | 51 | {{- render.postamble() }} 52 | -------------------------------------------------------------------------------- /Source/frut/jinja/premake5.template: -------------------------------------------------------------------------------- 1 | {# -*- mode: Jinja2; -*- ---------------------------------------------------- #} 2 | {# #} 3 | {# FrutJUCE #} 4 | {# ======== #} 5 | {# Common classes for use with the JUCE library #} 6 | {# #} 7 | {# Copyright (c) 2010-2020 Martin Zuther (http://www.mzuther.de/) #} 8 | {# #} 9 | {# This program is free software: you can redistribute it and/or modify #} 10 | {# it under the terms of the GNU General Public License as published by #} 11 | {# the Free Software Foundation, either version 3 of the License, or #} 12 | {# (at your option) any later version. #} 13 | {# #} 14 | {# This program is distributed in the hope that it will be useful, #} 15 | {# but WITHOUT ANY WARRANTY; without even the implied warranty of #} 16 | {# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #} 17 | {# GNU General Public License for more details. #} 18 | {# #} 19 | {# You should have received a copy of the GNU General Public License #} 20 | {# along with this program. If not, see . #} 21 | {# #} 22 | {# Thank you for using free software! #} 23 | {# #} 24 | {# -------------------------------------------------------------------------- #} 25 | 26 | 27 | {%- import 'settings.template' as settings -%} 28 | {%- import 'premake5.macros' as render -%} 29 | 30 | {{ render.copyright(settings.copyright) }} 31 | 32 | {{ render.solution(settings.name, settings.additions_solution, settings.windows_sdk) -}} 33 | 34 | 35 | 36 | {% for variant in settings.variants %} 37 | 38 | -------------------------------------------------------------------------------- 39 | 40 | {{ render.standalone(settings.name, variant, settings.additions_solution) -}} 41 | 42 | {% endfor -%} 43 | 44 | 45 | 46 | {% for variant in settings.variants_vst2 %} 47 | 48 | -------------------------------------------------------------------------------- 49 | 50 | {{ render.vst2(settings.name, variant, settings.additions_solution, settings.vst2_category) -}} 51 | 52 | {% endfor -%} 53 | 54 | 55 | 56 | {% for variant in settings.variants %} 57 | 58 | -------------------------------------------------------------------------------- 59 | 60 | {{ render.vst3(settings.name, variant, settings.additions_solution) -}} 61 | 62 | {% endfor -%} 63 | -------------------------------------------------------------------------------- /Source/frut/jinja/render_templates.py: -------------------------------------------------------------------------------- 1 | #! /usr/bin/python3 2 | 3 | # ---------------------------------------------------------------------------- 4 | # 5 | # FrutJUCE 6 | # ======== 7 | # Common classes for use with the JUCE library 8 | # 9 | # Copyright (c) 2010-2020 Martin Zuther (http://www.mzuther.de/) 10 | # 11 | # This program is free software: you can redistribute it and/or modify 12 | # it under the terms of the GNU General Public License as published by 13 | # the Free Software Foundation, either version 3 of the License, or 14 | # (at your option) any later version. 15 | # 16 | # This program is distributed in the hope that it will be useful, 17 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 18 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 19 | # GNU General Public License for more details. 20 | # 21 | # You should have received a copy of the GNU General Public License 22 | # along with this program. If not, see . 23 | # 24 | # Thank you for using free software! 25 | # 26 | # ---------------------------------------------------------------------------- 27 | 28 | import os 29 | import jinja2 30 | 31 | script_path = os.path.dirname(os.path.abspath(__file__)) 32 | os.chdir(script_path) 33 | 34 | 35 | def cache_templates(searchpath): 36 | templateLoader = jinja2.FileSystemLoader(searchpath=searchpath) 37 | return jinja2.Environment(loader=templateLoader, trim_blocks=True) 38 | 39 | 40 | def render_template(templates, template_file, output_file): 41 | print('{:30s} --> {}'.format(template_file, output_file)) 42 | 43 | with open(output_file, 'w') as f: 44 | template = templates.get_template(template_file) 45 | output = template.render() 46 | 47 | f.write(output) 48 | 49 | 50 | if __name__ == '__main__': 51 | templates = cache_templates('.') 52 | 53 | render_template( 54 | templates, 55 | 'premake5.template', 56 | '../../../Builds/premake5.lua') 57 | 58 | render_template( 59 | templates, 60 | 'copy_vst.template', 61 | '../../../bin/copy_vst.bat') 62 | 63 | render_template( 64 | templates, 65 | 'finalise_binaries.template', 66 | '../../../bin/finalise_binaries.sh') 67 | 68 | render_template( 69 | templates, 70 | 'package_releases.template', 71 | '../../../bin/package_releases.sh') 72 | -------------------------------------------------------------------------------- /Source/frut/jinja/settings.template: -------------------------------------------------------------------------------- 1 | ../../../Builds/settings.template -------------------------------------------------------------------------------- /Source/frut/lint.sh: -------------------------------------------------------------------------------- 1 | #! /usr/bin/env bash 2 | 3 | project_home=$(pwd)/../.. 4 | 5 | 6 | function lint_file 7 | { 8 | filename="$1" 9 | dirname=$(dirname "$1") 10 | echo $filename 11 | 12 | cat $filename | /usr/bin/clang -x c++ - \ 13 | -include $project_home/Source/frut/FrutHeader.h \ 14 | -I $project_home/JuceLibraryCode \ 15 | -I $project_home/libraries \ 16 | -I $project_home/libraries/juce/modules \ 17 | -I $project_home/Source \ 18 | -I $project_home/Source/frut \ 19 | -I $project_home/Source/frut/amalgamated \ 20 | -I $dirname \ 21 | -fsyntax-only \ 22 | -fno-caret-diagnostics \ 23 | -std=c++14 \ 24 | -Wall 25 | 26 | /usr/bin/cppcheck \ 27 | --template=gcc \ 28 | --enable=style \ 29 | --include=$project_home/Source/frut/FrutHeader.h \ 30 | --inline-suppr \ 31 | --language=c++ \ 32 | --quiet \ 33 | $filename 34 | 35 | # find error-like codetags 36 | GREP_COLORS="mt=01;31" \ 37 | /bin/egrep \ 38 | --colour \ 39 | '\<(FIXME|BUG)\>' \ 40 | $filename 41 | 42 | # find warning-like codetags 43 | GREP_COLORS="mt=01;33" \ 44 | /bin/egrep \ 45 | --colour \ 46 | '\<(TODO|@todo)\>' \ 47 | $filename 48 | } 49 | 50 | 51 | echo 52 | 53 | find . \( -iname "*.cpp" -or -iname "*.h" \) -print | sort | while read filename 54 | do 55 | lint_file $filename \; 56 | done 57 | 58 | echo 59 | -------------------------------------------------------------------------------- /Source/frut/math/averager.cpp: -------------------------------------------------------------------------------- 1 | /* ---------------------------------------------------------------------------- 2 | 3 | FrutJUCE 4 | ======== 5 | Common classes for use with the JUCE library 6 | 7 | Copyright (c) 2010-2020 Martin Zuther (http://www.mzuther.de/) 8 | 9 | This program is free software: you can redistribute it and/or modify 10 | it under the terms of the GNU General Public License as published by 11 | the Free Software Foundation, either version 3 of the License, or 12 | (at your option) any later version. 13 | 14 | This program is distributed in the hope that it will be useful, 15 | but WITHOUT ANY WARRANTY; without even the implied warranty of 16 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 17 | GNU General Public License for more details. 18 | 19 | You should have received a copy of the GNU General Public License 20 | along with this program. If not, see . 21 | 22 | Thank you for using free software! 23 | 24 | ---------------------------------------------------------------------------- */ 25 | 26 | namespace frut 27 | { 28 | namespace math 29 | { 30 | 31 | Averager::Averager(int number_of_samples, float initial_value) 32 | { 33 | jassert(number_of_samples > 2); 34 | 35 | bIsValid = false; 36 | nNumberOfSamples = number_of_samples; 37 | fNumberOfSamples = float(nNumberOfSamples); 38 | nCurrentSample = 0; 39 | 40 | for (int n = 0; n < nNumberOfSamples; ++n) 41 | { 42 | fSamples.insert(n, initial_value); 43 | } 44 | 45 | fSum = initial_value * fNumberOfSamples; 46 | } 47 | 48 | 49 | void Averager::addSample(float newSample) 50 | { 51 | fSum -= fSamples[nCurrentSample]; 52 | fSamples.set(nCurrentSample, newSample); 53 | fSum += fSamples[nCurrentSample]; 54 | 55 | ++nCurrentSample; 56 | 57 | if (nCurrentSample >= nNumberOfSamples) 58 | { 59 | bIsValid = true; 60 | nCurrentSample = 0; 61 | } 62 | } 63 | 64 | 65 | bool Averager::isValid() 66 | { 67 | return bIsValid; 68 | } 69 | 70 | 71 | float Averager::getSimpleMovingAverage() 72 | { 73 | return fSum / fNumberOfSamples; 74 | } 75 | 76 | } 77 | } 78 | -------------------------------------------------------------------------------- /Source/frut/math/averager.h: -------------------------------------------------------------------------------- 1 | /* ---------------------------------------------------------------------------- 2 | 3 | FrutJUCE 4 | ======== 5 | Common classes for use with the JUCE library 6 | 7 | Copyright (c) 2010-2020 Martin Zuther (http://www.mzuther.de/) 8 | 9 | This program is free software: you can redistribute it and/or modify 10 | it under the terms of the GNU General Public License as published by 11 | the Free Software Foundation, either version 3 of the License, or 12 | (at your option) any later version. 13 | 14 | This program is distributed in the hope that it will be useful, 15 | but WITHOUT ANY WARRANTY; without even the implied warranty of 16 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 17 | GNU General Public License for more details. 18 | 19 | You should have received a copy of the GNU General Public License 20 | along with this program. If not, see . 21 | 22 | Thank you for using free software! 23 | 24 | ---------------------------------------------------------------------------- */ 25 | 26 | #ifndef FRUT_MATH_AVERAGER_H 27 | #define FRUT_MATH_AVERAGER_H 28 | 29 | namespace frut 30 | { 31 | namespace math 32 | { 33 | 34 | 35 | class Averager 36 | { 37 | public: 38 | Averager(int number_of_samples, float initial_value); 39 | 40 | void addSample(float newSample); 41 | bool isValid(); 42 | float getSimpleMovingAverage(); 43 | 44 | private: 45 | JUCE_LEAK_DETECTOR(Averager); 46 | 47 | bool bIsValid; 48 | int nNumberOfSamples; 49 | float fNumberOfSamples; 50 | int nCurrentSample; 51 | float fSum; 52 | 53 | Array fSamples; 54 | }; 55 | 56 | } 57 | } 58 | 59 | #endif // FRUT_MATH_AVERAGER_H 60 | -------------------------------------------------------------------------------- /Source/frut/parameters/par_boolean.h: -------------------------------------------------------------------------------- 1 | /* ---------------------------------------------------------------------------- 2 | 3 | FrutJUCE 4 | ======== 5 | Common classes for use with the JUCE library 6 | 7 | Copyright (c) 2010-2020 Martin Zuther (http://www.mzuther.de/) 8 | 9 | This program is free software: you can redistribute it and/or modify 10 | it under the terms of the GNU General Public License as published by 11 | the Free Software Foundation, either version 3 of the License, or 12 | (at your option) any later version. 13 | 14 | This program is distributed in the hope that it will be useful, 15 | but WITHOUT ANY WARRANTY; without even the implied warranty of 16 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 17 | GNU General Public License for more details. 18 | 19 | You should have received a copy of the GNU General Public License 20 | along with this program. If not, see . 21 | 22 | Thank you for using free software! 23 | 24 | ---------------------------------------------------------------------------- */ 25 | 26 | #ifndef FRUT_PARAMETER_PARBOOLEAN_H 27 | #define FRUT_PARAMETER_PARBOOLEAN_H 28 | 29 | namespace frut 30 | { 31 | namespace parameters 32 | { 33 | 34 | /// Plug-in parameter for storing a Boolean value. 35 | /// 36 | /// The methods of this class may be called on the audio thread, so 37 | /// they are absolutely time-critical! 38 | /// 39 | class ParBoolean : virtual public Parameter 40 | { 41 | public: 42 | ParBoolean(const String &state_true, const String &state_false); 43 | 44 | void toggleState(); 45 | 46 | virtual void setDefaultRealFloat(float newRealValue, bool updateParameter) override; 47 | void setDefaultBoolean(bool newValue, bool updateParameter); 48 | 49 | virtual void setFloat(float newValue) override; 50 | virtual void setRealFloat(float newRealValue) override; 51 | void setBoolean(bool newValue); 52 | 53 | virtual float getFloatFromText(const String &newValue) override; 54 | virtual const String getTextFromFloat(float newValue) override; 55 | 56 | private: 57 | JUCE_LEAK_DETECTOR(ParBoolean); 58 | 59 | String labelTrue; 60 | String labelFalse; 61 | }; 62 | 63 | } 64 | } 65 | 66 | #endif // FRUT_PARAMETER_PARBOOLEAN_H 67 | -------------------------------------------------------------------------------- /Source/frut/parameters/par_continuous.h: -------------------------------------------------------------------------------- 1 | /* ---------------------------------------------------------------------------- 2 | 3 | FrutJUCE 4 | ======== 5 | Common classes for use with the JUCE library 6 | 7 | Copyright (c) 2010-2020 Martin Zuther (http://www.mzuther.de/) 8 | 9 | This program is free software: you can redistribute it and/or modify 10 | it under the terms of the GNU General Public License as published by 11 | the Free Software Foundation, either version 3 of the License, or 12 | (at your option) any later version. 13 | 14 | This program is distributed in the hope that it will be useful, 15 | but WITHOUT ANY WARRANTY; without even the implied warranty of 16 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 17 | GNU General Public License for more details. 18 | 19 | You should have received a copy of the GNU General Public License 20 | along with this program. If not, see . 21 | 22 | Thank you for using free software! 23 | 24 | ---------------------------------------------------------------------------- */ 25 | 26 | #ifndef FRUT_PARAMETER_PARCONTINUOUS_H 27 | #define FRUT_PARAMETER_PARCONTINUOUS_H 28 | 29 | namespace frut 30 | { 31 | namespace parameters 32 | { 33 | 34 | /// Plug-in parameter for storing a floating-point value (continuous 35 | /// values with a given number of decimal places). 36 | /// 37 | /// The methods of this class may be called on the audio thread, so 38 | /// they are absolutely time-critical! 39 | /// 40 | class ParContinuous : virtual public Parameter 41 | { 42 | public: 43 | ParContinuous(float real_minimum, float real_maximum, float real_step_size, float scaling_factor, int decimal_places); 44 | 45 | int getNumberOfSteps(); 46 | float getStepSize(); 47 | 48 | virtual void setDefaultRealFloat(float newRealValue, bool updateParameter) override; 49 | 50 | virtual void setFloat(float newValue) override; 51 | virtual void setRealFloat(float newRealValue) override; 52 | 53 | void setSuffix(const String &newSuffix); 54 | 55 | virtual float getFloatFromText(const String &newValue) override; 56 | virtual const String getTextFromFloat(float newValue) override; 57 | 58 | private: 59 | JUCE_LEAK_DETECTOR(ParContinuous); 60 | 61 | float toRealFloat(float newValue); 62 | float toInternalFloat(float newRealValue); 63 | 64 | float realMinimum; 65 | float realMaximum; 66 | float realRange; 67 | 68 | int numberOfSteps; 69 | int decimalPlaces; 70 | bool adaptDecimalPlaces; 71 | String valueSuffix; 72 | 73 | bool isNonlinear; 74 | bool isBipolar; 75 | float scalingFactor; 76 | float scalingConstantFactor; 77 | }; 78 | 79 | } 80 | } 81 | 82 | #endif // FRUT_PARAMETER_PARCONTINUOUS_H 83 | -------------------------------------------------------------------------------- /Source/frut/parameters/par_string.h: -------------------------------------------------------------------------------- 1 | /* ---------------------------------------------------------------------------- 2 | 3 | FrutJUCE 4 | ======== 5 | Common classes for use with the JUCE library 6 | 7 | Copyright (c) 2010-2020 Martin Zuther (http://www.mzuther.de/) 8 | 9 | This program is free software: you can redistribute it and/or modify 10 | it under the terms of the GNU General Public License as published by 11 | the Free Software Foundation, either version 3 of the License, or 12 | (at your option) any later version. 13 | 14 | This program is distributed in the hope that it will be useful, 15 | but WITHOUT ANY WARRANTY; without even the implied warranty of 16 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 17 | GNU General Public License for more details. 18 | 19 | You should have received a copy of the GNU General Public License 20 | along with this program. If not, see . 21 | 22 | Thank you for using free software! 23 | 24 | ---------------------------------------------------------------------------- */ 25 | 26 | #ifndef FRUT_PARAMETER_PARSTRING_H 27 | #define FRUT_PARAMETER_PARSTRING_H 28 | 29 | namespace frut 30 | { 31 | namespace parameters 32 | { 33 | 34 | /// Plug-in parameter for storing a String value. 35 | /// 36 | /// The methods of this class may be called on the audio thread, so 37 | /// they are absolutely time-critical! 38 | /// 39 | class ParString : virtual public Parameter 40 | { 41 | public: 42 | explicit ParString(const String &newValue); 43 | 44 | virtual void setDefaultRealFloat(float newRealValue, bool updateParameter) override; 45 | virtual void setFloat(float newValue) override; 46 | virtual void setRealFloat(float newRealValue) override; 47 | 48 | virtual const String getText() override; 49 | virtual void setText(const String &newValue) override; 50 | 51 | virtual float getFloatFromText(const String &newValue) override; 52 | virtual const String getTextFromFloat(float newValue) override; 53 | 54 | virtual void loadFromXml(XmlElement *xmlDocument) override; 55 | virtual void storeAsXml(XmlElement *xmlDocument) override; 56 | 57 | private: 58 | JUCE_LEAK_DETECTOR(ParString); 59 | 60 | String textValue; 61 | }; 62 | 63 | } 64 | } 65 | 66 | #endif // FRUT_PARAMETER_PARSTRING_H 67 | -------------------------------------------------------------------------------- /Source/frut/parameters/par_switch.h: -------------------------------------------------------------------------------- 1 | /* ---------------------------------------------------------------------------- 2 | 3 | FrutJUCE 4 | ======== 5 | Common classes for use with the JUCE library 6 | 7 | Copyright (c) 2010-2020 Martin Zuther (http://www.mzuther.de/) 8 | 9 | This program is free software: you can redistribute it and/or modify 10 | it under the terms of the GNU General Public License as published by 11 | the Free Software Foundation, either version 3 of the License, or 12 | (at your option) any later version. 13 | 14 | This program is distributed in the hope that it will be useful, 15 | but WITHOUT ANY WARRANTY; without even the implied warranty of 16 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 17 | GNU General Public License for more details. 18 | 19 | You should have received a copy of the GNU General Public License 20 | along with this program. If not, see . 21 | 22 | Thank you for using free software! 23 | 24 | ---------------------------------------------------------------------------- */ 25 | 26 | #ifndef FRUT_PARAMETER_PARSWITCH_H 27 | #define FRUT_PARAMETER_PARSWITCH_H 28 | 29 | namespace frut 30 | { 31 | namespace parameters 32 | { 33 | 34 | /// Plug-in parameter for storing a floating-point value (filled with 35 | /// arbitrary preset values). 36 | /// 37 | /// The methods of this class may be called on the audio thread, so 38 | /// they are absolutely time-critical! 39 | /// 40 | class ParSwitch : virtual public Parameter 41 | { 42 | public: 43 | ParSwitch(); 44 | 45 | void addPreset(const float newRealValue, const String &newLabel); 46 | int getNumberOfSteps(); 47 | float getStepSize(); 48 | 49 | float toRealFloat(float newValue); 50 | float toInternalFloat(float newRealValue); 51 | 52 | virtual void setDefaultRealFloat(float newRealValue, bool updateParameter) override; 53 | 54 | virtual void setFloat(float newValue) override; 55 | virtual void setRealFloat(float newRealValue) override; 56 | 57 | virtual float getFloatFromText(const String &newValue) override; 58 | virtual const String getTextFromFloat(float newValue) override; 59 | 60 | private: 61 | JUCE_LEAK_DETECTOR(ParSwitch); 62 | 63 | Array arrRealValues; 64 | StringArray arrLabels; 65 | 66 | float stepSize; 67 | }; 68 | 69 | } 70 | } 71 | 72 | #endif // FRUT_PARAMETER_PARSWITCH_H 73 | -------------------------------------------------------------------------------- /Source/frut/skin/look_and_feel_v3.h: -------------------------------------------------------------------------------- 1 | /* ---------------------------------------------------------------------------- 2 | 3 | FrutJUCE 4 | ======== 5 | Common classes for use with the JUCE library 6 | 7 | Copyright (c) 2010-2020 Martin Zuther (http://www.mzuther.de/) 8 | 9 | This program is free software: you can redistribute it and/or modify 10 | it under the terms of the GNU General Public License as published by 11 | the Free Software Foundation, either version 3 of the License, or 12 | (at your option) any later version. 13 | 14 | This program is distributed in the hope that it will be useful, 15 | but WITHOUT ANY WARRANTY; without even the implied warranty of 16 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 17 | GNU General Public License for more details. 18 | 19 | You should have received a copy of the GNU General Public License 20 | along with this program. If not, see . 21 | 22 | Thank you for using free software! 23 | 24 | ---------------------------------------------------------------------------- */ 25 | 26 | #ifndef FRUT_SKIN_LOOK_AND_FEEL_V3_H 27 | #define FRUT_SKIN_LOOK_AND_FEEL_V3_H 28 | 29 | namespace frut 30 | { 31 | namespace skin 32 | { 33 | 34 | class LookAndFeel_Frut_V3 : 35 | public LookAndFeel_V3 36 | { 37 | public: 38 | LookAndFeel_Frut_V3() {}; 39 | ~LookAndFeel_Frut_V3() {}; 40 | 41 | void drawRotarySlider(Graphics &g, int x, int y, int width, int height, 42 | float sliderPosProportional, float rotaryStartAngle, 43 | float rotaryEndAngle, Slider &) override; 44 | 45 | JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(LookAndFeel_Frut_V3) 46 | }; 47 | 48 | } 49 | } 50 | 51 | #endif // FRUT_SKIN_LOOK_AND_FEEL_V3_H 52 | -------------------------------------------------------------------------------- /Source/frut/widgets/channel_slider.h: -------------------------------------------------------------------------------- 1 | /* ---------------------------------------------------------------------------- 2 | 3 | FrutJUCE 4 | ======== 5 | Common classes for use with the JUCE library 6 | 7 | Copyright (c) 2010-2020 Martin Zuther (http://www.mzuther.de/) 8 | 9 | This program is free software: you can redistribute it and/or modify 10 | it under the terms of the GNU General Public License as published by 11 | the Free Software Foundation, either version 3 of the License, or 12 | (at your option) any later version. 13 | 14 | This program is distributed in the hope that it will be useful, 15 | but WITHOUT ANY WARRANTY; without even the implied warranty of 16 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 17 | GNU General Public License for more details. 18 | 19 | You should have received a copy of the GNU General Public License 20 | along with this program. If not, see . 21 | 22 | Thank you for using free software! 23 | 24 | ---------------------------------------------------------------------------- */ 25 | 26 | #ifndef FRUT_WIDGETS_CHANNEL_SLIDER_H 27 | #define FRUT_WIDGETS_CHANNEL_SLIDER_H 28 | 29 | namespace frut 30 | { 31 | namespace widgets 32 | { 33 | 34 | /// Slider component for selecting an audio channel. This component 35 | /// can either select a distinct channel or all channels at once. 36 | /// 37 | class ChannelSlider : 38 | public Slider 39 | { 40 | public: 41 | ChannelSlider(); 42 | 43 | int getNumberOfChannels(); 44 | void setNumberOfChannels(int numberOfChannels); 45 | 46 | double getDouble(); 47 | float getFloat(); 48 | 49 | virtual double getValueFromText(const String &inputString); 50 | virtual String getTextFromValue(double inputValue); 51 | 52 | protected: 53 | int numberOfChannels_; 54 | 55 | private: 56 | JUCE_LEAK_DETECTOR(ChannelSlider); 57 | }; 58 | 59 | } 60 | } 61 | 62 | #endif // FRUT_WIDGETS_CHANNEL_SLIDER_H 63 | -------------------------------------------------------------------------------- /Source/frut/widgets/meter_segment.cpp: -------------------------------------------------------------------------------- 1 | /* ---------------------------------------------------------------------------- 2 | 3 | FrutJUCE 4 | ======== 5 | Common classes for use with the JUCE library 6 | 7 | Copyright (c) 2010-2020 Martin Zuther (http://www.mzuther.de/) 8 | 9 | This program is free software: you can redistribute it and/or modify 10 | it under the terms of the GNU General Public License as published by 11 | the Free Software Foundation, either version 3 of the License, or 12 | (at your option) any later version. 13 | 14 | This program is distributed in the hope that it will be useful, 15 | but WITHOUT ANY WARRANTY; without even the implied warranty of 16 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 17 | GNU General Public License for more details. 18 | 19 | You should have received a copy of the GNU General Public License 20 | along with this program. If not, see . 21 | 22 | Thank you for using free software! 23 | 24 | ---------------------------------------------------------------------------- */ 25 | 26 | namespace frut 27 | { 28 | namespace widgets 29 | { 30 | 31 | /// Create a new base meter segment. 32 | /// 33 | MeterSegment::MeterSegment() 34 | { 35 | // set initial orientation 36 | setOrientation(widgets::Orientation::vertical); 37 | } 38 | 39 | 40 | /// Destructor. 41 | MeterSegment::~MeterSegment() 42 | { 43 | } 44 | 45 | 46 | /// Get the segment's orientation. 47 | /// 48 | /// @return current orientation 49 | /// 50 | widgets::Orientation MeterSegment::getOrientation() 51 | { 52 | return orientation_; 53 | } 54 | 55 | 56 | /// Set the segment's orientation. 57 | /// 58 | /// @param orientation new orientation 59 | /// 60 | void MeterSegment::setOrientation( 61 | widgets::Orientation orientation) 62 | 63 | { 64 | // update segment's orientation 65 | orientation_ = orientation; 66 | 67 | // redraw meter segment 68 | repaint(); 69 | } 70 | 71 | 72 | /// Set normal (average) levels. *Use this only if you completely 73 | /// disregard discrete (peak) levels!* 74 | /// 75 | /// @param normalLevel new normal level 76 | /// 77 | /// @param normalLevelPeak new normal peak level 78 | /// 79 | void MeterSegment::setNormalLevels( 80 | float normalLevel, float normalLevelPeak) 81 | 82 | { 83 | // lowest level of a 24-bit-signal in decibels 84 | float initialLevel = -144.0f; 85 | 86 | setLevels(normalLevel, normalLevelPeak, initialLevel, initialLevel); 87 | } 88 | 89 | 90 | /// Set discrete (peak) levels. *Use this only if you completely 91 | /// disregard normal (average) levels!* 92 | /// 93 | /// @param discreteLevel new discrete level 94 | /// 95 | /// @param discreteLevelPeak new discrete peak level 96 | /// 97 | void MeterSegment::setDiscreteLevels( 98 | float discreteLevel, float discreteLevelPeak) 99 | 100 | { 101 | // lowest level of a 24-bit-signal in decibels 102 | float initialLevel = -144.0f; 103 | 104 | setLevels(initialLevel, initialLevel, discreteLevel, discreteLevelPeak); 105 | } 106 | 107 | } 108 | } 109 | -------------------------------------------------------------------------------- /Source/frut/widgets/meter_segment.h: -------------------------------------------------------------------------------- 1 | /* ---------------------------------------------------------------------------- 2 | 3 | FrutJUCE 4 | ======== 5 | Common classes for use with the JUCE library 6 | 7 | Copyright (c) 2010-2020 Martin Zuther (http://www.mzuther.de/) 8 | 9 | This program is free software: you can redistribute it and/or modify 10 | it under the terms of the GNU General Public License as published by 11 | the Free Software Foundation, either version 3 of the License, or 12 | (at your option) any later version. 13 | 14 | This program is distributed in the hope that it will be useful, 15 | but WITHOUT ANY WARRANTY; without even the implied warranty of 16 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 17 | GNU General Public License for more details. 18 | 19 | You should have received a copy of the GNU General Public License 20 | along with this program. If not, see . 21 | 22 | Thank you for using free software! 23 | 24 | ---------------------------------------------------------------------------- */ 25 | 26 | #ifndef FRUT_WIDGETS_METER_SEGMENT_H 27 | #define FRUT_WIDGETS_METER_SEGMENT_H 28 | 29 | namespace frut 30 | { 31 | namespace widgets 32 | { 33 | 34 | /// Base class for meter segment components. 35 | /// 36 | /// @see MeterBar 37 | /// 38 | class MeterSegment : 39 | public Component 40 | { 41 | public: 42 | MeterSegment(); 43 | virtual ~MeterSegment(); 44 | 45 | virtual void setNormalLevels(float normalLevel, 46 | float normalLevelPeak); 47 | 48 | virtual void setDiscreteLevels(float discreteLevel, 49 | float discreteLevelPeak); 50 | 51 | /// Set discrete (peak) and normal (average) levels. 52 | /// 53 | /// @param normalLevel new normal level 54 | /// 55 | /// @param normalLevelPeak new normal peak level 56 | /// 57 | /// @param discreteLevel new discrete level 58 | /// 59 | /// @param discreteLevelPeak new discrete peak level 60 | /// 61 | virtual void setLevels(float normalLevel, 62 | float normalLevelPeak, 63 | float discreteLevel, 64 | float discreteLevelPeak) = 0 ; 65 | 66 | virtual widgets::Orientation getOrientation(); 67 | virtual void setOrientation(widgets::Orientation orientation); 68 | 69 | protected: 70 | widgets::Orientation orientation_; 71 | 72 | }; 73 | 74 | } 75 | } 76 | 77 | #endif // FRUT_WIDGETS_METER_SEGMENT_H 78 | -------------------------------------------------------------------------------- /Source/frut/widgets/meter_segment_discrete.h: -------------------------------------------------------------------------------- 1 | /* ---------------------------------------------------------------------------- 2 | 3 | FrutJUCE 4 | ======== 5 | Common classes for use with the JUCE library 6 | 7 | Copyright (c) 2010-2020 Martin Zuther (http://www.mzuther.de/) 8 | 9 | This program is free software: you can redistribute it and/or modify 10 | it under the terms of the GNU General Public License as published by 11 | the Free Software Foundation, either version 3 of the License, or 12 | (at your option) any later version. 13 | 14 | This program is distributed in the hope that it will be useful, 15 | but WITHOUT ANY WARRANTY; without even the implied warranty of 16 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 17 | GNU General Public License for more details. 18 | 19 | You should have received a copy of the GNU General Public License 20 | along with this program. If not, see . 21 | 22 | Thank you for using free software! 23 | 24 | ---------------------------------------------------------------------------- */ 25 | 26 | #ifndef FRUT_WIDGETS_METER_SEGMENT_DISCRETE_H 27 | #define FRUT_WIDGETS_METER_SEGMENT_DISCRETE_H 28 | 29 | namespace frut 30 | { 31 | namespace widgets 32 | { 33 | 34 | /// Discrete meter segment component. This widget consists of a 35 | /// coloured filled rectangle (meter segment) surrounded by a small 36 | /// coloured rectangle (peak marker). Both rectangles react to level 37 | /// changes with a change in colour or visibility. 38 | /// 39 | /// @see MeterBar 40 | /// 41 | class MeterSegmentDiscrete : 42 | public MeterSegment 43 | { 44 | public: 45 | explicit MeterSegmentDiscrete(float retainSignalFactor, 46 | float newSignalFactor); 47 | 48 | 49 | virtual float setThresholdAndRange(float lowerThreshold, 50 | float thresholdRange, 51 | bool isTopmost); 52 | 53 | virtual void setColours(const Colour &segmentColour, 54 | const Colour &peakMarkerColour); 55 | 56 | virtual void setLevels(float normalLevel, 57 | float normalLevelPeak, 58 | float discreteLevel, 59 | float discreteLevelPeak); 60 | 61 | virtual void paint(Graphics &g); 62 | virtual void visibilityChanged(); 63 | 64 | protected: 65 | float lowerThreshold_; 66 | float upperThreshold_; 67 | float thresholdRange_; 68 | 69 | Colour segmentColour_; 70 | Colour peakMarkerColour_; 71 | Colour attenuatedColour_; 72 | 73 | float brightness_; 74 | float retainSignalFactor_; 75 | float newSignalFactor_; 76 | 77 | bool displayPeakMarker_; 78 | bool isTopmost_; 79 | 80 | private: 81 | JUCE_LEAK_DETECTOR(MeterSegmentDiscrete); 82 | }; 83 | 84 | } 85 | } 86 | 87 | #endif // FRUT_WIDGETS_METER_SEGMENT_DISCRETE_H 88 | -------------------------------------------------------------------------------- /Source/frut/widgets/needle_meter.h: -------------------------------------------------------------------------------- 1 | /* ---------------------------------------------------------------------------- 2 | 3 | FrutJUCE 4 | ======== 5 | Common classes for use with the JUCE library 6 | 7 | Copyright (c) 2010-2020 Martin Zuther (http://www.mzuther.de/) 8 | 9 | This program is free software: you can redistribute it and/or modify 10 | it under the terms of the GNU General Public License as published by 11 | the Free Software Foundation, either version 3 of the License, or 12 | (at your option) any later version. 13 | 14 | This program is distributed in the hope that it will be useful, 15 | but WITHOUT ANY WARRANTY; without even the implied warranty of 16 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 17 | GNU General Public License for more details. 18 | 19 | You should have received a copy of the GNU General Public License 20 | along with this program. If not, see . 21 | 22 | Thank you for using free software! 23 | 24 | ---------------------------------------------------------------------------- */ 25 | 26 | #ifndef FRUT_WIDGETS_NEEDLE_METER_H 27 | #define FRUT_WIDGETS_NEEDLE_METER_H 28 | 29 | namespace frut 30 | { 31 | namespace widgets 32 | { 33 | 34 | /// Meter component with a needle that moves according to the input. 35 | /// 36 | class NeedleMeter : 37 | public Component 38 | { 39 | public: 40 | NeedleMeter(); 41 | 42 | void setImages(const Image &imageBackground, 43 | const Image &imageNeedle, 44 | int needleSpacingLeft, 45 | int needleSpacingTop); 46 | 47 | void setValue(float value); 48 | 49 | virtual void paint(Graphics &g); 50 | virtual void resized(); 51 | 52 | protected: 53 | int needlePosition_; 54 | int needleTravelPath_; 55 | bool isVerticalMeter_; 56 | 57 | int needleSpacingLeft_; 58 | int needleSpacingTop_; 59 | 60 | Image imageBackground_; 61 | Image imageNeedle_; 62 | 63 | private: 64 | JUCE_LEAK_DETECTOR(NeedleMeter); 65 | }; 66 | 67 | } 68 | } 69 | 70 | #endif // FRUT_WIDGETS_NEEDLE_METER_H 71 | -------------------------------------------------------------------------------- /Source/frut/widgets/orientation.h: -------------------------------------------------------------------------------- 1 | /* ---------------------------------------------------------------------------- 2 | 3 | FrutJUCE 4 | ======== 5 | Common classes for use with the JUCE library 6 | 7 | Copyright (c) 2010-2020 Martin Zuther (http://www.mzuther.de/) 8 | 9 | This program is free software: you can redistribute it and/or modify 10 | it under the terms of the GNU General Public License as published by 11 | the Free Software Foundation, either version 3 of the License, or 12 | (at your option) any later version. 13 | 14 | This program is distributed in the hope that it will be useful, 15 | but WITHOUT ANY WARRANTY; without even the implied warranty of 16 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 17 | GNU General Public License for more details. 18 | 19 | You should have received a copy of the GNU General Public License 20 | along with this program. If not, see . 21 | 22 | Thank you for using free software! 23 | 24 | ---------------------------------------------------------------------------- */ 25 | 26 | #ifndef FRUT_WIDGETS_ORIENTATION_H 27 | #define FRUT_WIDGETS_ORIENTATION_H 28 | 29 | namespace frut 30 | { 31 | namespace widgets 32 | { 33 | 34 | /// Orientation for widgets. 35 | /// 36 | enum Orientation 37 | { 38 | /// horizontal widget (bottom to top) 39 | horizontal = 0, 40 | 41 | /// inverted horizontal widget (top to bottom) 42 | horizontalInverted, 43 | 44 | /// vertical widget (left to right) 45 | vertical, 46 | 47 | /// inverted vertical widget (right to left) 48 | verticalInverted 49 | }; 50 | 51 | } 52 | } 53 | 54 | #endif // FRUT_WIDGETS_ORIENTATION_H 55 | -------------------------------------------------------------------------------- /Source/frut/widgets/resources/COPYRIGHT: -------------------------------------------------------------------------------- 1 | * button_gpl_down.svg 2 | * button_gpl_normal.svg 3 | 4 | Obtained September 2014 from http://www.gnu.org/graphics/gpl-v3-logo.svg 5 | with permission: 6 | 7 | If you are releasing work under version 3 of the GNU GPL, LGPL, or 8 | AGPL, feel free to use these buttons on your site or in your 9 | application to advertise the license. These logos are immediately 10 | recognizable, and will assure your users that their freedom is being 11 | protected. 12 | 13 | (http://www.gnu.org/graphics/license-logos.html) 14 | 15 | Changed to match application colour and indicate mouse hovering and 16 | button clicks. 17 | -------------------------------------------------------------------------------- /Source/frut/widgets/resources/convert_resources.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # ---------------------------------------------------------------------------- 4 | # 5 | # FrutJUCE 6 | # ======== 7 | # Common classes for use with the JUCE library 8 | # 9 | # Copyright (c) 2010-2020 Martin Zuther (http://www.mzuther.de/) 10 | # 11 | # This program is free software: you can redistribute it and/or modify 12 | # it under the terms of the GNU General Public License as published by 13 | # the Free Software Foundation, either version 3 of the License, or 14 | # (at your option) any later version. 15 | # 16 | # This program is distributed in the hope that it will be useful, 17 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 18 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 19 | # GNU General Public License for more details. 20 | # 21 | # You should have received a copy of the GNU General Public License 22 | # along with this program. If not, see . 23 | # 24 | # Thank you for using free software! 25 | # 26 | # ---------------------------------------------------------------------------- 27 | 28 | BINARY_BUILDER_DIR=../../../../libraries/juce/extras/binarybuilder/Builds/LinuxMakefile/build 29 | OUTPUT_DIR=. 30 | 31 | if [ ! -x "$BINARY_BUILDER_DIR/BinaryBuilder" ]; then 32 | echo 33 | echo "BinaryBuilder not found in $BINARY_BUILDER_DIR" 34 | echo 35 | exit 1 36 | fi 37 | 38 | cd $(dirname $0) 39 | "$BINARY_BUILDER_DIR/BinaryBuilder" output "$OUTPUT_DIR" resources '*.png' 40 | 41 | echo 42 | echo -------------------------------------------------------------------------------- 43 | echo 44 | 45 | cat "$OUTPUT_DIR/resources.h" 46 | 47 | echo 48 | echo -------------------------------------------------------------------------------- 49 | echo 50 | -------------------------------------------------------------------------------- /Source/frut/widgets/resources/output/button_gpl_down.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mzuther/Squeezer/632f2bb96c2e5135d28573b8697ccedbc06aa16c/Source/frut/widgets/resources/output/button_gpl_down.png -------------------------------------------------------------------------------- /Source/frut/widgets/resources/output/button_gpl_normal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mzuther/Squeezer/632f2bb96c2e5135d28573b8697ccedbc06aa16c/Source/frut/widgets/resources/output/button_gpl_normal.png -------------------------------------------------------------------------------- /Source/frut/widgets/resources/resources.h: -------------------------------------------------------------------------------- 1 | /* (Auto-generated binary data file). */ 2 | 3 | #ifndef FRUT_WIDGETS_RESOURCES_H 4 | #define FRUT_WIDGETS_RESOURCES_H 5 | 6 | namespace resources 7 | { 8 | extern const char* button_gpl_normal_png; 9 | const int button_gpl_normal_pngSize = 2521; 10 | 11 | extern const char* button_gpl_down_png; 12 | const int button_gpl_down_pngSize = 2715; 13 | 14 | } 15 | 16 | #endif // FRUT_WIDGETS_RESOURCES_H 17 | -------------------------------------------------------------------------------- /Source/frut/widgets/signal_led.h: -------------------------------------------------------------------------------- 1 | /* ---------------------------------------------------------------------------- 2 | 3 | FrutJUCE 4 | ======== 5 | Common classes for use with the JUCE library 6 | 7 | Copyright (c) 2010-2020 Martin Zuther (http://www.mzuther.de/) 8 | 9 | This program is free software: you can redistribute it and/or modify 10 | it under the terms of the GNU General Public License as published by 11 | the Free Software Foundation, either version 3 of the License, or 12 | (at your option) any later version. 13 | 14 | This program is distributed in the hope that it will be useful, 15 | but WITHOUT ANY WARRANTY; without even the implied warranty of 16 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 17 | GNU General Public License for more details. 18 | 19 | You should have received a copy of the GNU General Public License 20 | along with this program. If not, see . 21 | 22 | Thank you for using free software! 23 | 24 | ---------------------------------------------------------------------------- */ 25 | 26 | #ifndef FRUT_WIDGETS_SIGNAL_LED_H 27 | #define FRUT_WIDGETS_SIGNAL_LED_H 28 | 29 | namespace frut 30 | { 31 | namespace widgets 32 | { 33 | 34 | /// Signal LED component. This widget loads three images of the same 35 | /// size which will be displayed according to the meter's level. 36 | /// 37 | /// | %Level | %Display | 38 | /// | :--------: | ----------------------------------- | 39 | /// | <= 0.0 | *imageOff* | 40 | /// | in between | blend of *imageLow* and *imageHigh* | 41 | /// | >= 1.0 | *imageHigh* | 42 | /// 43 | class SignalLed : 44 | public Component 45 | { 46 | public: 47 | SignalLed(); 48 | 49 | virtual void paint(Graphics &g); 50 | 51 | void setLevel(float level); 52 | void setImages(const Image &imageOff, 53 | const Image &imageLow, 54 | const Image &imageHigh); 55 | 56 | protected: 57 | float level_; 58 | 59 | Image imageOff_; 60 | Image imageLow_; 61 | Image imageHigh_; 62 | 63 | private: 64 | JUCE_LEAK_DETECTOR(SignalLed); 65 | }; 66 | 67 | } 68 | } 69 | 70 | #endif // FRUT_WIDGETS_SIGNAL_LED_H 71 | -------------------------------------------------------------------------------- /Source/frut/widgets/slider.h: -------------------------------------------------------------------------------- 1 | /* ---------------------------------------------------------------------------- 2 | 3 | FrutJUCE 4 | ======== 5 | Common classes for use with the JUCE library 6 | 7 | Copyright (c) 2010-2020 Martin Zuther (http://www.mzuther.de/) 8 | 9 | This program is free software: you can redistribute it and/or modify 10 | it under the terms of the GNU General Public License as published by 11 | the Free Software Foundation, either version 3 of the License, or 12 | (at your option) any later version. 13 | 14 | This program is distributed in the hope that it will be useful, 15 | but WITHOUT ANY WARRANTY; without even the implied warranty of 16 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 17 | GNU General Public License for more details. 18 | 19 | You should have received a copy of the GNU General Public License 20 | along with this program. If not, see . 21 | 22 | Thank you for using free software! 23 | 24 | ---------------------------------------------------------------------------- */ 25 | 26 | #ifndef FRUT_WIDGETS_SLIDER_H 27 | #define FRUT_WIDGETS_SLIDER_H 28 | 29 | namespace frut 30 | { 31 | namespace widgets 32 | { 33 | 34 | class FrutSlider : 35 | public Slider 36 | { 37 | public: 38 | virtual void setSliderColour(const Colour &colour) = 0; 39 | }; 40 | 41 | } 42 | } 43 | 44 | #endif // FRUT_WIDGETS_SLIDER_H 45 | -------------------------------------------------------------------------------- /Source/frut/widgets/slider_combined.h: -------------------------------------------------------------------------------- 1 | /* ---------------------------------------------------------------------------- 2 | 3 | FrutJUCE 4 | ======== 5 | Common classes for use with the JUCE library 6 | 7 | Copyright (c) 2010-2020 Martin Zuther (http://www.mzuther.de/) 8 | 9 | This program is free software: you can redistribute it and/or modify 10 | it under the terms of the GNU General Public License as published by 11 | the Free Software Foundation, either version 3 of the License, or 12 | (at your option) any later version. 13 | 14 | This program is distributed in the hope that it will be useful, 15 | but WITHOUT ANY WARRANTY; without even the implied warranty of 16 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 17 | GNU General Public License for more details. 18 | 19 | You should have received a copy of the GNU General Public License 20 | along with this program. If not, see . 21 | 22 | Thank you for using free software! 23 | 24 | ---------------------------------------------------------------------------- */ 25 | 26 | #ifndef FRUT_WIDGETS_SLIDER_COMBINED_H 27 | #define FRUT_WIDGETS_SLIDER_COMBINED_H 28 | 29 | namespace frut 30 | { 31 | namespace widgets 32 | { 33 | 34 | class SliderCombined : 35 | virtual public FrutSlider 36 | { 37 | public: 38 | SliderCombined(parameters::Juggler *pParameters, int nParameterIndex, int nParameterIndexSwitch); 39 | 40 | void visibilityChanged(); 41 | void resized(); 42 | 43 | virtual void setSliderColour(const Colour &colour); 44 | void setToggleSwitchColour(const Colour &colour); 45 | 46 | void addButtonListener(Button::Listener *newListener); 47 | void removeListener(Button::Listener *listener); 48 | 49 | void updateMode(); 50 | 51 | float getRealFloat(); 52 | bool getBoolean(); 53 | int getRealInteger(); 54 | 55 | double getValueFromText(const String &strText); 56 | String getTextFromValue(double dValue); 57 | private: 58 | JUCE_LEAK_DETECTOR(SliderCombined); 59 | 60 | std::unique_ptr toggleButton; 61 | Colour colourRotary; 62 | Colour colourToggleSwitch; 63 | 64 | parameters::ParCombined *pCombined; 65 | parameters::ParBoolean *pModeSwitch; 66 | }; 67 | 68 | } 69 | } 70 | 71 | #endif // FRUT_WIDGETS_SLIDER_COMBINED_H 72 | -------------------------------------------------------------------------------- /Source/frut/widgets/slider_continuous.h: -------------------------------------------------------------------------------- 1 | /* ---------------------------------------------------------------------------- 2 | 3 | FrutJUCE 4 | ======== 5 | Common classes for use with the JUCE library 6 | 7 | Copyright (c) 2010-2020 Martin Zuther (http://www.mzuther.de/) 8 | 9 | This program is free software: you can redistribute it and/or modify 10 | it under the terms of the GNU General Public License as published by 11 | the Free Software Foundation, either version 3 of the License, or 12 | (at your option) any later version. 13 | 14 | This program is distributed in the hope that it will be useful, 15 | but WITHOUT ANY WARRANTY; without even the implied warranty of 16 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 17 | GNU General Public License for more details. 18 | 19 | You should have received a copy of the GNU General Public License 20 | along with this program. If not, see . 21 | 22 | Thank you for using free software! 23 | 24 | ---------------------------------------------------------------------------- */ 25 | 26 | #ifndef FRUT_WIDGETS_SLIDER_CONTINUOUS_H 27 | #define FRUT_WIDGETS_SLIDER_CONTINUOUS_H 28 | 29 | namespace frut 30 | { 31 | namespace widgets 32 | { 33 | 34 | class SliderContinuous : 35 | virtual public FrutSlider 36 | { 37 | public: 38 | SliderContinuous(parameters::Juggler *pParameters, int parameterIndex); 39 | 40 | virtual void visibilityChanged(); 41 | virtual void resized(); 42 | virtual void setSliderColour(const Colour &colour); 43 | 44 | float getRealFloat(); 45 | bool getBoolean(); 46 | int getRealInteger(); 47 | 48 | virtual double getValueFromText(const String &strText); 49 | virtual String getTextFromValue(double dValue); 50 | 51 | protected: 52 | Colour colourRotary_; 53 | parameters::ParContinuous *parameter_; 54 | 55 | private: 56 | JUCE_LEAK_DETECTOR(SliderContinuous); 57 | }; 58 | 59 | } 60 | } 61 | 62 | #endif // FRUT_WIDGETS_SLIDER_CONTINUOUS_H 63 | -------------------------------------------------------------------------------- /Source/frut/widgets/slider_switch.cpp: -------------------------------------------------------------------------------- 1 | /* ---------------------------------------------------------------------------- 2 | 3 | FrutJUCE 4 | ======== 5 | Common classes for use with the JUCE library 6 | 7 | Copyright (c) 2010-2020 Martin Zuther (http://www.mzuther.de/) 8 | 9 | This program is free software: you can redistribute it and/or modify 10 | it under the terms of the GNU General Public License as published by 11 | the Free Software Foundation, either version 3 of the License, or 12 | (at your option) any later version. 13 | 14 | This program is distributed in the hope that it will be useful, 15 | but WITHOUT ANY WARRANTY; without even the implied warranty of 16 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 17 | GNU General Public License for more details. 18 | 19 | You should have received a copy of the GNU General Public License 20 | along with this program. If not, see . 21 | 22 | Thank you for using free software! 23 | 24 | ---------------------------------------------------------------------------- */ 25 | 26 | namespace frut 27 | { 28 | namespace widgets 29 | { 30 | 31 | SliderSwitch::SliderSwitch(parameters::Juggler *pParameters, int nParameterIndex) 32 | { 33 | pSwitch = dynamic_cast(pParameters->getPluginParameter(nParameterIndex)); 34 | jassert(pSwitch != nullptr); 35 | 36 | setRange(0.0f, 1.0f, pSwitch->getStepSize()); 37 | setVelocityModeParameters(1.0, 1, 0.0, true); 38 | setSliderStyle(Slider::RotaryHorizontalVerticalDrag); 39 | colourRotary = Colours::white; 40 | 41 | setDoubleClickReturnValue(true, pSwitch->getDefaultFloat()); 42 | } 43 | 44 | 45 | void SliderSwitch::visibilityChanged() 46 | { 47 | Slider::visibilityChanged(); 48 | 49 | setColour(Slider::rotarySliderFillColourId, colourRotary); 50 | setColour(Slider::textBoxTextColourId, Colours::white); 51 | setColour(Slider::textBoxBackgroundColourId, Colours::darkgrey.darker(0.7f)); 52 | setColour(Slider::textBoxOutlineColourId, Colours::darkgrey.darker(0.4f)); 53 | } 54 | 55 | 56 | void SliderSwitch::resized() 57 | { 58 | Slider::resized(); 59 | 60 | int nWidth = getBounds().getWidth(); 61 | setTextBoxStyle(Slider::TextBoxBelow, true, nWidth, 18); 62 | } 63 | 64 | 65 | void SliderSwitch::setSliderColour(const Colour &colour) 66 | { 67 | colourRotary = colour; 68 | setColour(Slider::thumbColourId, colourRotary); 69 | setColour(Slider::rotarySliderFillColourId, colourRotary); 70 | } 71 | 72 | float SliderSwitch::getRealFloat() 73 | { 74 | return pSwitch->getRealFloat(); 75 | } 76 | 77 | 78 | bool SliderSwitch::getBoolean() 79 | { 80 | return pSwitch->getBoolean(); 81 | } 82 | 83 | 84 | int SliderSwitch::getRealInteger() 85 | { 86 | return pSwitch->getRealInteger(); 87 | } 88 | 89 | 90 | double SliderSwitch::getValueFromText(const String &strText) 91 | { 92 | return pSwitch->getFloatFromText(strText); 93 | } 94 | 95 | 96 | String SliderSwitch::getTextFromValue(double dValue) 97 | { 98 | return pSwitch->getTextFromFloat((float) dValue); 99 | } 100 | 101 | } 102 | } 103 | -------------------------------------------------------------------------------- /Source/frut/widgets/slider_switch.h: -------------------------------------------------------------------------------- 1 | /* ---------------------------------------------------------------------------- 2 | 3 | FrutJUCE 4 | ======== 5 | Common classes for use with the JUCE library 6 | 7 | Copyright (c) 2010-2020 Martin Zuther (http://www.mzuther.de/) 8 | 9 | This program is free software: you can redistribute it and/or modify 10 | it under the terms of the GNU General Public License as published by 11 | the Free Software Foundation, either version 3 of the License, or 12 | (at your option) any later version. 13 | 14 | This program is distributed in the hope that it will be useful, 15 | but WITHOUT ANY WARRANTY; without even the implied warranty of 16 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 17 | GNU General Public License for more details. 18 | 19 | You should have received a copy of the GNU General Public License 20 | along with this program. If not, see . 21 | 22 | Thank you for using free software! 23 | 24 | ---------------------------------------------------------------------------- */ 25 | 26 | #ifndef FRUT_WIDGETS_SLIDER_SWITCH_H 27 | #define FRUT_WIDGETS_SLIDER_SWITCH_H 28 | 29 | namespace frut 30 | { 31 | namespace widgets 32 | { 33 | 34 | class SliderSwitch : 35 | virtual public FrutSlider 36 | { 37 | public: 38 | SliderSwitch(parameters::Juggler *pParameters, int nParameterIndex); 39 | 40 | void visibilityChanged(); 41 | void resized(); 42 | virtual void setSliderColour(const Colour &colour); 43 | 44 | float getRealFloat(); 45 | bool getBoolean(); 46 | int getRealInteger(); 47 | 48 | double getValueFromText(const String &strText); 49 | String getTextFromValue(double dValue); 50 | private: 51 | JUCE_LEAK_DETECTOR(SliderSwitch); 52 | 53 | Colour colourRotary; 54 | parameters::ParSwitch *pSwitch; 55 | }; 56 | 57 | } 58 | } 59 | 60 | #endif // FRUT_WIDGETS_SLIDER_SWITCH_H 61 | -------------------------------------------------------------------------------- /Source/frut/widgets/slider_switch_linear_bar.cpp: -------------------------------------------------------------------------------- 1 | /* ---------------------------------------------------------------------------- 2 | 3 | FrutJUCE 4 | ======== 5 | Common classes for use with the JUCE library 6 | 7 | Copyright (c) 2010-2020 Martin Zuther (http://www.mzuther.de/) 8 | 9 | This program is free software: you can redistribute it and/or modify 10 | it under the terms of the GNU General Public License as published by 11 | the Free Software Foundation, either version 3 of the License, or 12 | (at your option) any later version. 13 | 14 | This program is distributed in the hope that it will be useful, 15 | but WITHOUT ANY WARRANTY; without even the implied warranty of 16 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 17 | GNU General Public License for more details. 18 | 19 | You should have received a copy of the GNU General Public License 20 | along with this program. If not, see . 21 | 22 | Thank you for using free software! 23 | 24 | ---------------------------------------------------------------------------- */ 25 | 26 | namespace frut 27 | { 28 | namespace widgets 29 | { 30 | 31 | SliderSwitchLinearBar::SliderSwitchLinearBar(parameters::Juggler *pParameters, int nParameterIndex) 32 | { 33 | pSwitch = dynamic_cast(pParameters->getPluginParameter(nParameterIndex)); 34 | jassert(pSwitch != nullptr); 35 | 36 | setRange(0.0f, 1.0f, pSwitch->getStepSize()); 37 | setSliderStyle(Slider::LinearBar); 38 | colourThumb = Colours::white; 39 | 40 | setTextBoxIsEditable(false); 41 | setDoubleClickReturnValue(true, pSwitch->getDefaultFloat()); 42 | } 43 | 44 | 45 | void SliderSwitchLinearBar::visibilityChanged() 46 | { 47 | Slider::visibilityChanged(); 48 | 49 | setColour(Slider::thumbColourId, colourThumb); 50 | setColour(Slider::textBoxTextColourId, Colours::white); 51 | setColour(Slider::backgroundColourId, Colours::darkgrey.darker(0.7f)); 52 | setColour(Slider::textBoxOutlineColourId, Colours::darkgrey.darker(0.4f)); 53 | } 54 | 55 | 56 | void SliderSwitchLinearBar::setSliderColour(const Colour &colour) 57 | { 58 | colourThumb = colour; 59 | setColour(Slider::thumbColourId, colourThumb); 60 | } 61 | 62 | float SliderSwitchLinearBar::getRealFloat() 63 | { 64 | return pSwitch->getRealFloat(); 65 | } 66 | 67 | 68 | bool SliderSwitchLinearBar::getBoolean() 69 | { 70 | return pSwitch->getBoolean(); 71 | } 72 | 73 | 74 | int SliderSwitchLinearBar::getRealInteger() 75 | { 76 | return pSwitch->getRealInteger(); 77 | } 78 | 79 | 80 | double SliderSwitchLinearBar::getValueFromText(const String &strText) 81 | { 82 | return pSwitch->getFloatFromText(strText); 83 | } 84 | 85 | 86 | String SliderSwitchLinearBar::getTextFromValue(double dValue) 87 | { 88 | return pSwitch->getTextFromFloat((float) dValue); 89 | } 90 | 91 | } 92 | } 93 | -------------------------------------------------------------------------------- /Source/frut/widgets/slider_switch_linear_bar.h: -------------------------------------------------------------------------------- 1 | /* ---------------------------------------------------------------------------- 2 | 3 | FrutJUCE 4 | ======== 5 | Common classes for use with the JUCE library 6 | 7 | Copyright (c) 2010-2020 Martin Zuther (http://www.mzuther.de/) 8 | 9 | This program is free software: you can redistribute it and/or modify 10 | it under the terms of the GNU General Public License as published by 11 | the Free Software Foundation, either version 3 of the License, or 12 | (at your option) any later version. 13 | 14 | This program is distributed in the hope that it will be useful, 15 | but WITHOUT ANY WARRANTY; without even the implied warranty of 16 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 17 | GNU General Public License for more details. 18 | 19 | You should have received a copy of the GNU General Public License 20 | along with this program. If not, see . 21 | 22 | Thank you for using free software! 23 | 24 | ---------------------------------------------------------------------------- */ 25 | 26 | #ifndef FRUT_WIDGETS_SLIDER_SWITCH_LINEAR_BAR_H 27 | #define FRUT_WIDGETS_SLIDER_SWITCH_LINEAR_BAR_H 28 | 29 | namespace frut 30 | { 31 | namespace widgets 32 | { 33 | 34 | class SliderSwitchLinearBar : 35 | public FrutSlider 36 | { 37 | public: 38 | SliderSwitchLinearBar(parameters::Juggler *pParameters, int nParameterIndex); 39 | 40 | void visibilityChanged(); 41 | void setSliderColour(const Colour &colour); 42 | 43 | float getRealFloat(); 44 | bool getBoolean(); 45 | int getRealInteger(); 46 | 47 | double getValueFromText(const String &strText); 48 | String getTextFromValue(double dValue); 49 | private: 50 | JUCE_LEAK_DETECTOR(SliderSwitchLinearBar); 51 | 52 | Colour colourThumb; 53 | parameters::ParSwitch *pSwitch; 54 | }; 55 | 56 | } 57 | } 58 | 59 | #endif // FRUT_WIDGETS_SLIDER_SWITCH_LINEAR_BAR_H 60 | -------------------------------------------------------------------------------- /Source/frut/widgets/window_about_content.h: -------------------------------------------------------------------------------- 1 | /* ---------------------------------------------------------------------------- 2 | 3 | FrutJUCE 4 | ======== 5 | Common classes for use with the JUCE library 6 | 7 | Copyright (c) 2010-2020 Martin Zuther (http://www.mzuther.de/) 8 | 9 | This program is free software: you can redistribute it and/or modify 10 | it under the terms of the GNU General Public License as published by 11 | the Free Software Foundation, either version 3 of the License, or 12 | (at your option) any later version. 13 | 14 | This program is distributed in the hope that it will be useful, 15 | but WITHOUT ANY WARRANTY; without even the implied warranty of 16 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 17 | GNU General Public License for more details. 18 | 19 | You should have received a copy of the GNU General Public License 20 | along with this program. If not, see . 21 | 22 | Thank you for using free software! 23 | 24 | ---------------------------------------------------------------------------- */ 25 | 26 | #ifndef FRUT_WIDGETS_WINDOW_ABOUT_CONTENT_H 27 | #define FRUT_WIDGETS_WINDOW_ABOUT_CONTENT_H 28 | 29 | namespace frut 30 | { 31 | namespace widgets 32 | { 33 | 34 | /// Dialog window for displaying version, copyright, license and so 35 | /// on. 36 | /// 37 | class WindowAboutContent : 38 | public Component, 39 | public Button::Listener 40 | { 41 | public: 42 | WindowAboutContent(); 43 | 44 | static DialogWindow *createDialogWindow(AudioProcessorEditor *pluginEditor, 45 | int componentWidth, 46 | int componentHeight, 47 | const StringPairArray &chapters); 48 | 49 | virtual void buttonClicked(Button *button); 50 | 51 | virtual void applySkin(); 52 | 53 | virtual void initialise(int componentWidth, 54 | int componentHeight, 55 | const StringPairArray &chapters); 56 | 57 | protected: 58 | virtual void addChapters(const StringPairArray &chapters); 59 | 60 | TextEditor textEditor_; 61 | TextButton buttonClose_; 62 | ImageButton buttonLicense_; 63 | 64 | private: 65 | JUCE_LEAK_DETECTOR(WindowAboutContent); 66 | }; 67 | 68 | } 69 | } 70 | 71 | #endif // FRUT_WIDGETS_WINDOW_ABOUT_CONTENT_H 72 | -------------------------------------------------------------------------------- /Source/frut/widgets/window_settings_content.h: -------------------------------------------------------------------------------- 1 | /* ---------------------------------------------------------------------------- 2 | 3 | FrutJUCE 4 | ======== 5 | Common classes for use with the JUCE library 6 | 7 | Copyright (c) 2010-2020 Martin Zuther (http://www.mzuther.de/) 8 | 9 | This program is free software: you can redistribute it and/or modify 10 | it under the terms of the GNU General Public License as published by 11 | the Free Software Foundation, either version 3 of the License, or 12 | (at your option) any later version. 13 | 14 | This program is distributed in the hope that it will be useful, 15 | but WITHOUT ANY WARRANTY; without even the implied warranty of 16 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 17 | GNU General Public License for more details. 18 | 19 | You should have received a copy of the GNU General Public License 20 | along with this program. If not, see . 21 | 22 | Thank you for using free software! 23 | 24 | ---------------------------------------------------------------------------- */ 25 | 26 | #ifndef FRUT_WIDGETS_WINDOW_SETTINGS_CONTENT_H 27 | #define FRUT_WIDGETS_WINDOW_SETTINGS_CONTENT_H 28 | 29 | namespace frut 30 | { 31 | namespace widgets 32 | { 33 | 34 | /// Dialog window for displaying plugin-settings. 35 | /// 36 | class WindowSettingsContent : 37 | public Component, 38 | public Button::Listener 39 | { 40 | public: 41 | WindowSettingsContent(); 42 | 43 | static DialogWindow *createDialogWindow(AudioProcessorEditor *pluginEditor, 44 | int componentWidth, 45 | int componentHeight, 46 | const String &pluginSettings); 47 | 48 | virtual void buttonClicked(Button *button); 49 | 50 | virtual void closeButtonPressed(); 51 | 52 | virtual void applySkin(); 53 | 54 | virtual void initialise(int componentWidth, 55 | int componentHeight, 56 | const String &pluginSettings); 57 | 58 | protected: 59 | TextEditor textEditor_; 60 | TextButton buttonClose_; 61 | 62 | private: 63 | JUCE_LEAK_DETECTOR(WindowSettingsContent); 64 | }; 65 | 66 | } 67 | } 68 | 69 | #endif // FRUT_WIDGETS_WINDOW_SETTINGS_CONTENT_H 70 | -------------------------------------------------------------------------------- /Source/frut/widgets/window_validation_content.h: -------------------------------------------------------------------------------- 1 | /* ---------------------------------------------------------------------------- 2 | 3 | FrutJUCE 4 | ======== 5 | Common classes for use with the JUCE library 6 | 7 | Copyright (c) 2010-2020 Martin Zuther (http://www.mzuther.de/) 8 | 9 | This program is free software: you can redistribute it and/or modify 10 | it under the terms of the GNU General Public License as published by 11 | the Free Software Foundation, either version 3 of the License, or 12 | (at your option) any later version. 13 | 14 | This program is distributed in the hope that it will be useful, 15 | but WITHOUT ANY WARRANTY; without even the implied warranty of 16 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 17 | GNU General Public License for more details. 18 | 19 | You should have received a copy of the GNU General Public License 20 | along with this program. If not, see . 21 | 22 | Thank you for using free software! 23 | 24 | ---------------------------------------------------------------------------- */ 25 | 26 | #ifndef FRUT_WIDGETS_WINDOW_VALIDATION_CONTENT_H 27 | #define FRUT_WIDGETS_WINDOW_VALIDATION_CONTENT_H 28 | 29 | namespace frut 30 | { 31 | namespace widgets 32 | { 33 | 34 | /// Dialog window for validation settings. 35 | /// 36 | class WindowValidationContent : 37 | public Component, 38 | public Button::Listener 39 | { 40 | public: 41 | WindowValidationContent(); 42 | 43 | virtual void buttonClicked(Button *button); 44 | virtual void closeButtonPressed(); 45 | 46 | virtual void styleButton(ToggleButton &button); 47 | virtual void applySkin(); 48 | 49 | virtual void initialise(int componentWidth, 50 | int componentHeight, 51 | int numberOfInputChannels, 52 | int sampleRate, 53 | int selectedChannel, 54 | const File &validationFile); 55 | 56 | /// Select a new audio file for validation. 57 | /// 58 | /// @param validationFile audio file for validation 59 | /// 60 | virtual void selectValidationFile(const File &validationFile) = 0; 61 | 62 | protected: 63 | File validationFile_; 64 | 65 | Label labelFileSelection_; 66 | Label labelSampleRate_; 67 | Label labelSampleRateValue_; 68 | 69 | TextButton buttonFileSelection_; 70 | TextButton buttonValidation_; 71 | TextButton buttonCancel_; 72 | 73 | Label labelSelectedChannel; 74 | widgets::ChannelSlider sliderSelectChannel_; 75 | 76 | private: 77 | JUCE_LEAK_DETECTOR(WindowValidationContent); 78 | }; 79 | 80 | } 81 | } 82 | 83 | #endif // FRUT_WIDGETS_WINDOW_VALIDATION_CONTENT_H 84 | -------------------------------------------------------------------------------- /Source/gain_stage.h: -------------------------------------------------------------------------------- 1 | /* ---------------------------------------------------------------------------- 2 | 3 | Squeezer 4 | ======== 5 | Flexible general-purpose audio compressor with a touch of citrus 6 | 7 | Copyright (c) 2013-2020 Martin Zuther (http://www.mzuther.de/) 8 | 9 | This program is free software: you can redistribute it and/or modify 10 | it under the terms of the GNU General Public License as published by 11 | the Free Software Foundation, either version 3 of the License, or 12 | (at your option) any later version. 13 | 14 | This program is distributed in the hope that it will be useful, 15 | but WITHOUT ANY WARRANTY; without even the implied warranty of 16 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 17 | GNU General Public License for more details. 18 | 19 | You should have received a copy of the GNU General Public License 20 | along with this program. If not, see . 21 | 22 | Thank you for using free software! 23 | 24 | ---------------------------------------------------------------------------- */ 25 | 26 | #ifndef SQUEEZER_GAIN_STAGE_H 27 | #define SQUEEZER_GAIN_STAGE_H 28 | 29 | #include "FrutHeader.h" 30 | 31 | 32 | class GainStage 33 | { 34 | public: 35 | enum Parameters // public namespace! 36 | { 37 | FET = 0, 38 | Optical, 39 | NumberOfGainStages, 40 | }; 41 | 42 | // Destructor. 43 | virtual ~GainStage() {}; 44 | 45 | virtual void reset(double dCurrentGainReduction) = 0; 46 | virtual double processGainReduction(double dGainReductionNew, double dGainReductionIdeal) = 0; 47 | 48 | protected: 49 | explicit GainStage(int nSampleRate) 50 | { 51 | ignoreUnused(nSampleRate); 52 | }; 53 | }; 54 | 55 | #endif // SQUEEZER_GAIN_STAGE_H 56 | -------------------------------------------------------------------------------- /Source/gain_stage_fet.cpp: -------------------------------------------------------------------------------- 1 | /* ---------------------------------------------------------------------------- 2 | 3 | Squeezer 4 | ======== 5 | Flexible general-purpose audio compressor with a touch of citrus 6 | 7 | Copyright (c) 2013-2020 Martin Zuther (http://www.mzuther.de/) 8 | 9 | This program is free software: you can redistribute it and/or modify 10 | it under the terms of the GNU General Public License as published by 11 | the Free Software Foundation, either version 3 of the License, or 12 | (at your option) any later version. 13 | 14 | This program is distributed in the hope that it will be useful, 15 | but WITHOUT ANY WARRANTY; without even the implied warranty of 16 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 17 | GNU General Public License for more details. 18 | 19 | You should have received a copy of the GNU General Public License 20 | along with this program. If not, see . 21 | 22 | Thank you for using free software! 23 | 24 | ---------------------------------------------------------------------------- */ 25 | 26 | #include "gain_stage_fet.h" 27 | 28 | 29 | GainStageFET::GainStageFET(int nSampleRate) : GainStage(nSampleRate) 30 | /* Constructor. 31 | 32 | nSampleRate (integer): internal sample rate 33 | 34 | return value: none 35 | */ 36 | { 37 | // reset (i.e. initialise) all relevant variables 38 | reset(0.0); 39 | } 40 | 41 | 42 | void GainStageFET::reset(double dCurrentGainReduction) 43 | /* Reset all relevant variables. 44 | 45 | dCurrentGainReduction (double): current gain reduction in decibels 46 | 47 | return value: none 48 | */ 49 | { 50 | dGainReduction = dCurrentGainReduction; 51 | } 52 | 53 | 54 | double GainStageFET::processGainReduction(double dGainReductionNew, double dGainReductionIdeal) 55 | /* Process current gain reduction. 56 | 57 | dGainReductionNew (double): calculated new gain reduction in 58 | decibels 59 | 60 | dGainReductionIdeal (double): calculated "ideal" gain reduction 61 | (without any envelopes) decibels 62 | 63 | return value (double): returns the processed gain reduction in 64 | decibel 65 | */ 66 | { 67 | ignoreUnused(dGainReductionIdeal); 68 | 69 | dGainReduction = dGainReductionNew; 70 | return dGainReduction; 71 | } 72 | -------------------------------------------------------------------------------- /Source/gain_stage_fet.h: -------------------------------------------------------------------------------- 1 | /* ---------------------------------------------------------------------------- 2 | 3 | Squeezer 4 | ======== 5 | Flexible general-purpose audio compressor with a touch of citrus 6 | 7 | Copyright (c) 2013-2020 Martin Zuther (http://www.mzuther.de/) 8 | 9 | This program is free software: you can redistribute it and/or modify 10 | it under the terms of the GNU General Public License as published by 11 | the Free Software Foundation, either version 3 of the License, or 12 | (at your option) any later version. 13 | 14 | This program is distributed in the hope that it will be useful, 15 | but WITHOUT ANY WARRANTY; without even the implied warranty of 16 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 17 | GNU General Public License for more details. 18 | 19 | You should have received a copy of the GNU General Public License 20 | along with this program. If not, see . 21 | 22 | Thank you for using free software! 23 | 24 | ---------------------------------------------------------------------------- */ 25 | 26 | #ifndef SQUEEZER_GAIN_STAGE_FET_H 27 | #define SQUEEZER_GAIN_STAGE_FET_H 28 | 29 | #include "FrutHeader.h" 30 | #include "gain_stage.h" 31 | 32 | 33 | class GainStageFET : virtual public GainStage 34 | { 35 | public: 36 | explicit GainStageFET(int nSampleRate); 37 | 38 | void reset(double dCurrentGainReduction); 39 | double processGainReduction(double dGainReductionNew, double dGainReductionIdeal); 40 | private: 41 | JUCE_LEAK_DETECTOR(GainStageFET); 42 | 43 | double dGainReduction; 44 | }; 45 | 46 | #endif // SQUEEZER_GAIN_STAGE_FET_H 47 | -------------------------------------------------------------------------------- /Source/gain_stage_optical.h: -------------------------------------------------------------------------------- 1 | /* ---------------------------------------------------------------------------- 2 | 3 | Squeezer 4 | ======== 5 | Flexible general-purpose audio compressor with a touch of citrus 6 | 7 | Copyright (c) 2013-2020 Martin Zuther (http://www.mzuther.de/) 8 | 9 | This program is free software: you can redistribute it and/or modify 10 | it under the terms of the GNU General Public License as published by 11 | the Free Software Foundation, either version 3 of the License, or 12 | (at your option) any later version. 13 | 14 | This program is distributed in the hope that it will be useful, 15 | but WITHOUT ANY WARRANTY; without even the implied warranty of 16 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 17 | GNU General Public License for more details. 18 | 19 | You should have received a copy of the GNU General Public License 20 | along with this program. If not, see . 21 | 22 | Thank you for using free software! 23 | 24 | ---------------------------------------------------------------------------- */ 25 | 26 | #ifndef SQUEEZER_GAIN_STAGE_OPTICAL_H 27 | #define SQUEEZER_GAIN_STAGE_OPTICAL_H 28 | 29 | #include "FrutHeader.h" 30 | #include "gain_stage.h" 31 | 32 | 33 | class GainStageOptical : virtual public GainStage 34 | { 35 | public: 36 | explicit GainStageOptical(int nSampleRate); 37 | 38 | void reset(double dCurrentGainReduction); 39 | double processGainReduction(double dGainReductionNew, double dGainReductionIdeal); 40 | 41 | private: 42 | JUCE_LEAK_DETECTOR(GainStageOptical); 43 | 44 | double dSampleRate; 45 | double dGainReduction; 46 | 47 | const int nNumberOfDecibels; 48 | const int nCoefficientsPerDecibel; 49 | const int nNumberOfCoefficients; 50 | 51 | Array arrAttackCoefficients; 52 | Array arrReleaseCoefficients; 53 | }; 54 | 55 | #endif // SQUEEZER_GAIN_STAGE_OPTICAL_H 56 | -------------------------------------------------------------------------------- /Source/lint.sh: -------------------------------------------------------------------------------- 1 | #! /usr/bin/env bash 2 | 3 | project_home=$(pwd)/.. 4 | 5 | 6 | function lint_file 7 | { 8 | filename="$1" 9 | dirname=$(dirname "$1") 10 | echo $filename 11 | 12 | cat $filename | /usr/bin/clang -x c++ - \ 13 | -include $project_home/Source/frut/FrutHeader.h \ 14 | -I $project_home/JuceLibraryCode \ 15 | -I $project_home/libraries \ 16 | -I $project_home/libraries/juce/modules \ 17 | -I $project_home/Source \ 18 | -I $project_home/Source/frut \ 19 | -I $project_home/Source/frut/amalgamated \ 20 | -I $dirname \ 21 | -fsyntax-only \ 22 | -fno-caret-diagnostics \ 23 | -std=c++14 \ 24 | -Wall 25 | 26 | /usr/bin/cppcheck \ 27 | --template=gcc \ 28 | --enable=style \ 29 | --include=$project_home/Source/frut/FrutHeader.h \ 30 | --inline-suppr \ 31 | --language=c++ \ 32 | --quiet \ 33 | $filename 34 | 35 | # find error-like codetags 36 | GREP_COLORS="mt=01;31" \ 37 | /bin/egrep \ 38 | --colour \ 39 | '\<(FIXME|BUG)\>' \ 40 | $filename 41 | 42 | # find warning-like codetags 43 | GREP_COLORS="mt=01;33" \ 44 | /bin/egrep \ 45 | --colour \ 46 | '\<(TODO|@todo)\>' \ 47 | $filename 48 | } 49 | 50 | 51 | echo 52 | 53 | find . -maxdepth 1 \( -iname "*.cpp" -or -iname "*.h" \) -print | sort | while read filename 54 | do 55 | lint_file $filename \; 56 | done 57 | 58 | echo 59 | 60 | find ./frut/amalgamated -maxdepth 1 \( -iname "*.cpp" -or -iname "*.h" \) -print | sort | while read filename 61 | do 62 | lint_file $filename \; 63 | done 64 | 65 | echo 66 | -------------------------------------------------------------------------------- /Source/meter_bar_gain_reduction.h: -------------------------------------------------------------------------------- 1 | /* ---------------------------------------------------------------------------- 2 | 3 | Squeezer 4 | ======== 5 | Flexible general-purpose audio compressor with a touch of citrus 6 | 7 | Copyright (c) 2013-2020 Martin Zuther (http://www.mzuther.de/) 8 | 9 | This program is free software: you can redistribute it and/or modify 10 | it under the terms of the GNU General Public License as published by 11 | the Free Software Foundation, either version 3 of the License, or 12 | (at your option) any later version. 13 | 14 | This program is distributed in the hope that it will be useful, 15 | but WITHOUT ANY WARRANTY; without even the implied warranty of 16 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 17 | GNU General Public License for more details. 18 | 19 | You should have received a copy of the GNU General Public License 20 | along with this program. If not, see . 21 | 22 | Thank you for using free software! 23 | 24 | ---------------------------------------------------------------------------- */ 25 | 26 | #ifndef SQUEEZER_METER_BAR_GAIN_REDUCTION_H 27 | #define SQUEEZER_METER_BAR_GAIN_REDUCTION_H 28 | 29 | #include "FrutHeader.h" 30 | 31 | 32 | class MeterBarGainReduction : 33 | public frut::widgets::MeterBar 34 | { 35 | public: 36 | using frut::widgets::MeterBar::create; 37 | void create(frut::widgets::Orientation orientation, 38 | bool discreteMeter, 39 | int mainSegmentHeight, 40 | const Colour &segmentColour); 41 | 42 | void setUpwardExpansion(bool upwardExpansion); 43 | 44 | protected: 45 | bool upwardExpansion_; 46 | 47 | private: 48 | JUCE_LEAK_DETECTOR(MeterBarGainReduction); 49 | }; 50 | 51 | #endif // SQUEEZER_METER_BAR_GAIN_REDUCTION_H 52 | -------------------------------------------------------------------------------- /Source/meter_bar_level.h: -------------------------------------------------------------------------------- 1 | /* ---------------------------------------------------------------------------- 2 | 3 | Squeezer 4 | ======== 5 | Flexible general-purpose audio compressor with a touch of citrus 6 | 7 | Copyright (c) 2013-2020 Martin Zuther (http://www.mzuther.de/) 8 | 9 | This program is free software: you can redistribute it and/or modify 10 | it under the terms of the GNU General Public License as published by 11 | the Free Software Foundation, either version 3 of the License, or 12 | (at your option) any later version. 13 | 14 | This program is distributed in the hope that it will be useful, 15 | but WITHOUT ANY WARRANTY; without even the implied warranty of 16 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 17 | GNU General Public License for more details. 18 | 19 | You should have received a copy of the GNU General Public License 20 | along with this program. If not, see . 21 | 22 | Thank you for using free software! 23 | 24 | ---------------------------------------------------------------------------- */ 25 | 26 | #ifndef SQUEEZER_METER_BAR_LEVEL_H 27 | #define SQUEEZER_METER_BAR_LEVEL_H 28 | 29 | #include "FrutHeader.h" 30 | 31 | 32 | class MeterBarLevel : 33 | public frut::widgets::MeterBar 34 | { 35 | public: 36 | using frut::widgets::MeterBar::create; 37 | void create(int crestFactor, 38 | frut::widgets::Orientation orientation, 39 | bool discreteMeter, 40 | int mainSegmentHeight, 41 | const Array &segmentColours); 42 | 43 | protected: 44 | /// Colour ID selector for meter segments. 45 | enum colourSelector // protected namespace 46 | { 47 | /// overload (usually red) 48 | overload = 0, 49 | 50 | /// warning (usually yellow) 51 | warning, 52 | 53 | /// fine (usually green) 54 | fine, 55 | }; 56 | 57 | private: 58 | JUCE_LEAK_DETECTOR(MeterBarLevel); 59 | }; 60 | 61 | #endif // SQUEEZER_METER_BAR_LEVEL_H 62 | -------------------------------------------------------------------------------- /Source/plugin_parameters.h: -------------------------------------------------------------------------------- 1 | /* ---------------------------------------------------------------------------- 2 | 3 | Squeezer 4 | ======== 5 | Flexible general-purpose audio compressor with a touch of citrus 6 | 7 | Copyright (c) 2013-2020 Martin Zuther (http://www.mzuther.de/) 8 | 9 | This program is free software: you can redistribute it and/or modify 10 | it under the terms of the GNU General Public License as published by 11 | the Free Software Foundation, either version 3 of the License, or 12 | (at your option) any later version. 13 | 14 | This program is distributed in the hope that it will be useful, 15 | but WITHOUT ANY WARRANTY; without even the implied warranty of 16 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 17 | GNU General Public License for more details. 18 | 19 | You should have received a copy of the GNU General Public License 20 | along with this program. If not, see . 21 | 22 | Thank you for using free software! 23 | 24 | ---------------------------------------------------------------------------- */ 25 | 26 | #ifndef SQUEEZER_PLUGIN_PARAMETERS_H 27 | #define SQUEEZER_PLUGIN_PARAMETERS_H 28 | 29 | #include "FrutHeader.h" 30 | #include "compressor.h" 31 | 32 | 33 | class SqueezerPluginParameters : 34 | public frut::parameters::Juggler 35 | { 36 | public: 37 | SqueezerPluginParameters(); 38 | 39 | String toString(); 40 | 41 | static const File getSkinDirectory(); 42 | String getSkinName(); 43 | void setSkinName(const String &strSkinName); 44 | 45 | enum Parameters // public namespace! 46 | { 47 | selBypass = 0, 48 | selRmsWindowSize, 49 | selDesign, 50 | selCurveType, 51 | selGainStage, 52 | 53 | selThresholdSwitch, 54 | selThreshold, 55 | selRatioSwitch, 56 | selRatio, 57 | selKneeWidth, 58 | 59 | selAttackRateSwitch, 60 | selAttackRate, 61 | selReleaseRateSwitch, 62 | selReleaseRate, 63 | 64 | selAutoMakeupGain, 65 | selMakeupGainSwitch, 66 | selMakeupGain, 67 | selWetMixSwitch, 68 | selWetMix, 69 | 70 | selSidechainInput, 71 | selSidechainHPFCutoffSwitch, 72 | selSidechainHPFCutoff, 73 | selSidechainLPFCutoffSwitch, 74 | selSidechainLPFCutoff, 75 | selSidechainListen, 76 | 77 | selInputTrimSwitch, 78 | selInputTrim, 79 | selStereoLinkSwitch, 80 | selStereoLink, 81 | 82 | numberOfParametersRevealed, 83 | 84 | selSkinName = numberOfParametersRevealed, 85 | 86 | numberOfParametersComplete, 87 | }; 88 | 89 | private: 90 | JUCE_LEAK_DETECTOR(SqueezerPluginParameters); 91 | }; 92 | 93 | #endif // SQUEEZER_PLUGIN_PARAMETERS_H 94 | -------------------------------------------------------------------------------- /Source/skin.cpp: -------------------------------------------------------------------------------- 1 | /* ---------------------------------------------------------------------------- 2 | 3 | Squeezer 4 | ======== 5 | Flexible general-purpose audio compressor with a touch of citrus 6 | 7 | Copyright (c) 2013-2020 Martin Zuther (http://www.mzuther.de/) 8 | 9 | This program is free software: you can redistribute it and/or modify 10 | it under the terms of the GNU General Public License as published by 11 | the Free Software Foundation, either version 3 of the License, or 12 | (at your option) any later version. 13 | 14 | This program is distributed in the hope that it will be useful, 15 | but WITHOUT ANY WARRANTY; without even the implied warranty of 16 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 17 | GNU General Public License for more details. 18 | 19 | You should have received a copy of the GNU General Public License 20 | along with this program. If not, see . 21 | 22 | Thank you for using free software! 23 | 24 | ---------------------------------------------------------------------------- */ 25 | 26 | #include "skin.h" 27 | 28 | 29 | bool Skin::loadSkin( 30 | File &skinFile, 31 | int numberOfChannels) 32 | 33 | { 34 | updateSkin(numberOfChannels); 35 | 36 | return loadFromXml(skinFile, "squeezer-skin", "1.1"); 37 | } 38 | 39 | 40 | void Skin::updateSkin( 41 | int numberOfChannels) 42 | 43 | { 44 | jassert(numberOfChannels > 0); 45 | 46 | currentBackgroundName_ = "image"; 47 | 48 | if (numberOfChannels == 1) 49 | { 50 | currentFallbackName_ = "mono"; 51 | } 52 | else 53 | { 54 | currentFallbackName_ = "stereo"; 55 | } 56 | 57 | currentGroupName_ = currentFallbackName_; 58 | 59 | if (document_ != nullptr) 60 | { 61 | skinGroup_ = document_->getChildByName(currentGroupName_); 62 | skinFallback_1_ = document_->getChildByName(currentFallbackName_); 63 | skinFallback_2_ = document_->getChildByName("default"); 64 | } 65 | else 66 | { 67 | skinGroup_ = nullptr; 68 | skinFallback_1_ = nullptr; 69 | skinFallback_2_ = nullptr; 70 | } 71 | } 72 | -------------------------------------------------------------------------------- /Source/skin.h: -------------------------------------------------------------------------------- 1 | /* ---------------------------------------------------------------------------- 2 | 3 | Squeezer 4 | ======== 5 | Flexible general-purpose audio compressor with a touch of citrus 6 | 7 | Copyright (c) 2013-2020 Martin Zuther (http://www.mzuther.de/) 8 | 9 | This program is free software: you can redistribute it and/or modify 10 | it under the terms of the GNU General Public License as published by 11 | the Free Software Foundation, either version 3 of the License, or 12 | (at your option) any later version. 13 | 14 | This program is distributed in the hope that it will be useful, 15 | but WITHOUT ANY WARRANTY; without even the implied warranty of 16 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 17 | GNU General Public License for more details. 18 | 19 | You should have received a copy of the GNU General Public License 20 | along with this program. If not, see . 21 | 22 | Thank you for using free software! 23 | 24 | ---------------------------------------------------------------------------- */ 25 | 26 | #ifndef SQUEEZER_SKIN_H 27 | #define SQUEEZER_SKIN_H 28 | 29 | #include "FrutHeader.h" 30 | #include "plugin_parameters.h" 31 | 32 | 33 | class Skin : 34 | public frut::skin::Skin 35 | { 36 | public: 37 | bool loadSkin(File &skinFile, 38 | int numberOfChannels); 39 | 40 | void updateSkin(int numberOfChannels); 41 | 42 | private: 43 | JUCE_LEAK_DETECTOR(Skin); 44 | }; 45 | 46 | #endif // SQUEEZER_SKIN_H 47 | -------------------------------------------------------------------------------- /bin/final/README: -------------------------------------------------------------------------------- 1 | Please do NOT place any intermediate binaries here. This directory is 2 | reserved for the current stable build. 3 | -------------------------------------------------------------------------------- /bin/final/squeezer: -------------------------------------------------------------------------------- 1 | ../standalone/squeezer -------------------------------------------------------------------------------- /bin/final/squeezer.pdf: -------------------------------------------------------------------------------- 1 | ../standalone/squeezer.pdf -------------------------------------------------------------------------------- /bin/standalone/squeezer.pdf: -------------------------------------------------------------------------------- 1 | ../../doc/squeezer.pdf -------------------------------------------------------------------------------- /bin/standalone/squeezer/doc/CC-BY-SA-4.0: -------------------------------------------------------------------------------- 1 | ../../../../doc/CC-BY-SA-4.0 -------------------------------------------------------------------------------- /bin/standalone/squeezer/doc/CONTRIBUTORS: -------------------------------------------------------------------------------- 1 | ../../../../doc/CONTRIBUTORS -------------------------------------------------------------------------------- /bin/standalone/squeezer/doc/HISTORY: -------------------------------------------------------------------------------- 1 | ../../../../doc/HISTORY -------------------------------------------------------------------------------- /bin/standalone/squeezer/doc/LICENSE: -------------------------------------------------------------------------------- 1 | ../../../../doc/LICENSE -------------------------------------------------------------------------------- /bin/standalone/squeezer/skins: -------------------------------------------------------------------------------- 1 | ../../../skins/ -------------------------------------------------------------------------------- /bin/vst2/squeezer: -------------------------------------------------------------------------------- 1 | ../standalone/squeezer -------------------------------------------------------------------------------- /bin/vst2/squeezer.pdf: -------------------------------------------------------------------------------- 1 | ../standalone/squeezer.pdf -------------------------------------------------------------------------------- /bin/vst3/squeezer: -------------------------------------------------------------------------------- 1 | ../standalone/squeezer -------------------------------------------------------------------------------- /bin/vst3/squeezer.pdf: -------------------------------------------------------------------------------- 1 | ../standalone/squeezer.pdf -------------------------------------------------------------------------------- /doc/.gitignore: -------------------------------------------------------------------------------- 1 | auto/ 2 | *.aux 3 | *.log 4 | *.out 5 | *.toc 6 | -------------------------------------------------------------------------------- /doc/CONTRIBUTORS: -------------------------------------------------------------------------------- 1 | Project owner 2 | ============= 3 | 4 | * Martin Zuther a.k.a. radix (http://www.mzuther.de/) 5 | 6 | 7 | 8 | Contributors 9 | ============ 10 | 11 | * Dimitrios Giannoulis et al. 12 | 13 | Superb comprising AES paper on compressor design: "Digital 14 | Dynamic Range Compressor Design - A Tutorial and Analysis", 15 | JAES, 60(6):399-408, 2012. 16 | 17 | 18 | * Paul Kellet (http://mda.smartelectronix.com/) 19 | 20 | Triangular-PDF dither with 2nd-order noise shaping. 21 | 22 | 23 | * Bram de Jong (http://bram.smartelectronix.com/) 24 | 25 | Envelope follower with different attack and release. 26 | 27 | 28 | 29 | Beta testing and ideas 30 | ====================== 31 | 32 | --- 33 | 34 | 35 | 36 | (note: do not forget to update "src/window_about.cpp"!) 37 | -------------------------------------------------------------------------------- /doc/TODO: -------------------------------------------------------------------------------- 1 | * [mzuther] implement UI scaling 2 | 3 | * [mzuther] fix gain difference between F.Frwrd. and F.Back mode 4 | 5 | * [mzuther] add over-sampling 6 | 7 | * separate buttons for peak / RMS, FET / Opto, F.Frwrd. / F.Back 8 | 9 | * add release hold 10 | 11 | * implement parameter smoothing ("anti-zipper") 12 | -------------------------------------------------------------------------------- /doc/include/hyphenation.sty: -------------------------------------------------------------------------------- 1 | \hyphenation{ 2 | } 3 | -------------------------------------------------------------------------------- /doc/include/images/VST_Compatible_Logo_Steinberg_negative.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mzuther/Squeezer/632f2bb96c2e5135d28573b8697ccedbc06aa16c/doc/include/images/VST_Compatible_Logo_Steinberg_negative.png -------------------------------------------------------------------------------- /doc/include/images/button_about_off.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mzuther/Squeezer/632f2bb96c2e5135d28573b8697ccedbc06aa16c/doc/include/images/button_about_off.png -------------------------------------------------------------------------------- /doc/include/images/button_about_on.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mzuther/Squeezer/632f2bb96c2e5135d28573b8697ccedbc06aa16c/doc/include/images/button_about_on.png -------------------------------------------------------------------------------- /doc/include/images/button_auto_makeup_gain_off.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mzuther/Squeezer/632f2bb96c2e5135d28573b8697ccedbc06aa16c/doc/include/images/button_auto_makeup_gain_off.png -------------------------------------------------------------------------------- /doc/include/images/button_auto_makeup_gain_on.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mzuther/Squeezer/632f2bb96c2e5135d28573b8697ccedbc06aa16c/doc/include/images/button_auto_makeup_gain_on.png -------------------------------------------------------------------------------- /doc/include/images/button_bypass_off.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mzuther/Squeezer/632f2bb96c2e5135d28573b8697ccedbc06aa16c/doc/include/images/button_bypass_off.png -------------------------------------------------------------------------------- /doc/include/images/button_bypass_on.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mzuther/Squeezer/632f2bb96c2e5135d28573b8697ccedbc06aa16c/doc/include/images/button_bypass_on.png -------------------------------------------------------------------------------- /doc/include/images/button_feedback_off.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mzuther/Squeezer/632f2bb96c2e5135d28573b8697ccedbc06aa16c/doc/include/images/button_feedback_off.png -------------------------------------------------------------------------------- /doc/include/images/button_feedback_on.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mzuther/Squeezer/632f2bb96c2e5135d28573b8697ccedbc06aa16c/doc/include/images/button_feedback_on.png -------------------------------------------------------------------------------- /doc/include/images/button_gpl_off.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mzuther/Squeezer/632f2bb96c2e5135d28573b8697ccedbc06aa16c/doc/include/images/button_gpl_off.png -------------------------------------------------------------------------------- /doc/include/images/button_gpl_on.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mzuther/Squeezer/632f2bb96c2e5135d28573b8697ccedbc06aa16c/doc/include/images/button_gpl_on.png -------------------------------------------------------------------------------- /doc/include/images/button_opto_off.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mzuther/Squeezer/632f2bb96c2e5135d28573b8697ccedbc06aa16c/doc/include/images/button_opto_off.png -------------------------------------------------------------------------------- /doc/include/images/button_opto_on.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mzuther/Squeezer/632f2bb96c2e5135d28573b8697ccedbc06aa16c/doc/include/images/button_opto_on.png -------------------------------------------------------------------------------- /doc/include/images/button_reset_off.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mzuther/Squeezer/632f2bb96c2e5135d28573b8697ccedbc06aa16c/doc/include/images/button_reset_off.png -------------------------------------------------------------------------------- /doc/include/images/button_reset_on.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mzuther/Squeezer/632f2bb96c2e5135d28573b8697ccedbc06aa16c/doc/include/images/button_reset_on.png -------------------------------------------------------------------------------- /doc/include/images/button_rms_off.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mzuther/Squeezer/632f2bb96c2e5135d28573b8697ccedbc06aa16c/doc/include/images/button_rms_off.png -------------------------------------------------------------------------------- /doc/include/images/button_rms_on.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mzuther/Squeezer/632f2bb96c2e5135d28573b8697ccedbc06aa16c/doc/include/images/button_rms_on.png -------------------------------------------------------------------------------- /doc/include/images/button_settings_off.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mzuther/Squeezer/632f2bb96c2e5135d28573b8697ccedbc06aa16c/doc/include/images/button_settings_off.png -------------------------------------------------------------------------------- /doc/include/images/button_settings_on.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mzuther/Squeezer/632f2bb96c2e5135d28573b8697ccedbc06aa16c/doc/include/images/button_settings_on.png -------------------------------------------------------------------------------- /doc/include/images/button_sidechain_external_off.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mzuther/Squeezer/632f2bb96c2e5135d28573b8697ccedbc06aa16c/doc/include/images/button_sidechain_external_off.png -------------------------------------------------------------------------------- /doc/include/images/button_sidechain_external_on.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mzuther/Squeezer/632f2bb96c2e5135d28573b8697ccedbc06aa16c/doc/include/images/button_sidechain_external_on.png -------------------------------------------------------------------------------- /doc/include/images/button_sidechain_listen_off.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mzuther/Squeezer/632f2bb96c2e5135d28573b8697ccedbc06aa16c/doc/include/images/button_sidechain_listen_off.png -------------------------------------------------------------------------------- /doc/include/images/button_sidechain_listen_on.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mzuther/Squeezer/632f2bb96c2e5135d28573b8697ccedbc06aa16c/doc/include/images/button_sidechain_listen_on.png -------------------------------------------------------------------------------- /doc/include/images/button_skin_off.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mzuther/Squeezer/632f2bb96c2e5135d28573b8697ccedbc06aa16c/doc/include/images/button_skin_off.png -------------------------------------------------------------------------------- /doc/include/images/button_skin_on.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mzuther/Squeezer/632f2bb96c2e5135d28573b8697ccedbc06aa16c/doc/include/images/button_skin_on.png -------------------------------------------------------------------------------- /doc/include/images/buttons_knee_width.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mzuther/Squeezer/632f2bb96c2e5135d28573b8697ccedbc06aa16c/doc/include/images/buttons_knee_width.png -------------------------------------------------------------------------------- /doc/include/images/buttons_release_curve.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mzuther/Squeezer/632f2bb96c2e5135d28573b8697ccedbc06aa16c/doc/include/images/buttons_release_curve.png -------------------------------------------------------------------------------- /doc/include/images/cc-by-sa.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mzuther/Squeezer/632f2bb96c2e5135d28573b8697ccedbc06aa16c/doc/include/images/cc-by-sa.png -------------------------------------------------------------------------------- /doc/include/images/knob_attack_time.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mzuther/Squeezer/632f2bb96c2e5135d28573b8697ccedbc06aa16c/doc/include/images/knob_attack_time.png -------------------------------------------------------------------------------- /doc/include/images/knob_compression_ratio.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mzuther/Squeezer/632f2bb96c2e5135d28573b8697ccedbc06aa16c/doc/include/images/knob_compression_ratio.png -------------------------------------------------------------------------------- /doc/include/images/knob_hpf_cutoff.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mzuther/Squeezer/632f2bb96c2e5135d28573b8697ccedbc06aa16c/doc/include/images/knob_hpf_cutoff.png -------------------------------------------------------------------------------- /doc/include/images/knob_input_trim.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mzuther/Squeezer/632f2bb96c2e5135d28573b8697ccedbc06aa16c/doc/include/images/knob_input_trim.png -------------------------------------------------------------------------------- /doc/include/images/knob_lpf_cutoff.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mzuther/Squeezer/632f2bb96c2e5135d28573b8697ccedbc06aa16c/doc/include/images/knob_lpf_cutoff.png -------------------------------------------------------------------------------- /doc/include/images/knob_output_gain.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mzuther/Squeezer/632f2bb96c2e5135d28573b8697ccedbc06aa16c/doc/include/images/knob_output_gain.png -------------------------------------------------------------------------------- /doc/include/images/knob_release_time.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mzuther/Squeezer/632f2bb96c2e5135d28573b8697ccedbc06aa16c/doc/include/images/knob_release_time.png -------------------------------------------------------------------------------- /doc/include/images/knob_stereo_link.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mzuther/Squeezer/632f2bb96c2e5135d28573b8697ccedbc06aa16c/doc/include/images/knob_stereo_link.png -------------------------------------------------------------------------------- /doc/include/images/knob_threshold.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mzuther/Squeezer/632f2bb96c2e5135d28573b8697ccedbc06aa16c/doc/include/images/knob_threshold.png -------------------------------------------------------------------------------- /doc/include/images/knob_toggle_locked.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mzuther/Squeezer/632f2bb96c2e5135d28573b8697ccedbc06aa16c/doc/include/images/knob_toggle_locked.png -------------------------------------------------------------------------------- /doc/include/images/knob_toggle_unlocked.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mzuther/Squeezer/632f2bb96c2e5135d28573b8697ccedbc06aa16c/doc/include/images/knob_toggle_unlocked.png -------------------------------------------------------------------------------- /doc/include/images/knob_wet_dry.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mzuther/Squeezer/632f2bb96c2e5135d28573b8697ccedbc06aa16c/doc/include/images/knob_wet_dry.png -------------------------------------------------------------------------------- /doc/include/images/meter_gain_reduction.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mzuther/Squeezer/632f2bb96c2e5135d28573b8697ccedbc06aa16c/doc/include/images/meter_gain_reduction.png -------------------------------------------------------------------------------- /doc/include/images/meter_levels.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mzuther/Squeezer/632f2bb96c2e5135d28573b8697ccedbc06aa16c/doc/include/images/meter_levels.png -------------------------------------------------------------------------------- /doc/include/images/squeezer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mzuther/Squeezer/632f2bb96c2e5135d28573b8697ccedbc06aa16c/doc/include/images/squeezer.png -------------------------------------------------------------------------------- /doc/licensing/vst_id_registration_1.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mzuther/Squeezer/632f2bb96c2e5135d28573b8697ccedbc06aa16c/doc/licensing/vst_id_registration_1.pdf -------------------------------------------------------------------------------- /doc/licensing/vst_id_registration_2.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mzuther/Squeezer/632f2bb96c2e5135d28573b8697ccedbc06aa16c/doc/licensing/vst_id_registration_2.pdf -------------------------------------------------------------------------------- /doc/licensing/vst_id_registration_3.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mzuther/Squeezer/632f2bb96c2e5135d28573b8697ccedbc06aa16c/doc/licensing/vst_id_registration_3.pdf -------------------------------------------------------------------------------- /doc/licensing/vst_id_registration_4.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mzuther/Squeezer/632f2bb96c2e5135d28573b8697ccedbc06aa16c/doc/licensing/vst_id_registration_4.pdf -------------------------------------------------------------------------------- /doc/squeezer.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mzuther/Squeezer/632f2bb96c2e5135d28573b8697ccedbc06aa16c/doc/squeezer.pdf -------------------------------------------------------------------------------- /libraries/juce: -------------------------------------------------------------------------------- 1 | ../../libraries/juce_5.4.7 -------------------------------------------------------------------------------- /libraries/juce_5.4.7.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mzuther/Squeezer/632f2bb96c2e5135d28573b8697ccedbc06aa16c/libraries/juce_5.4.7.zip -------------------------------------------------------------------------------- /libraries/vst2: -------------------------------------------------------------------------------- 1 | ../../libraries/vstsdk_3.6.10 -------------------------------------------------------------------------------- /libraries/vst3: -------------------------------------------------------------------------------- 1 | ../../libraries/vstsdk_3.6.14 -------------------------------------------------------------------------------- /skins/Default/LICENSE: -------------------------------------------------------------------------------- 1 | This skin by Martin Zuther (http://www.mzuther.de/) is licensed under 2 | a Creative Commons Attribution-ShareAlike 4.0 International License 3 | (http://creativecommons.org/licenses/by-sa/4.0/). 4 | 5 | It uses the vector image "green_lemon.svg" by Clker-Free-Vector-Images 6 | (https://pixabay.com/) which is licensed under a CC0 1.0 Universal 7 | License (https://creativecommons.org/publicdomain/zero/1.0/). Thanks! 8 | -------------------------------------------------------------------------------- /skins/Default/backgrounds/background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mzuther/Squeezer/632f2bb96c2e5135d28573b8697ccedbc06aa16c/skins/Default/backgrounds/background.png -------------------------------------------------------------------------------- /skins/Default/buttons/button_about_off.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mzuther/Squeezer/632f2bb96c2e5135d28573b8697ccedbc06aa16c/skins/Default/buttons/button_about_off.png -------------------------------------------------------------------------------- /skins/Default/buttons/button_about_on.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mzuther/Squeezer/632f2bb96c2e5135d28573b8697ccedbc06aa16c/skins/Default/buttons/button_about_on.png -------------------------------------------------------------------------------- /skins/Default/buttons/button_about_over.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mzuther/Squeezer/632f2bb96c2e5135d28573b8697ccedbc06aa16c/skins/Default/buttons/button_about_over.png -------------------------------------------------------------------------------- /skins/Default/buttons/button_auto_makeup_gain_off.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mzuther/Squeezer/632f2bb96c2e5135d28573b8697ccedbc06aa16c/skins/Default/buttons/button_auto_makeup_gain_off.png -------------------------------------------------------------------------------- /skins/Default/buttons/button_auto_makeup_gain_on.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mzuther/Squeezer/632f2bb96c2e5135d28573b8697ccedbc06aa16c/skins/Default/buttons/button_auto_makeup_gain_on.png -------------------------------------------------------------------------------- /skins/Default/buttons/button_auto_makeup_gain_over.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mzuther/Squeezer/632f2bb96c2e5135d28573b8697ccedbc06aa16c/skins/Default/buttons/button_auto_makeup_gain_over.png -------------------------------------------------------------------------------- /skins/Default/buttons/button_bypass_off.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mzuther/Squeezer/632f2bb96c2e5135d28573b8697ccedbc06aa16c/skins/Default/buttons/button_bypass_off.png -------------------------------------------------------------------------------- /skins/Default/buttons/button_bypass_on.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mzuther/Squeezer/632f2bb96c2e5135d28573b8697ccedbc06aa16c/skins/Default/buttons/button_bypass_on.png -------------------------------------------------------------------------------- /skins/Default/buttons/button_bypass_over.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mzuther/Squeezer/632f2bb96c2e5135d28573b8697ccedbc06aa16c/skins/Default/buttons/button_bypass_over.png -------------------------------------------------------------------------------- /skins/Default/buttons/button_curve_linear_off.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mzuther/Squeezer/632f2bb96c2e5135d28573b8697ccedbc06aa16c/skins/Default/buttons/button_curve_linear_off.png -------------------------------------------------------------------------------- /skins/Default/buttons/button_curve_linear_on.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mzuther/Squeezer/632f2bb96c2e5135d28573b8697ccedbc06aa16c/skins/Default/buttons/button_curve_linear_on.png -------------------------------------------------------------------------------- /skins/Default/buttons/button_curve_linear_over.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mzuther/Squeezer/632f2bb96c2e5135d28573b8697ccedbc06aa16c/skins/Default/buttons/button_curve_linear_over.png -------------------------------------------------------------------------------- /skins/Default/buttons/button_curve_smooth_branching_off.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mzuther/Squeezer/632f2bb96c2e5135d28573b8697ccedbc06aa16c/skins/Default/buttons/button_curve_smooth_branching_off.png -------------------------------------------------------------------------------- /skins/Default/buttons/button_curve_smooth_branching_on.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mzuther/Squeezer/632f2bb96c2e5135d28573b8697ccedbc06aa16c/skins/Default/buttons/button_curve_smooth_branching_on.png -------------------------------------------------------------------------------- /skins/Default/buttons/button_curve_smooth_branching_over.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mzuther/Squeezer/632f2bb96c2e5135d28573b8697ccedbc06aa16c/skins/Default/buttons/button_curve_smooth_branching_over.png -------------------------------------------------------------------------------- /skins/Default/buttons/button_curve_smooth_decoupled_off.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mzuther/Squeezer/632f2bb96c2e5135d28573b8697ccedbc06aa16c/skins/Default/buttons/button_curve_smooth_decoupled_off.png -------------------------------------------------------------------------------- /skins/Default/buttons/button_curve_smooth_decoupled_on.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mzuther/Squeezer/632f2bb96c2e5135d28573b8697ccedbc06aa16c/skins/Default/buttons/button_curve_smooth_decoupled_on.png -------------------------------------------------------------------------------- /skins/Default/buttons/button_curve_smooth_decoupled_over.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mzuther/Squeezer/632f2bb96c2e5135d28573b8697ccedbc06aa16c/skins/Default/buttons/button_curve_smooth_decoupled_over.png -------------------------------------------------------------------------------- /skins/Default/buttons/button_design_feedback_off.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mzuther/Squeezer/632f2bb96c2e5135d28573b8697ccedbc06aa16c/skins/Default/buttons/button_design_feedback_off.png -------------------------------------------------------------------------------- /skins/Default/buttons/button_design_feedback_on.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mzuther/Squeezer/632f2bb96c2e5135d28573b8697ccedbc06aa16c/skins/Default/buttons/button_design_feedback_on.png -------------------------------------------------------------------------------- /skins/Default/buttons/button_design_feedback_over.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mzuther/Squeezer/632f2bb96c2e5135d28573b8697ccedbc06aa16c/skins/Default/buttons/button_design_feedback_over.png -------------------------------------------------------------------------------- /skins/Default/buttons/button_gainstage_optical_off.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mzuther/Squeezer/632f2bb96c2e5135d28573b8697ccedbc06aa16c/skins/Default/buttons/button_gainstage_optical_off.png -------------------------------------------------------------------------------- /skins/Default/buttons/button_gainstage_optical_on.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mzuther/Squeezer/632f2bb96c2e5135d28573b8697ccedbc06aa16c/skins/Default/buttons/button_gainstage_optical_on.png -------------------------------------------------------------------------------- /skins/Default/buttons/button_gainstage_optical_over.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mzuther/Squeezer/632f2bb96c2e5135d28573b8697ccedbc06aa16c/skins/Default/buttons/button_gainstage_optical_over.png -------------------------------------------------------------------------------- /skins/Default/buttons/button_knee_hard_off.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mzuther/Squeezer/632f2bb96c2e5135d28573b8697ccedbc06aa16c/skins/Default/buttons/button_knee_hard_off.png -------------------------------------------------------------------------------- /skins/Default/buttons/button_knee_hard_on.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mzuther/Squeezer/632f2bb96c2e5135d28573b8697ccedbc06aa16c/skins/Default/buttons/button_knee_hard_on.png -------------------------------------------------------------------------------- /skins/Default/buttons/button_knee_hard_over.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mzuther/Squeezer/632f2bb96c2e5135d28573b8697ccedbc06aa16c/skins/Default/buttons/button_knee_hard_over.png -------------------------------------------------------------------------------- /skins/Default/buttons/button_knee_medium_off.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mzuther/Squeezer/632f2bb96c2e5135d28573b8697ccedbc06aa16c/skins/Default/buttons/button_knee_medium_off.png -------------------------------------------------------------------------------- /skins/Default/buttons/button_knee_medium_on.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mzuther/Squeezer/632f2bb96c2e5135d28573b8697ccedbc06aa16c/skins/Default/buttons/button_knee_medium_on.png -------------------------------------------------------------------------------- /skins/Default/buttons/button_knee_medium_over.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mzuther/Squeezer/632f2bb96c2e5135d28573b8697ccedbc06aa16c/skins/Default/buttons/button_knee_medium_over.png -------------------------------------------------------------------------------- /skins/Default/buttons/button_knee_soft_off.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mzuther/Squeezer/632f2bb96c2e5135d28573b8697ccedbc06aa16c/skins/Default/buttons/button_knee_soft_off.png -------------------------------------------------------------------------------- /skins/Default/buttons/button_knee_soft_on.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mzuther/Squeezer/632f2bb96c2e5135d28573b8697ccedbc06aa16c/skins/Default/buttons/button_knee_soft_on.png -------------------------------------------------------------------------------- /skins/Default/buttons/button_knee_soft_over.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mzuther/Squeezer/632f2bb96c2e5135d28573b8697ccedbc06aa16c/skins/Default/buttons/button_knee_soft_over.png -------------------------------------------------------------------------------- /skins/Default/buttons/button_reset_off.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mzuther/Squeezer/632f2bb96c2e5135d28573b8697ccedbc06aa16c/skins/Default/buttons/button_reset_off.png -------------------------------------------------------------------------------- /skins/Default/buttons/button_reset_on.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mzuther/Squeezer/632f2bb96c2e5135d28573b8697ccedbc06aa16c/skins/Default/buttons/button_reset_on.png -------------------------------------------------------------------------------- /skins/Default/buttons/button_reset_over.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mzuther/Squeezer/632f2bb96c2e5135d28573b8697ccedbc06aa16c/skins/Default/buttons/button_reset_over.png -------------------------------------------------------------------------------- /skins/Default/buttons/button_rms_window_off.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mzuther/Squeezer/632f2bb96c2e5135d28573b8697ccedbc06aa16c/skins/Default/buttons/button_rms_window_off.png -------------------------------------------------------------------------------- /skins/Default/buttons/button_rms_window_on.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mzuther/Squeezer/632f2bb96c2e5135d28573b8697ccedbc06aa16c/skins/Default/buttons/button_rms_window_on.png -------------------------------------------------------------------------------- /skins/Default/buttons/button_rms_window_over.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mzuther/Squeezer/632f2bb96c2e5135d28573b8697ccedbc06aa16c/skins/Default/buttons/button_rms_window_over.png -------------------------------------------------------------------------------- /skins/Default/buttons/button_settings_off.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mzuther/Squeezer/632f2bb96c2e5135d28573b8697ccedbc06aa16c/skins/Default/buttons/button_settings_off.png -------------------------------------------------------------------------------- /skins/Default/buttons/button_settings_on.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mzuther/Squeezer/632f2bb96c2e5135d28573b8697ccedbc06aa16c/skins/Default/buttons/button_settings_on.png -------------------------------------------------------------------------------- /skins/Default/buttons/button_settings_over.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mzuther/Squeezer/632f2bb96c2e5135d28573b8697ccedbc06aa16c/skins/Default/buttons/button_settings_over.png -------------------------------------------------------------------------------- /skins/Default/buttons/button_sidechain_external_off.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mzuther/Squeezer/632f2bb96c2e5135d28573b8697ccedbc06aa16c/skins/Default/buttons/button_sidechain_external_off.png -------------------------------------------------------------------------------- /skins/Default/buttons/button_sidechain_external_on.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mzuther/Squeezer/632f2bb96c2e5135d28573b8697ccedbc06aa16c/skins/Default/buttons/button_sidechain_external_on.png -------------------------------------------------------------------------------- /skins/Default/buttons/button_sidechain_external_over.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mzuther/Squeezer/632f2bb96c2e5135d28573b8697ccedbc06aa16c/skins/Default/buttons/button_sidechain_external_over.png -------------------------------------------------------------------------------- /skins/Default/buttons/button_sidechain_listen_off.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mzuther/Squeezer/632f2bb96c2e5135d28573b8697ccedbc06aa16c/skins/Default/buttons/button_sidechain_listen_off.png -------------------------------------------------------------------------------- /skins/Default/buttons/button_sidechain_listen_on.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mzuther/Squeezer/632f2bb96c2e5135d28573b8697ccedbc06aa16c/skins/Default/buttons/button_sidechain_listen_on.png -------------------------------------------------------------------------------- /skins/Default/buttons/button_sidechain_listen_over.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mzuther/Squeezer/632f2bb96c2e5135d28573b8697ccedbc06aa16c/skins/Default/buttons/button_sidechain_listen_over.png -------------------------------------------------------------------------------- /skins/Default/buttons/button_skin_off.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mzuther/Squeezer/632f2bb96c2e5135d28573b8697ccedbc06aa16c/skins/Default/buttons/button_skin_off.png -------------------------------------------------------------------------------- /skins/Default/buttons/button_skin_on.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mzuther/Squeezer/632f2bb96c2e5135d28573b8697ccedbc06aa16c/skins/Default/buttons/button_skin_on.png -------------------------------------------------------------------------------- /skins/Default/buttons/button_skin_over.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mzuther/Squeezer/632f2bb96c2e5135d28573b8697ccedbc06aa16c/skins/Default/buttons/button_skin_over.png -------------------------------------------------------------------------------- /skins/Default/labels/label_debug.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mzuther/Squeezer/632f2bb96c2e5135d28573b8697ccedbc06aa16c/skins/Default/labels/label_debug.png -------------------------------------------------------------------------------- /skins/Default/meters/meter_gain_reduction.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mzuther/Squeezer/632f2bb96c2e5135d28573b8697ccedbc06aa16c/skins/Default/meters/meter_gain_reduction.png -------------------------------------------------------------------------------- /skins/Default/meters/meter_input.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mzuther/Squeezer/632f2bb96c2e5135d28573b8697ccedbc06aa16c/skins/Default/meters/meter_input.png -------------------------------------------------------------------------------- /skins/Default/meters/meters_vertical.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mzuther/Squeezer/632f2bb96c2e5135d28573b8697ccedbc06aa16c/skins/Default/meters/meters_vertical.png -------------------------------------------------------------------------------- /skins/Default/sliders/slider_attack.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mzuther/Squeezer/632f2bb96c2e5135d28573b8697ccedbc06aa16c/skins/Default/sliders/slider_attack.png -------------------------------------------------------------------------------- /skins/Default/sliders/slider_hpf.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mzuther/Squeezer/632f2bb96c2e5135d28573b8697ccedbc06aa16c/skins/Default/sliders/slider_hpf.png -------------------------------------------------------------------------------- /skins/Default/sliders/slider_output.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mzuther/Squeezer/632f2bb96c2e5135d28573b8697ccedbc06aa16c/skins/Default/sliders/slider_output.png -------------------------------------------------------------------------------- /skins/Default/sliders/slider_threshold.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mzuther/Squeezer/632f2bb96c2e5135d28573b8697ccedbc06aa16c/skins/Default/sliders/slider_threshold.png -------------------------------------------------------------------------------- /validation/trim_test/Recorded/Landkarte 2020 Drums (Squeezer Test).flac: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mzuther/Squeezer/632f2bb96c2e5135d28573b8697ccedbc06aa16c/validation/trim_test/Recorded/Landkarte 2020 Drums (Squeezer Test).flac -------------------------------------------------------------------------------- /validation/trim_test/Recorded/Piano.flac: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mzuther/Squeezer/632f2bb96c2e5135d28573b8697ccedbc06aa16c/validation/trim_test/Recorded/Piano.flac --------------------------------------------------------------------------------