├── .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
--------------------------------------------------------------------------------