├── .circleci ├── config.yml ├── disable_all_plugins.sh ├── enable_all_plugins.sh ├── presets │ ├── sie_preset_disable_all.json │ ├── sie_preset_enable_all.json │ ├── soe_preset_disable_all.json │ └── soe_preset_enable_all.json └── test.sh ├── .clang-format ├── .clang-tidy ├── .github ├── FUNDING.yml ├── ISSUE_TEMPLATE │ └── bug_report.yml ├── dependabot.yaml └── workflows │ ├── CI.yaml │ ├── artifact-pr-comment.yaml │ ├── deploy-help.yaml │ ├── flatpak-update.yaml │ └── translation-templates.yaml ├── .gitignore ├── CHANGELOG.md ├── COMMUNITY_PRESETS_GUIDELINES.md ├── LICENSE ├── PKGBUILD ├── PKGBUILD_AUR ├── README.md ├── data ├── com.github.wwmm.easyeffects-symbolic.svg ├── com.github.wwmm.easyeffects.Devel.svg ├── com.github.wwmm.easyeffects.Source.svg ├── com.github.wwmm.easyeffects.desktop.in ├── com.github.wwmm.easyeffects.metainfo.xml.in ├── com.github.wwmm.easyeffects.service.in ├── com.github.wwmm.easyeffects.svg ├── easyeffects.gresource.xml ├── icons │ └── scalable │ │ └── emblems │ │ ├── credits.txt │ │ ├── ee-applications-multimedia-symbolic.svg │ │ ├── ee-arrow-down-symbolic.svg │ │ ├── ee-arrows-right-symbolic.svg │ │ ├── ee-bypass-symbolic.svg │ │ ├── ee-double-vertical-lines-symbolic.svg │ │ ├── ee-drag-handle-symbolic.svg │ │ └── ee-spectrum-symbolic.svg ├── meson.build ├── presets │ ├── gstreamer_ballad.json │ ├── gstreamer_classic.json │ ├── gstreamer_club.json │ ├── gstreamer_dance.json │ ├── gstreamer_more_bass.json │ ├── gstreamer_more_bass_and_treble.json │ ├── gstreamer_party.json │ ├── gstreamer_pop.json │ ├── gstreamer_reggae.json │ ├── gstreamer_rock.json │ ├── gstreamer_ska.json │ ├── gstreamer_soft.json │ ├── gstreamer_techno.json │ └── ziyad_perfecteq.json ├── schemas │ ├── com.github.wwmm.easyeffects.autogain.gschema.xml │ ├── com.github.wwmm.easyeffects.bassenhancer.gschema.xml │ ├── com.github.wwmm.easyeffects.bassloudness.gschema.xml │ ├── com.github.wwmm.easyeffects.compressor.gschema.xml │ ├── com.github.wwmm.easyeffects.convolver.gschema.xml │ ├── com.github.wwmm.easyeffects.crossfeed.gschema.xml │ ├── com.github.wwmm.easyeffects.crystalizer.gschema.xml │ ├── com.github.wwmm.easyeffects.deepfilternet.gschema.xml │ ├── com.github.wwmm.easyeffects.deesser.gschema.xml │ ├── com.github.wwmm.easyeffects.delay.gschema.xml │ ├── com.github.wwmm.easyeffects.echo_canceller.gschema.xml │ ├── com.github.wwmm.easyeffects.equalizer.channel.gschema.xml │ ├── com.github.wwmm.easyeffects.equalizer.gschema.xml │ ├── com.github.wwmm.easyeffects.exciter.gschema.xml │ ├── com.github.wwmm.easyeffects.expander.gschema.xml │ ├── com.github.wwmm.easyeffects.filter.gschema.xml │ ├── com.github.wwmm.easyeffects.gate.gschema.xml │ ├── com.github.wwmm.easyeffects.gschema.xml │ ├── com.github.wwmm.easyeffects.levelmeter.gschema.xml │ ├── com.github.wwmm.easyeffects.libportal.gschema.xml │ ├── com.github.wwmm.easyeffects.limiter.gschema.xml │ ├── com.github.wwmm.easyeffects.loudness.gschema.xml │ ├── com.github.wwmm.easyeffects.maximizer.gschema.xml │ ├── com.github.wwmm.easyeffects.multibandcompressor.gschema.xml │ ├── com.github.wwmm.easyeffects.multibandgate.gschema.xml │ ├── com.github.wwmm.easyeffects.outputlevel.gschema.xml │ ├── com.github.wwmm.easyeffects.pitch.gschema.xml │ ├── com.github.wwmm.easyeffects.reverb.gschema.xml │ ├── com.github.wwmm.easyeffects.rnnoise.gschema.xml │ ├── com.github.wwmm.easyeffects.spectrum.gschema.xml │ ├── com.github.wwmm.easyeffects.speex.gschema.xml │ ├── com.github.wwmm.easyeffects.stereotools.gschema.xml │ ├── com.github.wwmm.easyeffects.streaminputs.gschema.xml │ └── com.github.wwmm.easyeffects.streamoutputs.gschema.xml └── ui │ ├── app_info.ui │ ├── application_window.ui │ ├── apps_box.ui │ ├── autogain.ui │ ├── autoload_row.ui │ ├── bass_enhancer.ui │ ├── bass_loudness.ui │ ├── blocklist_menu.ui │ ├── chart.ui │ ├── compressor.ui │ ├── convolver.ui │ ├── convolver_menu_combine.ui │ ├── convolver_menu_impulses.ui │ ├── crossfeed.ui │ ├── crystalizer.ui │ ├── crystalizer_band.ui │ ├── custom.css │ ├── deepfilternet.ui │ ├── deesser.ui │ ├── delay.ui │ ├── echo_canceller.ui │ ├── effects_box.ui │ ├── equalizer.ui │ ├── equalizer_band.ui │ ├── exciter.ui │ ├── expander.ui │ ├── factory_clients_listview.ui │ ├── factory_input_device_dropdown.ui │ ├── factory_modules_listview.ui │ ├── factory_node_dropdown.ui │ ├── factory_output_device_dropdown.ui │ ├── factory_presets_dropdown.ui │ ├── factory_rnnoise_listview.ui │ ├── filter.ui │ ├── gate.ui │ ├── level_meter.ui │ ├── limiter.ui │ ├── loudness.ui │ ├── maximizer.ui │ ├── multiband_compressor.ui │ ├── multiband_compressor_band.ui │ ├── multiband_gate.ui │ ├── multiband_gate_band.ui │ ├── pipe_manager_box.ui │ ├── pitch.ui │ ├── plugin_row.ui │ ├── plugins_box.ui │ ├── plugins_menu.ui │ ├── preferences_general.ui │ ├── preferences_spectrum.ui │ ├── preferences_window.ui │ ├── preset_community_row.ui │ ├── preset_row.ui │ ├── presets_menu.ui │ ├── reverb.ui │ ├── rnnoise.ui │ ├── shortcuts.ui │ ├── speex.ui │ └── stereo_tools.ui ├── debian ├── changelog ├── control ├── copyright ├── rules ├── source │ └── format └── watch ├── easyeffects.code-workspace ├── help ├── C │ ├── advancedinfo.page │ ├── autogain.page │ ├── bassenhancer.page │ ├── bassloudness.page │ ├── blocklist.page │ ├── compressor.page │ ├── convolver.page │ ├── crossfeed.page │ ├── crystalizer.page │ ├── deepfilternet.page │ ├── deesser.page │ ├── delay.page │ ├── echocanceller.page │ ├── effectsorder.page │ ├── enableapp.page │ ├── equalizer.page │ ├── exciter.page │ ├── filter.page │ ├── gate.page │ ├── general.page │ ├── guide_1.page │ ├── index.page │ ├── limiter.page │ ├── loudness.page │ ├── maximizer.page │ ├── multibandcompressor.page │ ├── multibandgate.page │ ├── pipewire.page │ ├── pitch.page │ ├── reverb.page │ ├── rnnoise.page │ ├── saturated.page │ ├── settingsmenu.page │ ├── spectrum.page │ ├── speex.page │ ├── stereotools.page │ ├── testsignals.page │ └── userpresets.page └── meson.build ├── images ├── appdata-screenshot-01.png ├── appdata-screenshot-02.png ├── appdata-screenshot-03.png ├── appdata-screenshot-04.png ├── appdata-screenshot-05.png ├── convolver.png ├── easyeffects-dark-screenshot-1.png ├── easyeffects-dark-screenshot-2.png ├── easyeffects-dark-screenshot-3.png ├── easyeffects-light-screenshot-1.png ├── easyeffects-light-screenshot-2.png ├── easyeffects-light-screenshot-3.png ├── easyeffects_players.png ├── easyeffects_plugins.png └── master_screenshot_test.png ├── include ├── app_info.hpp ├── application.hpp ├── application_ui.hpp ├── apps_box.hpp ├── autogain.hpp ├── autogain_preset.hpp ├── autogain_ui.hpp ├── bass_enhancer.hpp ├── bass_enhancer_preset.hpp ├── bass_enhancer_ui.hpp ├── bass_loudness.hpp ├── bass_loudness_preset.hpp ├── bass_loudness_ui.hpp ├── blocklist_menu.hpp ├── chart.hpp ├── client_info_holder.hpp ├── compressor.hpp ├── compressor_preset.hpp ├── compressor_ui.hpp ├── convolver.hpp ├── convolver_menu_combine.hpp ├── convolver_menu_impulses.hpp ├── convolver_preset.hpp ├── convolver_ui.hpp ├── convolver_ui_common.hpp ├── crossfeed.hpp ├── crossfeed_preset.hpp ├── crossfeed_ui.hpp ├── crystalizer.hpp ├── crystalizer_preset.hpp ├── crystalizer_ui.hpp ├── deepfilternet.hpp ├── deepfilternet_preset.hpp ├── deepfilternet_ui.hpp ├── deesser.hpp ├── deesser_preset.hpp ├── deesser_ui.hpp ├── delay.hpp ├── delay_preset.hpp ├── delay_ui.hpp ├── echo_canceller.hpp ├── echo_canceller_preset.hpp ├── echo_canceller_ui.hpp ├── effects_base.hpp ├── effects_box.hpp ├── equalizer.hpp ├── equalizer_band_box.hpp ├── equalizer_preset.hpp ├── equalizer_ui.hpp ├── exciter.hpp ├── exciter_preset.hpp ├── exciter_ui.hpp ├── expander.hpp ├── expander_preset.hpp ├── expander_ui.hpp ├── filter.hpp ├── filter_preset.hpp ├── filter_ui.hpp ├── fir_filter_bandpass.hpp ├── fir_filter_base.hpp ├── fir_filter_highpass.hpp ├── fir_filter_lowpass.hpp ├── gate.hpp ├── gate_preset.hpp ├── gate_ui.hpp ├── ladspa_wrapper.hpp ├── level_meter.hpp ├── level_meter_preset.hpp ├── level_meter_ui.hpp ├── libportal.hpp ├── limiter.hpp ├── limiter_preset.hpp ├── limiter_ui.hpp ├── loudness.hpp ├── loudness_preset.hpp ├── loudness_ui.hpp ├── lv2_wrapper.hpp ├── maximizer.hpp ├── maximizer_preset.hpp ├── maximizer_ui.hpp ├── module_info_holder.hpp ├── multiband_compressor.hpp ├── multiband_compressor_band_box.hpp ├── multiband_compressor_preset.hpp ├── multiband_compressor_ui.hpp ├── multiband_gate.hpp ├── multiband_gate_band_box.hpp ├── multiband_gate_preset.hpp ├── multiband_gate_ui.hpp ├── node_info_holder.hpp ├── output_level.hpp ├── pipe_manager.hpp ├── pipe_manager_box.hpp ├── pipe_objects.hpp ├── pipeline_type.hpp ├── pitch.hpp ├── pitch_preset.hpp ├── pitch_ui.hpp ├── plugin_base.hpp ├── plugin_preset_base.hpp ├── plugins_box.hpp ├── plugins_menu.hpp ├── preferences_general.hpp ├── preferences_spectrum.hpp ├── preferences_window.hpp ├── preset_type.hpp ├── presets_autoloading_holder.hpp ├── presets_manager.hpp ├── presets_menu.hpp ├── resampler.hpp ├── reverb.hpp ├── reverb_preset.hpp ├── reverb_ui.hpp ├── rnnoise.hpp ├── rnnoise_preset.hpp ├── rnnoise_ui.hpp ├── spectrum.hpp ├── speex.hpp ├── speex_preset.hpp ├── speex_ui.hpp ├── stereo_tools.hpp ├── stereo_tools_preset.hpp ├── stereo_tools_ui.hpp ├── stream_input_effects.hpp ├── stream_output_effects.hpp ├── string_literal_wrapper.hpp ├── tags_app.hpp ├── tags_equalizer.hpp ├── tags_multiband_compressor.hpp ├── tags_multiband_gate.hpp ├── tags_pipewire.hpp ├── tags_plugin_name.hpp ├── tags_resources.hpp ├── tags_schema.hpp ├── test_signals.hpp ├── ui_helpers.hpp └── util.hpp ├── meson.build ├── meson_options.txt ├── po ├── LINGUAS ├── POTFILES.in ├── af.po ├── ar.po ├── bg.po ├── ca.po ├── cs.po ├── da.po ├── de.po ├── easyeffects.pot ├── es.po ├── es_CO.po ├── es_MX.po ├── es_VE.po ├── eu.po ├── fr.po ├── ga.po ├── gl.po ├── hr.po ├── hu.po ├── id_ID.po ├── it_IT.po ├── ja.po ├── ka.po ├── km.po ├── ko.po ├── meson.build ├── nb_NO.po ├── news │ ├── LINGUAS │ ├── POTFILES.in │ ├── af.po │ ├── ar.po │ ├── cs.po │ ├── da.po │ ├── de.po │ ├── easyeffects-news.pot │ ├── es.po │ ├── es_CO.po │ ├── es_MX.po │ ├── es_VE.po │ ├── eu.po │ ├── fi.po │ ├── fr_FR.po │ ├── ga.po │ ├── gl.po │ ├── hi.po │ ├── hr.po │ ├── hu.po │ ├── id_ID.po │ ├── it_IT.po │ ├── ja.po │ ├── km.po │ ├── ko.po │ ├── meson.build │ ├── nb_NO.po │ ├── nl.po │ ├── nn.po │ ├── pl.po │ ├── pt.po │ ├── pt_BR.po │ ├── ro.po │ ├── ru.po │ ├── sk.po │ ├── sv.po │ ├── ta.po │ ├── th.po │ ├── tr.po │ ├── uk.po │ ├── zh_CN.po │ └── zh_Hant.po ├── nl.po ├── nn.po ├── pl.po ├── pt.po ├── pt_BR.po ├── ro.po ├── ru.po ├── sk.po ├── sv.po ├── ta.po ├── th.po ├── tr.po ├── uk.po ├── zh_CN.po └── zh_Hant.po ├── src ├── app_info.cpp ├── application.cpp ├── application_ui.cpp ├── apps_box.cpp ├── autogain.cpp ├── autogain_preset.cpp ├── autogain_ui.cpp ├── bass_enhancer.cpp ├── bass_enhancer_preset.cpp ├── bass_enhancer_ui.cpp ├── bass_loudness.cpp ├── bass_loudness_preset.cpp ├── bass_loudness_ui.cpp ├── blocklist_menu.cpp ├── chart.cpp ├── client_info_holder.cpp ├── compressor.cpp ├── compressor_preset.cpp ├── compressor_ui.cpp ├── convolver.cpp ├── convolver_menu_combine.cpp ├── convolver_menu_impulses.cpp ├── convolver_preset.cpp ├── convolver_ui.cpp ├── convolver_ui_common.cpp ├── crossfeed.cpp ├── crossfeed_preset.cpp ├── crossfeed_ui.cpp ├── crystalizer.cpp ├── crystalizer_preset.cpp ├── crystalizer_ui.cpp ├── deepfilternet.cpp ├── deepfilternet_preset.cpp ├── deepfilternet_ui.cpp ├── deesser.cpp ├── deesser_preset.cpp ├── deesser_ui.cpp ├── delay.cpp ├── delay_preset.cpp ├── delay_ui.cpp ├── easyeffects.cpp ├── echo_canceller.cpp ├── echo_canceller_preset.cpp ├── echo_canceller_ui.cpp ├── effects_base.cpp ├── effects_box.cpp ├── equalizer.cpp ├── equalizer_band_box.cpp ├── equalizer_preset.cpp ├── equalizer_ui.cpp ├── exciter.cpp ├── exciter_preset.cpp ├── exciter_ui.cpp ├── expander.cpp ├── expander_preset.cpp ├── expander_ui.cpp ├── filter.cpp ├── filter_preset.cpp ├── filter_ui.cpp ├── fir_filter_bandpass.cpp ├── fir_filter_base.cpp ├── fir_filter_highpass.cpp ├── fir_filter_lowpass.cpp ├── gate.cpp ├── gate_preset.cpp ├── gate_ui.cpp ├── ladspa_wrapper.cpp ├── level_meter.cpp ├── level_meter_preset.cpp ├── level_meter_ui.cpp ├── libportal.cpp ├── limiter.cpp ├── limiter_preset.cpp ├── limiter_ui.cpp ├── loudness.cpp ├── loudness_preset.cpp ├── loudness_ui.cpp ├── lv2_wrapper.cpp ├── maximizer.cpp ├── maximizer_preset.cpp ├── maximizer_ui.cpp ├── meson.build ├── module_info_holder.cpp ├── multiband_compressor.cpp ├── multiband_compressor_band_box.cpp ├── multiband_compressor_preset.cpp ├── multiband_compressor_ui.cpp ├── multiband_gate.cpp ├── multiband_gate_band_box.cpp ├── multiband_gate_preset.cpp ├── multiband_gate_ui.cpp ├── node_info_holder.cpp ├── output_level.cpp ├── pipe_manager.cpp ├── pipe_manager_box.cpp ├── pitch.cpp ├── pitch_preset.cpp ├── pitch_ui.cpp ├── plugin_base.cpp ├── plugin_preset_base.cpp ├── plugins_box.cpp ├── plugins_menu.cpp ├── preferences_general.cpp ├── preferences_spectrum.cpp ├── preferences_window.cpp ├── presets_autoloading_holder.cpp ├── presets_manager.cpp ├── presets_menu.cpp ├── resampler.cpp ├── reverb.cpp ├── reverb_preset.cpp ├── reverb_ui.cpp ├── rnnoise.cpp ├── rnnoise_preset.cpp ├── rnnoise_ui.cpp ├── spectrum.cpp ├── speex.cpp ├── speex_preset.cpp ├── speex_ui.cpp ├── stereo_tools.cpp ├── stereo_tools_preset.cpp ├── stereo_tools_ui.cpp ├── stream_input_effects.cpp ├── stream_output_effects.cpp ├── tags_plugin_name.cpp ├── test_signals.cpp ├── ui_helpers.cpp └── util.cpp └── util ├── NEWS.yaml ├── autobuild.sh ├── changes_since_last_release.sh ├── clang-tidy.sh ├── crystalizer.py ├── environmental_variables.sh ├── flatpak ├── com.github.wwmm.easyeffects.Devel.json ├── easyeffects-modules.json ├── patch │ ├── bs2b │ │ └── 001-fix-automake-dist-lzma.patch │ └── zita-convolver │ │ └── 0001-Fix-makefile.patch └── shared-modules │ └── linux-audio │ ├── fftw3f.json │ ├── ladspa.json │ ├── lilv.json │ └── lv2.json ├── news-release-template.yaml ├── run-clang-tidy.py ├── sanitizer.supp ├── sanitizer.txt ├── test.wav ├── update-release-files.sh ├── update_translation_templates.sh └── valgrind.txt /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | github: wwmm 2 | liberapay: wwmm 3 | patreon: wellingtonwallace 4 | custom: https://www.paypal.com/donate?hosted_button_id=RK723F4EKH2UE 5 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/bug_report.yml: -------------------------------------------------------------------------------- 1 | name: Bug Report 2 | description: Report an EasyEffects bug 3 | body: 4 | - type: input 5 | attributes: 6 | label: EasyEffects Version 7 | placeholder: EasyEffects Settings > About EasyEffects 8 | validations: 9 | required: true 10 | - type: dropdown 11 | attributes: 12 | label: What package are you using? 13 | options: 14 | - Arch (easyeffects) 15 | - AUR (easyeffects-git) 16 | - Fedora 17 | - Flatpak (Flathub) 18 | - Flatpak Nightly (Flathub-beta) 19 | - Gentoo 20 | - NixOS 21 | - openSUSE 22 | - Other (specify below) 23 | validations: 24 | required: true 25 | - type: input 26 | attributes: 27 | label: Distribution 28 | placeholder: "e.g. Arch Linux, Fedora 35 or Ubuntu 20.04" 29 | validations: 30 | required: true 31 | - type: textarea 32 | attributes: 33 | label: Describe the bug 34 | description: A clear description of the bug you've experienced. 35 | validations: 36 | required: true 37 | - type: textarea 38 | attributes: 39 | label: Expected Behavior 40 | description: A clear and concise description of what you expected to happen. 41 | - type: textarea 42 | attributes: 43 | label: Debug Log 44 | description: If relevant, please add a log by launching with `G_MESSAGES_DEBUG=easyeffects` 45 | value: "<details><summary>Debug Log</summary><br/> 46 | 47 | 48 | ``` 49 | 50 | Paste your log here 51 | 52 | ``` 53 | 54 | </details>" 55 | - type: textarea 56 | attributes: 57 | label: Additional Information 58 | description: If your problem needs further explanation please add more information here. See https://github.com/wwmm/easyeffects/wiki/Reporting-Bugs for suggestions on what you might want to include. 59 | -------------------------------------------------------------------------------- /.github/dependabot.yaml: -------------------------------------------------------------------------------- 1 | version: 2 2 | updates: 3 | - package-ecosystem: "github-actions" 4 | directory: "/" 5 | schedule: 6 | interval: "daily" 7 | -------------------------------------------------------------------------------- /.github/workflows/deploy-help.yaml: -------------------------------------------------------------------------------- 1 | name: Deploy help 2 | 3 | on: 4 | # Runs on every push to a tag not containing a / 5 | push: 6 | tags: 7 | - "*" 8 | # Allows you to run this workflow manually from the Actions tab 9 | workflow_dispatch: 10 | 11 | permissions: 12 | contents: read 13 | pages: write 14 | id-token: write 15 | 16 | # Allow only one concurrent deployment, skipping runs queued between the run in-progress and latest queued. 17 | # However, do NOT cancel in-progress runs as we want to allow these production deployments to complete. 18 | concurrency: 19 | group: "pages" 20 | cancel-in-progress: false 21 | 22 | jobs: 23 | deploy-help: 24 | name: Deploy help 25 | environment: 26 | name: github-pages 27 | url: ${{ steps.deployment.outputs.page_url }} 28 | runs-on: ubuntu-22.04 29 | steps: 30 | - name: Checkout 31 | uses: actions/checkout@v4.2.2 32 | 33 | - name: Setup Pages 34 | uses: actions/configure-pages@v5.0.0 35 | 36 | - name: Build html help pages 37 | run: | 38 | sudo apt-get update 39 | sudo apt-get upgrade -y 40 | sudo apt-get install -y yelp-tools 41 | mkdir help/dist-html 42 | yelp-build html -o help/dist-html help/C 43 | 44 | - name: Upload artifact 45 | uses: actions/upload-pages-artifact@v3.0.1 46 | with: 47 | path: help/dist-html 48 | 49 | - name: Deploy to GitHub Pages 50 | id: deployment 51 | uses: actions/deploy-pages@v4.0.5 52 | -------------------------------------------------------------------------------- /.github/workflows/flatpak-update.yaml: -------------------------------------------------------------------------------- 1 | name: Flatpak dependency updates 2 | on: 3 | schedule: # for scheduling to work this file must be in the default branch 4 | - cron: "0 0 * * *" # run every day 5 | workflow_dispatch: # can be manually dispatched under GitHub's "Actions" tab 6 | 7 | jobs: 8 | flatpak-external-data-checker: 9 | runs-on: ubuntu-22.04 10 | 11 | steps: 12 | - uses: actions/checkout@v4.2.2 13 | with: 14 | # we can't push changes to a fork via a shallow update, we need to clone the full repo 15 | fetch-depth: 0 16 | # by default when persisting credentials the local git config will use the workflow provided GITHUB_TOKEN, not our own GITHUB_TOKEN env var for the container 17 | # we must not use the provided GITHUB_TOKEN, as it will fail to push to the fork since the provided GITHUB_TOKEN is only for the repository where the workflow is running 18 | persist-credentials: false 19 | 20 | - uses: docker://ghcr.io/flathub/flatpak-external-data-checker:latest 21 | env: 22 | GIT_AUTHOR_NAME: EasyEffects Bot 23 | GIT_COMMITTER_NAME: EasyEffects Bot 24 | # email sets "EasyEffects Bot" user as commit author 25 | GIT_AUTHOR_EMAIL: 110548574+easyeffects-bot@users.noreply.github.com 26 | GIT_COMMITTER_EMAIL: 110548574+easyeffects-bot@users.noreply.github.com 27 | EMAIL: 110548574+easyeffects-bot@users.noreply.github.com 28 | GITHUB_TOKEN: ${{ secrets.EASYEFFECTS_BOT }} 29 | with: 30 | entrypoint: /bin/bash 31 | args: -c "git config --global --add safe.directory /github/workspace && cd /github/workspace && /app/flatpak-external-data-checker --update --always-fork util/flatpak/com.github.wwmm.easyeffects.Devel.json" 32 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | __pycache__ 2 | _build 3 | build 4 | build-dir 5 | locale 6 | gschemas.compiled 7 | obj-*-linux-gnu 8 | .vscode 9 | node_modules 10 | package-lock.json 11 | compile_commands.json 12 | .clangd 13 | .cache 14 | 15 | # Compiled python modules. 16 | *.pyc 17 | 18 | # binary language files 19 | *.mo 20 | 21 | # patches 22 | *.patch 23 | 24 | \.python-version 25 | 26 | # exclude debian building logs and other junk 27 | debian/* 28 | !debian/changelog 29 | !debian/changelog.tpl 30 | !debian/compat 31 | !debian/control 32 | !debian/copyright 33 | !debian/docs 34 | !debian/pycompat 35 | !debian/rules 36 | !debian/source/format 37 | !debian/build-ppa.sh 38 | !debian/*.install 39 | !debian/*lintian-overrides 40 | !debian/watch 41 | !debian/patches 42 | !debian/patches/*.patch 43 | !debian/source 44 | 45 | /build-ppa.sh 46 | 47 | # Dolphin file manager creates the file .directory to save some folder-specific settings 48 | *.directory 49 | 50 | *-build-deps*.deb 51 | 52 | .build-tools.cson 53 | 54 | ppastats 55 | .autobuild 56 | 57 | # exclude flatpak build directories 58 | build-dir* 59 | util/flatpak/repo 60 | .flatpak 61 | .flatpak-builder 62 | 63 | # explictly include flatpak patch/shared-modules directory which includes usually ignored patch files 64 | !util/flatpak/patch/**/*.patch 65 | !util/flatpak/shared-modules/linux-audio/**/*.patch 66 | -------------------------------------------------------------------------------- /PKGBUILD_AUR: -------------------------------------------------------------------------------- 1 | # Maintainer: robertfoster 2 | # Contributor: Bleuzen <supgesu@gmail.com> 3 | # Contributor: Filipe Laíns (FFY00) <lains@archlinux.org> 4 | # Contributor: Wellington <wellingtonwallace@gmail.com> 5 | 6 | pkgname=easyeffects-git 7 | pkgver=7.0.4.r136.gce892ece 8 | pkgrel=1 9 | pkgdesc='Audio Effects for Pipewire applications' 10 | arch=(x86_64 i686 arm armv6h armv7h aarch64) 11 | url='https://github.com/wwmm/easyeffects' 12 | license=('GPL3') 13 | depends=('fftw' 'fmt' 'gsl' 'gtk4' 'libadwaita' 'libbs2b' 'libebur128' 'libsamplerate' 'libsigc++-3.0' 'libsndfile' 14 | 'lilv' 'lv2' 'nlohmann-json' 'pipewire' 'rnnoise' 'soundtouch' 'speexdsp' 'tbb' 'zita-convolver') 15 | makedepends=('appstream-glib' 'git' 'itstool' 'meson' 'ladspa') 16 | optdepends=('calf: limiter, exciter, bass enhancer and others' 17 | 'lsp-plugins: equalizer, compressor, delay, loudness' 18 | 'zam-plugins: maximizer' 19 | 'mda.lv2: bass loudness' 20 | 'yelp: in-app help' 21 | 'libdeep_filter_ladspa: noise remover') 22 | conflicts=("${pkgname%%-git}") 23 | provides=("${pkgname%%-git}") 24 | source=("${pkgname%%-git}::git+${url}") 25 | sha512sums=('SKIP') 26 | 27 | pkgver() { 28 | cd "${pkgname%%-git}" 29 | printf "%s" "$(git describe --long | sed 's/^v//;s/\([^-]*-g\)/r\1/;s/-/./g')" 30 | } 31 | 32 | build() { 33 | arch-meson "${pkgname%%-git}" build 34 | meson compile -C build 35 | } 36 | 37 | package() { 38 | DESTDIR="${pkgdir}" meson install -C build 39 | } 40 | -------------------------------------------------------------------------------- /data/com.github.wwmm.easyeffects-symbolic.svg: -------------------------------------------------------------------------------- 1 | <svg viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> 2 | <g class="ColorScheme-Text" fill="currentColor"> 3 | <rect id="rect1" x="7.5" y="2" width="1" height="12" ry=".5"/> 4 | <rect id="rect2" x="12" y="4" width="1" height="8" ry=".5"/> 5 | <rect id="rect3" x="3" y="4" width="1" height="8" ry=".5"/> 6 | <circle id="circle1" cx="8" cy="5" r="1.5"/> 7 | <circle id="circle2" cx="12.5" cy="9" r="1.5"/> 8 | <circle id="circle3" cx="3.5" cy="7.5" r="1.5"/> 9 | </g> 10 | <style type="text/css" id="current-color-scheme"> 11 | .ColorScheme-Text { 12 | color: #232629; 13 | } 14 | </style> 15 | </svg> 16 | -------------------------------------------------------------------------------- /data/com.github.wwmm.easyeffects.desktop.in: -------------------------------------------------------------------------------- 1 | [Desktop Entry] 2 | # Translators: This is a variable for the application name, don't translate! 3 | Name=@APP_NAME@ 4 | GenericName=Equalizer, Compressor and Other Audio Effects 5 | Comment=Audio Effects for PipeWire Applications 6 | Keywords=limiter;compressor;reverberation;equalizer;autovolume; 7 | Categories=GTK;AudioVideo;Audio; 8 | Exec=easyeffects 9 | Icon=@APP_ID@ 10 | StartupNotify=true 11 | DBusActivatable=true 12 | X-GNOME-UsesNotifications=true 13 | Terminal=false 14 | Type=Application 15 | -------------------------------------------------------------------------------- /data/com.github.wwmm.easyeffects.service.in: -------------------------------------------------------------------------------- 1 | [D-BUS Service] 2 | Name=@APP_ID@ 3 | Exec=@BIN_DIR@/easyeffects --gapplication-service 4 | -------------------------------------------------------------------------------- /data/icons/scalable/emblems/credits.txt: -------------------------------------------------------------------------------- 1 | - Icons I have made: 2 | 3 | ee-spectrum-symbolic 4 | 5 | - Icons I did not make: 6 | 7 | ee-square-symbolic is the icon "media-playback-stop-symbolic" from the Adwaita package 8 | ee-plugins-symbolic is the icon "application-x-addon-symbolic" from the Adwaita package 9 | ee-drag-handle-symbolic is the icon "list-drag-handle-symbolic" from the Adwaita package 10 | ee-arrows-right-symbolic is the icon "media-playlist-consecutive-symbolic" from the Adwaita package 11 | ee-bypass-symbolic is the icon "system-log-out-symbolic" from the Adwaita package 12 | ee-applications-multimedia-symbolic is the icon "applications-multimedia-symbolic" from the Adwaita package 13 | ee-arrow-down-symbolic is made by SVG Repo from https://www.svgrepo.com/svg/85713/arrow-down (CC0 license) 14 | ee-double-vertical-lines-symbolic.svg is made by SVG Repo from https://www.svgrepo.com/svg/175958/parallel-lines (CC0 license) 15 | -------------------------------------------------------------------------------- /data/icons/scalable/emblems/ee-applications-multimedia-symbolic.svg: -------------------------------------------------------------------------------- 1 | <svg height="15.996094" viewBox="0 0 15.972656 15.996094" width="15.972656" xmlns="http://www.w3.org/2000/svg"><path d="m 1.96875 -0.00390625 s -0.96875 1.00000025 -0.96875 2.00000025 v 12 c 0 1.007812 -1 2 -1 2 h 1 s 0.421875 -0.425782 0.71875 -1 h 1 c -0.296875 0.574218 -0.71875 1 -0.71875 1 h 1 s 1 -1.019532 1 -2 v -2 h 1 v -1 h -1 v -5 h 8 v 1 h 3 v -5 c 0 -1 0.96875 -2.00000025 0.96875 -2.00000025 h -3 s -0.96875 1.00000025 -0.96875 2.00000025 v 3 h -8 v -3 c 0 -1 0.96875 -2.00000025 0.96875 -2.00000025 z m 0.3125 1.00000025 h 1 c -0.152344 0.304687 -0.28125 0.652344 -0.28125 1 h -1 c 0 -0.347656 0.128906 -0.695313 0.28125 -1 z m 11 0 h 1 c -0.152344 0.304687 -0.28125 0.652344 -0.28125 1 h -1 c 0 -0.347656 0.128906 -0.695313 0.28125 -1 z m -11.28125 2 h 1 v 1 h -1 z m 11 0 h 1 v 1 h -1 z m -11 2 h 1 v 1 h -1 z m 11 0 h 1 v 1 h -1 z m -11 2 h 1 v 1 h -1 z m 7 1 v 4.28125 c -0.292969 -0.171875 -0.636719 -0.28125 -1 -0.28125 c -1.105469 0 -2 0.894531 -2 2 c 0 1.105468 0.894531 2 2 2 s 2 -0.894532 2 -2 v -5 h 4 v 3.28125 c -0.292969 -0.171875 -0.636719 -0.28125 -1 -0.28125 c -1.105469 0 -2 0.894531 -2 2 c 0 1.105468 0.894531 2 2 2 s 2 -0.894532 2 -2 v -6 z m -7 1 h 1 v 1 h -1 z m 0 2 h 1 v 1 h -1 z m 0 2 h 1 v 1 h -1 z m 0 0" fill="#2e3436"/></svg> 2 | -------------------------------------------------------------------------------- /data/icons/scalable/emblems/ee-arrow-down-symbolic.svg: -------------------------------------------------------------------------------- 1 | <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 466.678 466.678"><path d="M411.631,240.58L240.538,463.132c-1.714,2.234-4.386,3.546-7.196,3.546c-2.825,0-5.482-1.312-7.196-3.546L55.038,240.58 c-1.253-1.638-1.882-3.582-1.882-5.539c0-1.921,0.605-3.848,1.835-5.467c2.444-3.257,6.783-4.472,10.578-2.979l113.3,44.757 L178.856,9.079C178.868,4.061,182.923,0,187.947,0h90.774c5.024,0,9.079,4.061,9.091,9.079l-0.012,262.273l113.298-44.763 c3.8-1.492,8.139-0.278,10.592,2.985C414.149,232.837,414.138,237.341,411.631,240.58z" fill="#2e3436"/></svg> 2 | -------------------------------------------------------------------------------- /data/icons/scalable/emblems/ee-arrows-right-symbolic.svg: -------------------------------------------------------------------------------- 1 | <svg height="16px" viewBox="0 0 16 16" width="16px" xmlns="http://www.w3.org/2000/svg"><path d="m 12 1 v 2 h -12 v 2 h 12 v 2 h 1 v -0.007812 c 0.265625 0.003906 0.519531 -0.101563 0.707031 -0.285157 l 2 -2 c 0.390625 -0.390625 0.390625 -1.023437 0 -1.414062 l -2 -2 c -0.1875 -0.183594 -0.441406 -0.289063 -0.707031 -0.285157 v -0.007812 z m 0 8 v 2 h -12 v 2 h 12 v 2 h 1 v -0.007812 c 0.265625 0.003906 0.519531 -0.101563 0.707031 -0.285157 l 2 -2 c 0.390625 -0.390625 0.390625 -1.023437 0 -1.414062 l -2 -2 c -0.1875 -0.183594 -0.441406 -0.289063 -0.707031 -0.285157 v -0.007812 z m 0 0" fill="#2e3436"/></svg> 2 | -------------------------------------------------------------------------------- /data/icons/scalable/emblems/ee-bypass-symbolic.svg: -------------------------------------------------------------------------------- 1 | <svg height="16px" viewBox="0 0 16 16" width="16px" xmlns="http://www.w3.org/2000/svg"><path d="m 13 5 v 0.003906 c 0.265625 0 0.519531 0.105469 0.707031 0.289063 l 2 2 c 0.390625 0.390625 0.390625 1.023437 0 1.414062 l -2 2 c -0.1875 0.183594 -0.441406 0.289063 -0.707031 0.285157 v 0.007812 h -1 v -2 h -5 c -0.550781 0 -1 -0.449219 -1 -1 s 0.449219 -1 1 -1 h 5 v -2 z m 0 0"/><path d="m 9.179688 1.097656 c -2.394532 -0.40625 -4.910157 0.453125 -6.546876 2.398438 c -2.175781 2.597656 -2.175781 6.40625 0 9 c 2.179688 2.597656 5.929688 3.257812 8.863282 1.5625 c 0.230468 -0.132813 0.398437 -0.351563 0.46875 -0.605469 c 0.066406 -0.257813 0.03125 -0.53125 -0.101563 -0.761719 c -0.277343 -0.476562 -0.886719 -0.640625 -1.367187 -0.363281 c -2.105469 1.214844 -4.765625 0.75 -6.328125 -1.117187 c -1.5625 -1.863282 -1.5625 -4.5625 0 -6.429688 c 1.5625 -1.863281 4.222656 -2.332031 6.328125 -1.113281 c 0.480468 0.273437 1.089844 0.113281 1.367187 -0.367188 c 0.132813 -0.226562 0.167969 -0.5 0.101563 -0.757812 c -0.070313 -0.257813 -0.238282 -0.476563 -0.46875 -0.609375 c -0.730469 -0.421875 -1.515625 -0.699219 -2.316406 -0.835938 z m 0 0"/></svg> 2 | -------------------------------------------------------------------------------- /data/icons/scalable/emblems/ee-double-vertical-lines-symbolic.svg: -------------------------------------------------------------------------------- 1 | <svg height="16" width="16" viewBox="0 0 15.602 15.602" xmlns="http://www.w3.org/2000/svg"> 2 | <path d="M10.155,0h2.961c0.191,0,0.352,0.161,0.352,0.354v14.893c0,0.195-0.16,0.355-0.352,0.355h-2.961 c-0.191,0-0.355-0.16-0.355-0.355V0.354C9.8,0.161,9.964,0,10.155,0z"/><path d="M2.488,0h2.963c0.191,0,0.35,0.161,0.35,0.354v14.893c0,0.195-0.158,0.355-0.35,0.355H2.488 c-0.196,0-0.354-0.161-0.354-0.356V0.354C2.134,0.161,2.292,0,2.488,0z" fill="#2e3436"/></svg> 3 | -------------------------------------------------------------------------------- /data/icons/scalable/emblems/ee-drag-handle-symbolic.svg: -------------------------------------------------------------------------------- 1 | <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path d="M4.494 0a1.5 1.5 0 00-1.5 1.5 1.5 1.5 0 001.5 1.5 1.5 1.5 0 001.5-1.5 1.5 1.5 0 00-1.5-1.5zm6 0a1.5 1.5 0 00-1.5 1.5 1.5 1.5 0 001.5 1.5 1.5 1.5 0 001.5-1.5 1.5 1.5 0 00-1.5-1.5zm-6 6a1.5 1.5 0 00-1.5 1.5 1.5 1.5 0 001.5 1.5 1.5 1.5 0 001.5-1.5 1.5 1.5 0 00-1.5-1.5zm6 0a1.5 1.5 0 00-1.5 1.5 1.5 1.5 0 001.5 1.5 1.5 1.5 0 001.5-1.5 1.5 1.5 0 00-1.5-1.5zm-6 6a1.5 1.5 0 00-1.5 1.5 1.5 1.5 0 001.5 1.5 1.5 1.5 0 001.5-1.5 1.5 1.5 0 00-1.5-1.5zm6 0a1.5 1.5 0 00-1.5 1.5 1.5 1.5 0 001.5 1.5 1.5 1.5 0 001.5-1.5 1.5 1.5 0 00-1.5-1.5z" fill="#2e3436"/></svg> 2 | -------------------------------------------------------------------------------- /data/icons/scalable/emblems/ee-spectrum-symbolic.svg: -------------------------------------------------------------------------------- 1 | <svg width="16" height="16" xmlns="http://www.w3.org/2000/svg"><path d="M 0.02696778,7.9590838 H 4.0269678 V 16.02239 H 0.02696778 Z" fill="#474747"/><path d="m 5.9385067,0.03045187 h 4 V 16.04011 h -4 z" fill="#474747"/><path d="m 12.025571,5.1441802 h 4 V 16.050258 h -4 z" fill="#474747"/></svg> 2 | -------------------------------------------------------------------------------- /data/schemas/com.github.wwmm.easyeffects.autogain.gschema.xml: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="UTF-8"?> 2 | <schemalist> 3 | <enum id="com.github.wwmm.easyeffects.autogain.reference.enum"> 4 | <value nick="Momentary" value="0" /> 5 | <value nick="Shortterm" value="1" /> 6 | <value nick="Integrated" value="2" /> 7 | <value nick="Geometric Mean (MSI)" value="3" /> 8 | <value nick="Geometric Mean (MS)" value="4" /> 9 | <value nick="Geometric Mean (MI)" value="5" /> 10 | <value nick="Geometric Mean (SI)" value="6" /> 11 | </enum> 12 | <schema id="com.github.wwmm.easyeffects.autogain"> 13 | <key name="bypass" type="b"> 14 | <default>false</default> 15 | </key> 16 | <key name="input-gain" type="d"> 17 | <range min="-36" max="36" /> 18 | <default>0</default> 19 | </key> 20 | <key name="output-gain" type="d"> 21 | <range min="-36" max="36" /> 22 | <default>0</default> 23 | </key> 24 | <key name="target" type="d"> 25 | <range min="-100" max="0" /> 26 | <default>-23</default> 27 | </key> 28 | <key name="reset-history" type="b"> 29 | <default>false</default> 30 | </key> 31 | <key name="reference" enum="com.github.wwmm.easyeffects.autogain.reference.enum"> 32 | <default>"Geometric Mean (MSI)"</default> 33 | </key> 34 | <key name="maximum-history" type="i"> 35 | <range min="6" max="3600" /> 36 | <default>15</default> 37 | </key> 38 | <key name="silence-threshold" type="d"> 39 | <range min="-100" max="0" /> 40 | <default>-70</default> 41 | </key> 42 | </schema> 43 | </schemalist> -------------------------------------------------------------------------------- /data/schemas/com.github.wwmm.easyeffects.bassenhancer.gschema.xml: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="UTF-8"?> 2 | <schemalist> 3 | <schema id="com.github.wwmm.easyeffects.bassenhancer"> 4 | <key name="bypass" type="b"> 5 | <default>false</default> 6 | </key> 7 | <key name="input-gain" type="d"> 8 | <range min="-36" max="36" /> 9 | <default>0</default> 10 | </key> 11 | <key name="output-gain" type="d"> 12 | <range min="-36" max="36" /> 13 | <default>0</default> 14 | </key> 15 | <key name="amount" type="d"> 16 | <range min="-100" max="36" /> 17 | <default>0</default> 18 | </key> 19 | <key name="harmonics" type="d"> 20 | <range min="0.1" max="10" /> 21 | <default>8.5</default> 22 | </key> 23 | <key name="scope" type="d"> 24 | <range min="10" max="250" /> 25 | <default>100</default> 26 | </key> 27 | <key name="floor" type="d"> 28 | <range min="10" max="120" /> 29 | <default>20</default> 30 | </key> 31 | <key name="blend" type="d"> 32 | <range min="-10" max="10" /> 33 | <default>0</default> 34 | </key> 35 | <key name="floor-active" type="b"> 36 | <default>false</default> 37 | </key> 38 | <key name="listen" type="b"> 39 | <default>false</default> 40 | </key> 41 | </schema> 42 | </schemalist> -------------------------------------------------------------------------------- /data/schemas/com.github.wwmm.easyeffects.bassloudness.gschema.xml: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="UTF-8"?> 2 | <schemalist> 3 | <schema id="com.github.wwmm.easyeffects.bassloudness"> 4 | <key name="bypass" type="b"> 5 | <default>false</default> 6 | </key> 7 | <key name="input-gain" type="d"> 8 | <range min="-36" max="36" /> 9 | <default>0</default> 10 | </key> 11 | <key name="output-gain" type="d"> 12 | <range min="-36" max="36" /> 13 | <default>0</default> 14 | </key> 15 | <key name="loudness" type="d"> 16 | <range min="-100" max="0" /> 17 | <default>-3.1</default> 18 | </key> 19 | <key name="output" type="d"> 20 | <range min="-100" max="0" /> 21 | <default>-6</default> 22 | </key> 23 | <key name="link" type="d"> 24 | <range min="-100" max="0" /> 25 | <default>-9.1</default> 26 | </key> 27 | <key name="listen" type="b"> 28 | <default>false</default> 29 | </key> 30 | </schema> 31 | </schemalist> -------------------------------------------------------------------------------- /data/schemas/com.github.wwmm.easyeffects.convolver.gschema.xml: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="UTF-8"?> 2 | <schemalist> 3 | <schema id="com.github.wwmm.easyeffects.convolver"> 4 | <key name="bypass" type="b"> 5 | <default>false</default> 6 | </key> 7 | <key name="input-gain" type="d"> 8 | <range min="-36" max="36" /> 9 | <default>0</default> 10 | </key> 11 | <key name="output-gain" type="d"> 12 | <range min="-36" max="36" /> 13 | <default>0</default> 14 | </key> 15 | <key name="kernel-name" type="s"> 16 | <default>""</default> 17 | </key> 18 | <key name="ir-width" type="i"> 19 | <range min="0" max="200" /> 20 | <default>100</default> 21 | </key> 22 | <key name="autogain" type="b"> 23 | <default>true</default> 24 | </key> 25 | </schema> 26 | </schemalist> 27 | -------------------------------------------------------------------------------- /data/schemas/com.github.wwmm.easyeffects.crossfeed.gschema.xml: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="UTF-8"?> 2 | <schemalist> 3 | <schema id="com.github.wwmm.easyeffects.crossfeed"> 4 | <key name="bypass" type="b"> 5 | <default>false</default> 6 | </key> 7 | <key name="input-gain" type="d"> 8 | <range min="-36" max="36" /> 9 | <default>0</default> 10 | </key> 11 | <key name="output-gain" type="d"> 12 | <range min="-36" max="36" /> 13 | <default>0</default> 14 | </key> 15 | <key name="fcut" type="i"> 16 | <range min="300" max="2000" /> 17 | <default>700</default> 18 | </key> 19 | <key name="feed" type="d"> 20 | <range min="1" max="15" /> 21 | <default>4.5</default> 22 | </key> 23 | </schema> 24 | </schemalist> -------------------------------------------------------------------------------- /data/schemas/com.github.wwmm.easyeffects.deepfilternet.gschema.xml: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="UTF-8"?> 2 | <schemalist> 3 | <schema id="com.github.wwmm.easyeffects.deepfilternet"> 4 | <key name="bypass" type="b"> 5 | <default>false</default> 6 | </key> 7 | <key name="input-gain" type="d"> 8 | <range min="-36" max="36" /> 9 | <default>0</default> 10 | </key> 11 | <key name="output-gain" type="d"> 12 | <range min="-36" max="36" /> 13 | <default>0</default> 14 | </key> 15 | 16 | <key name="attenuation-limit" type="d"> 17 | <range min="0" max="100" /> 18 | <default>100</default> 19 | </key> 20 | <key name="min-processing-threshold" type="d"> 21 | <range min="-15" max="35" /> 22 | <default>-10</default> 23 | </key> 24 | <key name="max-erb-processing-threshold" type="d"> 25 | <range min="-15" max="35" /> 26 | <default>30</default> 27 | </key> 28 | <key name="max-df-processing-threshold" type="d"> 29 | <range min="-15" max="35" /> 30 | <default>20</default> 31 | </key> 32 | <key name="min-processing-buffer" type="i"> 33 | <range min="0" max="10" /> 34 | <default>0</default> 35 | </key> 36 | <key name="post-filter-beta" type="d"> 37 | <range min="0" max="0.05" /> 38 | <default>0.02</default> 39 | </key> 40 | </schema> 41 | </schemalist> 42 | -------------------------------------------------------------------------------- /data/schemas/com.github.wwmm.easyeffects.delay.gschema.xml: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="UTF-8"?> 2 | <schemalist> 3 | <schema id="com.github.wwmm.easyeffects.delay"> 4 | <key name="bypass" type="b"> 5 | <default>false</default> 6 | </key> 7 | <key name="input-gain" type="d"> 8 | <range min="-36" max="36" /> 9 | <default>0</default> 10 | </key> 11 | <key name="output-gain" type="d"> 12 | <range min="-36" max="36" /> 13 | <default>0</default> 14 | </key> 15 | <key name="dry-l" type="d"> 16 | <range min="-100" max="20" /> 17 | <default>-100</default> 18 | </key> 19 | <key name="dry-r" type="d"> 20 | <range min="-100" max="20" /> 21 | <default>-100</default> 22 | </key> 23 | <key name="wet-l" type="d"> 24 | <range min="-100" max="20" /> 25 | <default>0</default> 26 | </key> 27 | <key name="wet-r" type="d"> 28 | <range min="-100" max="20" /> 29 | <default>0</default> 30 | </key> 31 | <key name="time-l" type="d"> 32 | <range min="0" max="1000" /> 33 | <default>0</default> 34 | </key> 35 | <key name="time-r" type="d"> 36 | <range min="0" max="1000" /> 37 | <default>0</default> 38 | </key> 39 | <key name="invert-phase-l" type="b"> 40 | <default>false</default> 41 | </key> 42 | <key name="invert-phase-r" type="b"> 43 | <default>false</default> 44 | </key> 45 | </schema> 46 | </schemalist> 47 | -------------------------------------------------------------------------------- /data/schemas/com.github.wwmm.easyeffects.echo_canceller.gschema.xml: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="UTF-8"?> 2 | <schemalist> 3 | <schema id="com.github.wwmm.easyeffects.echocanceller"> 4 | <key name="bypass" type="b"> 5 | <default>false</default> 6 | </key> 7 | <key name="input-gain" type="d"> 8 | <range min="-36" max="36" /> 9 | <default>0</default> 10 | </key> 11 | <key name="output-gain" type="d"> 12 | <range min="-36" max="36" /> 13 | <default>0</default> 14 | </key> 15 | <key name="filter-length" type="i"> 16 | <range min="1" max="1000" /> 17 | <default>100</default> 18 | </key> 19 | <key name="residual-echo-suppression" type="i"> 20 | <range min="-100" max="-1" /> 21 | <default>-70</default> 22 | </key> 23 | <key name="near-end-suppression" type="i"> 24 | <range min="-100" max="-1" /> 25 | <default>-70</default> 26 | </key> 27 | </schema> 28 | </schemalist> -------------------------------------------------------------------------------- /data/schemas/com.github.wwmm.easyeffects.equalizer.gschema.xml: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="UTF-8"?> 2 | <schemalist> 3 | <enum id="com.github.wwmm.easyeffects.equalizer.mode.enum"> 4 | <value nick="IIR" value="0" /> 5 | <value nick="FIR" value="1" /> 6 | <value nick="FFT" value="2" /> 7 | <value nick="SPM" value="3" /> 8 | </enum> 9 | <schema id="com.github.wwmm.easyeffects.equalizer"> 10 | <key name="bypass" type="b"> 11 | <default>false</default> 12 | </key> 13 | <key name="num-bands" type="i"> 14 | <range min="1" max="32" /> 15 | <default>32</default> 16 | </key> 17 | <key name="mode" enum="com.github.wwmm.easyeffects.equalizer.mode.enum"> 18 | <default>"IIR"</default> 19 | </key> 20 | <key name="input-gain" type="d"> 21 | <range min="-36" max="36" /> 22 | <default>0</default> 23 | </key> 24 | <key name="output-gain" type="d"> 25 | <range min="-36" max="36" /> 26 | <default>0</default> 27 | </key> 28 | <key name="split-channels" type="b"> 29 | <default>false</default> 30 | </key> 31 | <key name="balance" type="d"> 32 | <range min="-100" max="100" /> 33 | <default>0</default> 34 | </key> 35 | <key name="pitch-left" type="d"> 36 | <range min="-120" max="120" /> 37 | <default>0</default> 38 | </key> 39 | <key name="pitch-right" type="d"> 40 | <range min="-120" max="120" /> 41 | <default>0</default> 42 | </key> 43 | </schema> 44 | </schemalist> -------------------------------------------------------------------------------- /data/schemas/com.github.wwmm.easyeffects.exciter.gschema.xml: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="UTF-8"?> 2 | <schemalist> 3 | <schema id="com.github.wwmm.easyeffects.exciter"> 4 | <key name="bypass" type="b"> 5 | <default>false</default> 6 | </key> 7 | <key name="input-gain" type="d"> 8 | <range min="-36" max="36" /> 9 | <default>0</default> 10 | </key> 11 | <key name="output-gain" type="d"> 12 | <range min="-36" max="36" /> 13 | <default>0</default> 14 | </key> 15 | <key name="amount" type="d"> 16 | <range min="-100" max="36" /> 17 | <default>0</default> 18 | </key> 19 | <key name="harmonics" type="d"> 20 | <range min="0.1" max="10" /> 21 | <default>8.5</default> 22 | </key> 23 | <key name="scope" type="d"> 24 | <range min="2000" max="12000" /> 25 | <default>7500</default> 26 | </key> 27 | <key name="ceil" type="d"> 28 | <range min="10000" max="20000" /> 29 | <default>16000</default> 30 | </key> 31 | <key name="blend" type="d"> 32 | <range min="-10" max="10" /> 33 | <default>0</default> 34 | </key> 35 | <key name="ceil-active" type="b"> 36 | <default>false</default> 37 | </key> 38 | <key name="listen" type="b"> 39 | <default>false</default> 40 | </key> 41 | </schema> 42 | </schemalist> -------------------------------------------------------------------------------- /data/schemas/com.github.wwmm.easyeffects.levelmeter.gschema.xml: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="UTF-8"?> 2 | <schemalist> 3 | <schema id="com.github.wwmm.easyeffects.levelmeter"> 4 | <key name="bypass" type="b"> 5 | <default>false</default> 6 | </key> 7 | </schema> 8 | </schemalist> 9 | -------------------------------------------------------------------------------- /data/schemas/com.github.wwmm.easyeffects.libportal.gschema.xml: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="UTF-8"?> 2 | <schemalist> 3 | <schema id="com.github.wwmm.easyeffects.libportal" path="/com/github/wwmm/easyeffects/libportal/"> 4 | <key name="enable-autostart" type="b"> 5 | <default>false</default> 6 | </key> 7 | </schema> 8 | </schemalist> -------------------------------------------------------------------------------- /data/schemas/com.github.wwmm.easyeffects.maximizer.gschema.xml: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="UTF-8"?> 2 | <schemalist> 3 | <schema id="com.github.wwmm.easyeffects.maximizer"> 4 | <key name="bypass" type="b"> 5 | <default>false</default> 6 | </key> 7 | <key name="input-gain" type="d"> 8 | <range min="-36" max="36" /> 9 | <default>0</default> 10 | </key> 11 | <key name="output-gain" type="d"> 12 | <range min="-36" max="36" /> 13 | <default>0</default> 14 | </key> 15 | <key name="release" type="d"> 16 | <range min="1" max="100" /> 17 | <default>25</default> 18 | </key> 19 | <key name="threshold" type="d"> 20 | <range min="-30" max="0" /> 21 | <default>0</default> 22 | </key> 23 | </schema> 24 | </schemalist> -------------------------------------------------------------------------------- /data/schemas/com.github.wwmm.easyeffects.outputlevel.gschema.xml: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="UTF-8"?> 2 | <schemalist> 3 | <schema id="com.github.wwmm.easyeffects.outputlevel"> 4 | <key name="state" type="b"> 5 | <default>false</default> 6 | </key> 7 | </schema> 8 | </schemalist> -------------------------------------------------------------------------------- /data/schemas/com.github.wwmm.easyeffects.rnnoise.gschema.xml: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="UTF-8"?> 2 | <schemalist> 3 | <schema id="com.github.wwmm.easyeffects.rnnoise"> 4 | <key name="bypass" type="b"> 5 | <default>false</default> 6 | </key> 7 | <key name="input-gain" type="d"> 8 | <range min="-36" max="36" /> 9 | <default>0</default> 10 | </key> 11 | <key name="output-gain" type="d"> 12 | <range min="-36" max="36" /> 13 | <default>0</default> 14 | </key> 15 | <key name="model-name" type="s"> 16 | <default>""</default> 17 | </key> 18 | <key name="enable-vad" type="b"> 19 | <default>false</default> 20 | </key> 21 | <key name="vad-thres" type="d"> 22 | <range min="0" max="100" /> 23 | <default>50</default> 24 | </key> 25 | <key name="wet" type="d"> 26 | <range min="-100" max="20" /> 27 | <default>0.0</default> 28 | </key> 29 | <key name="release" type="d"> 30 | <range min="0" max="20000" /> 31 | <default>20.0</default> 32 | </key> 33 | </schema> 34 | </schemalist> 35 | -------------------------------------------------------------------------------- /data/schemas/com.github.wwmm.easyeffects.speex.gschema.xml: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="UTF-8"?> 2 | <schemalist> 3 | <schema id="com.github.wwmm.easyeffects.speex"> 4 | <key name="bypass" type="b"> 5 | <default>false</default> 6 | </key> 7 | <key name="input-gain" type="d"> 8 | <range min="-36" max="36" /> 9 | <default>0</default> 10 | </key> 11 | <key name="output-gain" type="d"> 12 | <range min="-36" max="36" /> 13 | <default>0</default> 14 | </key> 15 | <key name="enable-denoise" type="b"> 16 | <default>true</default> 17 | </key> 18 | <key name="noise-suppression" type="i"> 19 | <range min="-100" max="-1" /> 20 | <default>-70</default> 21 | </key> 22 | <key name="enable-agc" type="b"> 23 | <default>false</default> 24 | </key> 25 | <key name="enable-vad" type="b"> 26 | <default>false</default> 27 | </key> 28 | <key name="vad-probability-start" type="i"> 29 | <range min="0" max="100" /> 30 | <default>95</default> 31 | </key> 32 | <key name="vad-probability-continue" type="i"> 33 | <range min="0" max="100" /> 34 | <default>90</default> 35 | </key> 36 | <key name="enable-dereverb" type="b"> 37 | <default>false</default> 38 | </key> 39 | </schema> 40 | </schemalist> -------------------------------------------------------------------------------- /data/schemas/com.github.wwmm.easyeffects.streaminputs.gschema.xml: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="UTF-8"?> 2 | <schemalist> 3 | <schema id="com.github.wwmm.easyeffects.streaminputs" path="/com/github/wwmm/easyeffects/streaminputs/"> 4 | <key name="plugins" type="as"> 5 | <default>[]</default> 6 | </key> 7 | <key name="use-default-input-device" type="b"> 8 | <default>true</default> 9 | </key> 10 | <key name="input-device" type="s"> 11 | <default>""</default> 12 | </key> 13 | <key name="latency" type="i"> 14 | <range min="1" max="10000000" /> 15 | <default>50</default> 16 | </key> 17 | <key name="blocklist" type="as"> 18 | <default>[]</default> 19 | </key> 20 | <key name="show-blocklisted-apps" type="b"> 21 | <default>false</default> 22 | </key> 23 | <key name="show-plugins-list" type="b"> 24 | <default>true</default> 25 | </key> 26 | </schema> 27 | </schemalist> 28 | -------------------------------------------------------------------------------- /data/schemas/com.github.wwmm.easyeffects.streamoutputs.gschema.xml: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="UTF-8"?> 2 | <schemalist> 3 | <schema id="com.github.wwmm.easyeffects.streamoutputs" path="/com/github/wwmm/easyeffects/streamoutputs/"> 4 | <key name="plugins" type="as"> 5 | <default>[]</default> 6 | </key> 7 | <key name="use-default-output-device" type="b"> 8 | <default>true</default> 9 | </key> 10 | <key name="output-device" type="s"> 11 | <default>""</default> 12 | </key> 13 | <key name="latency" type="i"> 14 | <range min="1" max="10000000" /> 15 | <default>50</default> 16 | </key> 17 | <key name="blocklist" type="as"> 18 | <default>[]</default> 19 | </key> 20 | <key name="show-blocklisted-apps" type="b"> 21 | <default>false</default> 22 | </key> 23 | <key name="show-plugins-list" type="b"> 24 | <default>true</default> 25 | </key> 26 | </schema> 27 | </schemalist> 28 | -------------------------------------------------------------------------------- /data/ui/apps_box.ui: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="UTF-8"?> 2 | <interface domain="easyeffects"> 3 | <template class="AppsBox" parent="GtkBox"> 4 | <property name="orientation">vertical</property> 5 | <property name="hexpand">1</property> 6 | <property name="vexpand">1</property> 7 | <property name="spacing">6</property> 8 | <child> 9 | <object class="GtkOverlay" id="overlay"> 10 | <child> 11 | <object class="GtkScrolledWindow"> 12 | <child> 13 | <object class="GtkListView" id="listview"> 14 | <property name="hexpand">1</property> 15 | <property name="vexpand">1</property> 16 | <accessibility> 17 | <property name="label" translatable="yes">Applications List</property> 18 | </accessibility> 19 | </object> 20 | </child> 21 | </object> 22 | </child> 23 | 24 | <child type="overlay"> 25 | <object class="AdwStatusPage" id="overlay_empty_list"> 26 | <property name="icon-name">ee-applications-multimedia-symbolic</property> 27 | <property name="title" translatable="yes">Empty List</property> 28 | <property name="description" translatable="yes">No Audio Application Available</property> 29 | </object> 30 | </child> 31 | </object> 32 | </child> 33 | </template> 34 | </interface> -------------------------------------------------------------------------------- /data/ui/chart.ui: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="UTF-8"?> 2 | <interface domain="easyeffects"> 3 | <template class="Chart" parent="GtkWidget"> 4 | <property name="hexpand">1</property> 5 | <property name="height-request">100</property> 6 | </template> 7 | </interface> -------------------------------------------------------------------------------- /data/ui/custom.css: -------------------------------------------------------------------------------- 1 | .drag-listboxrow-icon { 2 | background: white; 3 | border: 1px solid black; 4 | } 5 | -------------------------------------------------------------------------------- /data/ui/factory_input_device_dropdown.ui: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="UTF-8"?> 2 | <interface domain="easyeffects"> 3 | <template class="GtkListItem"> 4 | <property name="child"> 5 | <object class="GtkBox"> 6 | <property name="spacing">3</property> 7 | <child> 8 | <object class="GtkImage"> 9 | <property name="halign">start</property> 10 | <property name="valign">center</property> 11 | <property name="icon-name">audio-input-microphone-symbolic</property> 12 | </object> 13 | </child> 14 | 15 | <child> 16 | <object class="GtkLabel"> 17 | <property name="ellipsize">end</property> 18 | <binding name="label"> 19 | <lookup name="description" type="NodeInfoHolder"> 20 | <lookup name="item">GtkListItem</lookup> 21 | </lookup> 22 | </binding> 23 | </object> 24 | </child> 25 | </object> 26 | </property> 27 | </template> 28 | </interface> 29 | -------------------------------------------------------------------------------- /data/ui/factory_node_dropdown.ui: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="UTF-8"?> 2 | <interface domain="easyeffects"> 3 | <template class="GtkListItem"> 4 | <property name="child"> 5 | <object class="GtkBox"> 6 | <property name="spacing">3</property> 7 | <child> 8 | <object class="GtkImage"> 9 | <property name="halign">start</property> 10 | <property name="valign">center</property> 11 | <binding name="icon-name"> 12 | <lookup name="icon-name" type="NodeInfoHolder"> 13 | <lookup name="item">GtkListItem</lookup> 14 | </lookup> 15 | </binding> 16 | </object> 17 | </child> 18 | 19 | <child> 20 | <object class="GtkLabel"> 21 | <property name="ellipsize">end</property> 22 | <binding name="label"> 23 | <lookup name="description" type="NodeInfoHolder"> 24 | <lookup name="item">GtkListItem</lookup> 25 | </lookup> 26 | </binding> 27 | </object> 28 | </child> 29 | </object> 30 | </property> 31 | </template> 32 | </interface> 33 | -------------------------------------------------------------------------------- /data/ui/factory_output_device_dropdown.ui: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="UTF-8"?> 2 | <interface domain="easyeffects"> 3 | <template class="GtkListItem"> 4 | <property name="child"> 5 | <object class="GtkBox"> 6 | <property name="spacing">3</property> 7 | <child> 8 | <object class="GtkImage"> 9 | <property name="halign">start</property> 10 | <property name="valign">center</property> 11 | <property name="icon-name">audio-speakers-symbolic</property> 12 | </object> 13 | </child> 14 | 15 | <child> 16 | <object class="GtkLabel"> 17 | <property name="ellipsize">end</property> 18 | <binding name="label"> 19 | <lookup name="description" type="NodeInfoHolder"> 20 | <lookup name="item">GtkListItem</lookup> 21 | </lookup> 22 | </binding> 23 | </object> 24 | </child> 25 | </object> 26 | </property> 27 | </template> 28 | </interface> 29 | -------------------------------------------------------------------------------- /data/ui/factory_presets_dropdown.ui: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="UTF-8"?> 2 | <interface domain="easyeffects"> 3 | <template class="GtkListItem"> 4 | <property name="child"> 5 | <object class="GtkBox"> 6 | <property name="spacing">3</property> 7 | <child> 8 | <object class="GtkImage"> 9 | <property name="halign">start</property> 10 | <property name="valign">center</property> 11 | <property name="icon-name">emblem-system-symbolic</property> 12 | </object> 13 | </child> 14 | 15 | <child> 16 | <object class="GtkLabel"> 17 | <property name="ellipsize">end</property> 18 | <binding name="label"> 19 | <lookup name="string" type="GtkStringObject"> 20 | <lookup name="item">GtkListItem</lookup> 21 | </lookup> 22 | </binding> 23 | </object> 24 | </child> 25 | </object> 26 | </property> 27 | </template> 28 | </interface> 29 | -------------------------------------------------------------------------------- /data/ui/preferences_window.ui: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="UTF-8"?> 2 | <interface domain="easyeffects"> 3 | <template class="PreferencesWindow" parent="AdwPreferencesDialog"> </template> 4 | </interface> -------------------------------------------------------------------------------- /debian/changelog: -------------------------------------------------------------------------------- 1 | easyeffects (6.2.5-1) unstable; urgency=medium 2 | 3 | * Version 6.2.5 upstream. 4 | 5 | -- Boyuan Yang <byang@debian.org> Sat, 18 Jun 2022 19:16:31 -0400 6 | -------------------------------------------------------------------------------- /debian/control: -------------------------------------------------------------------------------- 1 | Source: easyeffects 2 | Section: sound 3 | Priority: optional 4 | Maintainer: Boyuan Yang <byang@debian.org> 5 | Build-Depends: 6 | appstream-util, 7 | debhelper-compat (= 13), 8 | gettext, 9 | itstool, 10 | libadwaita-1-dev, 11 | libbs2b-dev, 12 | libebur128-dev, 13 | libfftw3-dev, 14 | libfmt-dev, 15 | libglib2.0-dev, 16 | libgtk-4-dev, 17 | liblilv-dev, 18 | libpipewire-0.3-dev, 19 | libsoundtouch-dev, 20 | libsamplerate0-dev, 21 | libsigc++-3.0-dev, 22 | libsndfile-dev, 23 | libspeexdsp-dev, 24 | libtbb-dev, 25 | libzita-convolver-dev, 26 | lv2-dev, 27 | meson, 28 | nlohmann-json3-dev, 29 | pkg-config, 30 | ladspa-sdk, 31 | Standards-Version: 4.6.1 32 | Homepage: https://github.com/wwmm/easyeffects 33 | 34 | Package: easyeffects 35 | Architecture: any 36 | Depends: 37 | calf-plugins, 38 | lsp-plugins-lv2 | lsp-plugins, 39 | ${misc:Depends}, 40 | ${shlibs:Depends}, 41 | Recommends: 42 | mda-lv2, 43 | zam-plugins, 44 | libdeep_filter_ladspa, 45 | Description: Audio effects for PipeWire applications 46 | Many sound effects for PipeWire input and output. 47 | -------------------------------------------------------------------------------- /debian/rules: -------------------------------------------------------------------------------- 1 | #!/usr/bin/make -f 2 | 3 | %: 4 | dh $@ 5 | -------------------------------------------------------------------------------- /debian/source/format: -------------------------------------------------------------------------------- 1 | 3.0 (quilt) 2 | -------------------------------------------------------------------------------- /debian/watch: -------------------------------------------------------------------------------- 1 | version=4 2 | opts="filenamemangle=s%(?:.*?)?v?(\d[\d.]*@ARCHIVE_EXT@)%@PACKAGE@-$1%" \ 3 | https://github.com/wwmm/easyeffects/tags \ 4 | (?:.*?/)?v?@ANY_VERSION@@ARCHIVE_EXT@ 5 | -------------------------------------------------------------------------------- /help/C/advancedinfo.page: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="UTF-8"?> 2 | <page xmlns="http://projectmallard.org/1.0/" 3 | xmlns:its="http://www.w3.org/2005/11/its" type="guide" id="advancedinfo" style="2column"> 4 | <info> 5 | <link type="guide" xref="index#ui" /> 6 | </info> 7 | <title>Advanced Information</title> 8 | <p>Easy Effects audio processing is composed by three main stages. Each of them needs a specific audio format and sampling rate.</p> 9 | <p>In the bottom bar is reported the pipeline output sampling rate (in kHz) and the latency (in ms) introduced by the audio processing stage.</p> 10 | <p>Every stream in applications list also reports its own latency and sampling rate, along with status and format.</p> 11 | </page> 12 | -------------------------------------------------------------------------------- /help/C/bassloudness.page: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="UTF-8"?> 2 | <page xmlns="http://projectmallard.org/1.0/" 3 | xmlns:its="http://www.w3.org/2005/11/its" type="guide" id="bassloudness"> 4 | <info> 5 | <link type="guide" xref="index#plugins"/> 6 | </info> 7 | <title>Bass Loudness</title> 8 | <p>The ear is less sensitive to low frequencies when listening at low volume. This plugin developed by MDA allows the bass level to be adjusted measuring the "equal-loudness contour".</p> 9 | <terms> 10 | <item> 11 | <title> 12 | <em style="strong" its:withinText="nested">Loudness</em> 13 | </title> 14 | <p>Source level relative to listening level (based on a 100 dB SPL maximum level).</p> 15 | </item> 16 | <item> 17 | <title> 18 | <em style="strong" its:withinText="nested">Output</em> 19 | </title> 20 | <p>Change output level.</p> 21 | </item> 22 | <item> 23 | <title> 24 | <em style="strong" its:withinText="nested">Link</em> 25 | </title> 26 | <p>Automatically adjusts Output to maintain a consistent tonal balance at all levels.</p> 27 | </item> 28 | </terms> 29 | <section> 30 | <title>References</title> 31 | <list> 32 | <item> 33 | <p> 34 | <link href="https://en.wikipedia.org/wiki/Equal-loudness_contour" its:translate="no">Wikipedia Equal-Loudness Contour</link> 35 | </p> 36 | </item> 37 | <item> 38 | <p> 39 | <link href="http://mda.smartelectronix.com/vst/help/loudness.htm" its:translate="no">MDA Loudness</link> 40 | </p> 41 | </item> 42 | </list> 43 | </section> 44 | </page> 45 | -------------------------------------------------------------------------------- /help/C/blocklist.page: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="UTF-8"?> 2 | <page xmlns="http://projectmallard.org/1.0/" 3 | xmlns:its="http://www.w3.org/2005/11/its" type="guide" id="blocklist"> 4 | <info> 5 | <link type="guide" xref="index#ui"/> 6 | </info> 7 | <title>Applications Excluded</title> 8 | <p>There are cases in which the user wants a specific application to be excluded from the "Process All Input/Output" functionality. This can be done by using the list of Excluded Applications.</p> 9 | <p>Just click the "Excluded Apps" button in the bottom bar and add the application name exactly as it is shown in the Players/Recorders tab list.</p> 10 | <p>A specific application in the Players/Recorders list can be quickly added to the Excluded Apps just clicking the "Exclude" checkbutton.</p> 11 | </page> 12 | -------------------------------------------------------------------------------- /help/C/crystalizer.page: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="UTF-8"?> 2 | <page xmlns="http://projectmallard.org/1.0/" 3 | xmlns:its="http://www.w3.org/2005/11/its" type="guide" id="crystalizer"> 4 | <info> 5 | <link type="guide" xref="index#plugins"/> 6 | </info> 7 | <title>Crystalizer</title> 8 | <p>The Crystalizer plugin can be used to add a little of dynamic range to songs that were overly compressed. The signal is split in multiple bands to which different intensities can be applied in order to alter the overall dynamic range.</p> 9 | <terms> 10 | <item> 11 | <title> 12 | <em style="strong" its:withinText="nested">Intensities</em> 13 | </title> 14 | <p>The higher the value the higher is the difference in magnitude between the loudest and the quietest sounds of the selected band. Different intensities can be set for each frequency band.</p> 15 | </item> 16 | <item> 17 | <title> 18 | <em style="strong" its:withinText="nested">Bypass</em> 19 | </title> 20 | <p>When active the audio signal passing through the selected band is not modified.</p> 21 | </item> 22 | <item> 23 | <title> 24 | <em style="strong" its:withinText="nested">Mute</em> 25 | </title> 26 | <p>Mutes the selected band.</p> 27 | </item> 28 | </terms> 29 | <section> 30 | <title>References</title> 31 | <list> 32 | <item> 33 | <p> 34 | <link href="https://en.wikipedia.org/wiki/Dynamic_range" its:translate="no">Wikipedia Dynamic Range</link> 35 | </p> 36 | </item> 37 | </list> 38 | </section> 39 | </page> 40 | -------------------------------------------------------------------------------- /help/C/effectsorder.page: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="UTF-8"?> 2 | <page xmlns="http://projectmallard.org/1.0/" 3 | xmlns:its="http://www.w3.org/2005/11/its" type="guide" id="effectsorder" style="2column"> 4 | <info> 5 | <link type="guide" xref="index#ui"/> 6 | </info> 7 | <title>Changing Effects Order</title> 8 | <p>The user can change the effects order in the plugins stack. The effects can be dragged with the cursor and dropped at the new position. The first plugin from top to bottom is the first to receive the audio signal.</p> 9 | </page> 10 | -------------------------------------------------------------------------------- /help/C/enableapp.page: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="UTF-8"?> 2 | <page xmlns="http://projectmallard.org/1.0/" 3 | xmlns:its="http://www.w3.org/2005/11/its" type="guide" id="enableapp" style="2column"> 4 | <info> 5 | <link type="guide" xref="index#ui"/> 6 | </info> 7 | <title>Enable or Disable an Application</title> 8 | <p>The user can choose which applications have effects applied through the Enable checkbutton. "Process All Inputs/Outputs" option in <link xref="general" its:withinText="yes">General Settings</link> can be activated to always apply effects to whichever application. 9 | </p> 10 | <p>Note that without the "Process All Inputs/Outputs" option the enabled state may not replicated for an application at the next session. This is because "Process All Inputs/Outputs" makes Easy Effects trying to move the stream to its virtual device every time a new application spawns (unless it is listed in the <link xref="blocklist" its:withinText="yes">Excluded Apps</link>). When Easy Effects is not running, the app stream may be redirected to another destination by Pipewire, any third party audio manager or the app itself. This leads Easy Effects to not receive the stream at the next startup if "Process All Inputs/Outputs" option is not active.</p> 11 | </page> 12 | -------------------------------------------------------------------------------- /help/C/rnnoise.page: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="UTF-8"?> 2 | <page xmlns="http://projectmallard.org/1.0/" 3 | xmlns:its="http://www.w3.org/2005/11/its" type="guide" id="rnnoise"> 4 | <info> 5 | <link type="guide" xref="index#plugins" /> 6 | </info> 7 | <title>Noise Reduction</title> 8 | <p>The Noise Reduction is a process aimed to attenuate the disturbing noise from a signal.</p> 9 | <p>Easy Effects Noise Reduction is made on the RNNoise library which is based based on recurrent neural network, a class of artificial neural networks where connections between nodes form a directed graph along a temporal sequence. This allows it to exhibit temporal dynamic behavior.</p> 10 | <p>Standard RNNoise Model is used and custom models can be imported to perform different types of noise reduction.</p> 11 | <section> 12 | <title>References</title> 13 | <list> 14 | <item> 15 | <p> 16 | <link href="https://en.wikipedia.org/wiki/Noise_reduction" its:translate="no">Wikipedia Noise Reduction</link> 17 | </p> 18 | </item> 19 | <item> 20 | <p> 21 | <link href="https://en.wikipedia.org/wiki/Recurrent_neural_network" its:translate="no">Wikipedia Recurrent Neural Network</link> 22 | </p> 23 | </item> 24 | <item> 25 | <p> 26 | <link href="https://jmvalin.ca/demo/rnnoise/" its:translate="no">Jean-Marc Valin - RNNoise: Learning Noise Suppression</link> 27 | </p> 28 | </item> 29 | </list> 30 | </section> 31 | </page> 32 | -------------------------------------------------------------------------------- /help/C/saturated.page: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="UTF-8"?> 2 | <page xmlns="http://projectmallard.org/1.0/" 3 | xmlns:its="http://www.w3.org/2005/11/its" type="guide" id="saturated" style="2column"> 4 | <info> 5 | <link type="guide" xref="index#ui"/> 6 | </info> 7 | <title>Saturation Warning</title> 8 | <p>If the audio signal coming out from the pipeline is too high, very unpleasant noises can be produced. In case this happens a warning icon is shown near the output level meter in the bottom bar so that the user can reduce the audio level using the <link xref="limiter" its:withinText="yes">Limiter</link> or the <link xref="maximizer" its:withinText="yes">Maximizer</link> plugin.</p> 9 | </page> 10 | -------------------------------------------------------------------------------- /help/C/settingsmenu.page: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="UTF-8"?> 2 | <page xmlns="http://projectmallard.org/1.0/" 3 | xmlns:its="http://www.w3.org/2005/11/its" type="guide" id="settingsmenu" style="2column"> 4 | <info> 5 | <link type="guide" xref="index#ui"/> 6 | </info> 7 | <title>Settings Menu</title> 8 | </page> 9 | -------------------------------------------------------------------------------- /help/C/testsignals.page: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="UTF-8"?> 2 | <page xmlns="http://projectmallard.org/1.0/" 3 | xmlns:its="http://www.w3.org/2005/11/its" type="guide" id="testsignals"> 4 | <info> 5 | <link type="guide" xref="index#calibration"/> 6 | </info> 7 | <title>Test Signal</title> 8 | <p>A specific signal can be used to test the frequency response of the speakers.</p> 9 | <terms> 10 | <item> 11 | <title> 12 | <em style="strong" its:withinText="nested">Enable</em> 13 | </title> 14 | <p>Enable or disable the test signal.</p> 15 | </item> 16 | <item> 17 | <title> 18 | <em style="strong" its:withinText="nested">Channel</em> 19 | </title> 20 | <p>Choose if apply the test signal to left or right channel only, or both.</p> 21 | </item> 22 | <item> 23 | <title> 24 | <em style="strong" its:withinText="nested">Signal</em> 25 | </title> 26 | <p>The type of the signal: sine wave or white noise.</p> 27 | </item> 28 | <item> 29 | <title> 30 | <em style="strong" its:withinText="nested">Frequency</em> 31 | </title> 32 | <p>The frequency of the sine wave.</p> 33 | </item> 34 | </terms> 35 | </page> 36 | -------------------------------------------------------------------------------- /help/C/userpresets.page: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="UTF-8"?> 2 | <page xmlns="http://projectmallard.org/1.0/" 3 | xmlns:its="http://www.w3.org/2005/11/its" type="guide" id="userpresets" style="2column"> 4 | <info> 5 | <link type="guide" xref="index#ui"/> 6 | </info> 7 | <title>Creating and Importing User Presets</title> 8 | <p>The configuration of the selected effects in the plugins stack can be saved in Preset files and reused at the next login or on another system running Easy Effects. Just open the "Presets" menu, write a name and click on the add button. Presets can be imported also by clicking on the import button.</p> 9 | <p>A specific Preset can be autoloaded when an input or output device is added to the system. Just open the <link xref="pipewire" its:withinText="yes">PipeWire</link> tab, click on "Presets Autoloading", select the desired Preset and the device to associate from the two comboboxes, then click the add button.</p> 10 | </page> 11 | -------------------------------------------------------------------------------- /help/meson.build: -------------------------------------------------------------------------------- 1 | itstool = find_program('itstool', required: true) 2 | 3 | if not itstool.found() 4 | error('itstool not found.') 5 | endif 6 | 7 | help_pages = [ 8 | 'advancedinfo.page', 9 | 'autogain.page', 10 | 'bassenhancer.page', 11 | 'bassloudness.page', 12 | 'blocklist.page', 13 | 'compressor.page', 14 | 'convolver.page', 15 | 'crossfeed.page', 16 | 'crystalizer.page', 17 | 'deesser.page', 18 | 'delay.page', 19 | 'deepfilternet.page', 20 | 'echocanceller.page', 21 | 'effectsorder.page', 22 | 'enableapp.page', 23 | 'equalizer.page', 24 | 'exciter.page', 25 | 'filter.page', 26 | 'gate.page', 27 | 'general.page', 28 | 'guide_1.page', 29 | 'index.page', 30 | 'limiter.page', 31 | 'loudness.page', 32 | 'maximizer.page', 33 | 'multibandcompressor.page', 34 | 'multibandgate.page', 35 | 'pipewire.page', 36 | 'pitch.page', 37 | 'reverb.page', 38 | 'rnnoise.page', 39 | 'saturated.page', 40 | 'settingsmenu.page', 41 | 'spectrum.page', 42 | 'speex.page', 43 | 'stereotools.page', 44 | 'testsignals.page', 45 | 'userpresets.page' 46 | ] 47 | 48 | gnome_mod.yelp(meson.project_name(), 49 | sources: help_pages 50 | ) 51 | -------------------------------------------------------------------------------- /images/appdata-screenshot-01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wwmm/easyeffects/4307dbb82cb189a2e8bc2d1bb4efc532734d2e16/images/appdata-screenshot-01.png -------------------------------------------------------------------------------- /images/appdata-screenshot-02.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wwmm/easyeffects/4307dbb82cb189a2e8bc2d1bb4efc532734d2e16/images/appdata-screenshot-02.png -------------------------------------------------------------------------------- /images/appdata-screenshot-03.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wwmm/easyeffects/4307dbb82cb189a2e8bc2d1bb4efc532734d2e16/images/appdata-screenshot-03.png -------------------------------------------------------------------------------- /images/appdata-screenshot-04.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wwmm/easyeffects/4307dbb82cb189a2e8bc2d1bb4efc532734d2e16/images/appdata-screenshot-04.png -------------------------------------------------------------------------------- /images/appdata-screenshot-05.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wwmm/easyeffects/4307dbb82cb189a2e8bc2d1bb4efc532734d2e16/images/appdata-screenshot-05.png -------------------------------------------------------------------------------- /images/convolver.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wwmm/easyeffects/4307dbb82cb189a2e8bc2d1bb4efc532734d2e16/images/convolver.png -------------------------------------------------------------------------------- /images/easyeffects-dark-screenshot-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wwmm/easyeffects/4307dbb82cb189a2e8bc2d1bb4efc532734d2e16/images/easyeffects-dark-screenshot-1.png -------------------------------------------------------------------------------- /images/easyeffects-dark-screenshot-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wwmm/easyeffects/4307dbb82cb189a2e8bc2d1bb4efc532734d2e16/images/easyeffects-dark-screenshot-2.png -------------------------------------------------------------------------------- /images/easyeffects-dark-screenshot-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wwmm/easyeffects/4307dbb82cb189a2e8bc2d1bb4efc532734d2e16/images/easyeffects-dark-screenshot-3.png -------------------------------------------------------------------------------- /images/easyeffects-light-screenshot-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wwmm/easyeffects/4307dbb82cb189a2e8bc2d1bb4efc532734d2e16/images/easyeffects-light-screenshot-1.png -------------------------------------------------------------------------------- /images/easyeffects-light-screenshot-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wwmm/easyeffects/4307dbb82cb189a2e8bc2d1bb4efc532734d2e16/images/easyeffects-light-screenshot-2.png -------------------------------------------------------------------------------- /images/easyeffects-light-screenshot-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wwmm/easyeffects/4307dbb82cb189a2e8bc2d1bb4efc532734d2e16/images/easyeffects-light-screenshot-3.png -------------------------------------------------------------------------------- /images/easyeffects_players.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wwmm/easyeffects/4307dbb82cb189a2e8bc2d1bb4efc532734d2e16/images/easyeffects_players.png -------------------------------------------------------------------------------- /images/easyeffects_plugins.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wwmm/easyeffects/4307dbb82cb189a2e8bc2d1bb4efc532734d2e16/images/easyeffects_plugins.png -------------------------------------------------------------------------------- /images/master_screenshot_test.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wwmm/easyeffects/4307dbb82cb189a2e8bc2d1bb4efc532734d2e16/images/master_screenshot_test.png -------------------------------------------------------------------------------- /include/app_info.hpp: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright © 2017-2025 Wellington Wallace 3 | * 4 | * This file is part of Easy Effects. 5 | * 6 | * Easy Effects is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * Easy Effects is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with Easy Effects. If not, see <https://www.gnu.org/licenses/>. 18 | */ 19 | 20 | #pragma once 21 | 22 | #include <STTypes.h> 23 | #include <adwaita.h> 24 | #include <fmt/core.h> 25 | #include <gio/gio.h> 26 | #include <glib-object.h> 27 | #include <glibconfig.h> 28 | #include <gtk/gtkbox.h> 29 | #include <gtk/gtkicontheme.h> 30 | #include <unordered_map> 31 | #include "application.hpp" 32 | #include "pipe_objects.hpp" 33 | 34 | namespace ui::app_info { 35 | 36 | G_BEGIN_DECLS 37 | 38 | #define EE_TYPE_APP_INFO (app_info_get_type()) 39 | 40 | G_DECLARE_FINAL_TYPE(AppInfo, app_info, EE, APP_INFO, GtkBox) 41 | 42 | G_END_DECLS 43 | 44 | auto create() -> AppInfo*; 45 | 46 | void setup(AppInfo* self, 47 | app::Application* application, 48 | GSettings* settings, 49 | GtkIconTheme* icon_theme, 50 | std::unordered_map<uint, bool>& enabled_app_list); 51 | 52 | void update(AppInfo* self, NodeInfo node_info); 53 | 54 | } // namespace ui::app_info 55 | -------------------------------------------------------------------------------- /include/application_ui.hpp: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright © 2017-2025 Wellington Wallace 3 | * 4 | * This file is part of Easy Effects. 5 | * 6 | * Easy Effects is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * Easy Effects is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with Easy Effects. If not, see <https://www.gnu.org/licenses/>. 18 | */ 19 | 20 | #pragma once 21 | 22 | #include <adwaita.h> 23 | #include <gio/gio.h> 24 | #include <glib-object.h> 25 | #include <glibconfig.h> 26 | 27 | namespace ui::application_window { 28 | 29 | G_BEGIN_DECLS 30 | 31 | #define EE_TYPE_APPLICATION_WINDOW (application_window_get_type()) 32 | 33 | G_DECLARE_FINAL_TYPE(ApplicationWindow, application_window, EE, APP_WINDOW, AdwApplicationWindow) 34 | 35 | G_END_DECLS 36 | 37 | auto create(GApplication* gapp) -> ApplicationWindow*; 38 | 39 | } // namespace ui::application_window 40 | -------------------------------------------------------------------------------- /include/apps_box.hpp: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright © 2017-2025 Wellington Wallace 3 | * 4 | * This file is part of Easy Effects. 5 | * 6 | * Easy Effects is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * Easy Effects is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with Easy Effects. If not, see <https://www.gnu.org/licenses/>. 18 | */ 19 | 20 | #pragma once 21 | 22 | #include <adwaita.h> 23 | #include <glib-object.h> 24 | #include <glibconfig.h> 25 | #include <gtk/gtkbox.h> 26 | #include <gtk/gtkicontheme.h> 27 | #include "application.hpp" 28 | #include "pipeline_type.hpp" 29 | 30 | namespace ui::apps_box { 31 | 32 | G_BEGIN_DECLS 33 | 34 | #define EE_TYPE_APPS_BOX (apps_box_get_type()) 35 | 36 | G_DECLARE_FINAL_TYPE(AppsBox, apps_box, EE, APPS_BOX, GtkBox) 37 | 38 | G_END_DECLS 39 | 40 | auto create() -> AppsBox*; 41 | 42 | void setup(AppsBox* self, app::Application* application, PipelineType pipeline_type, GtkIconTheme* icon_theme); 43 | 44 | } // namespace ui::apps_box 45 | -------------------------------------------------------------------------------- /include/autogain_preset.hpp: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright © 2017-2025 Wellington Wallace 3 | * 4 | * This file is part of Easy Effects. 5 | * 6 | * Easy Effects is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * Easy Effects is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with Easy Effects. If not, see <https://www.gnu.org/licenses/>. 18 | */ 19 | 20 | #pragma once 21 | 22 | #include <nlohmann/json_fwd.hpp> 23 | #include "plugin_preset_base.hpp" 24 | #include "preset_type.hpp" 25 | 26 | class AutoGainPreset : public PluginPresetBase { 27 | public: 28 | explicit AutoGainPreset(PresetType preset_type, const int& index = 0); 29 | 30 | private: 31 | void save(nlohmann::json& json) override; 32 | 33 | void load(const nlohmann::json& json) override; 34 | }; 35 | -------------------------------------------------------------------------------- /include/autogain_ui.hpp: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright © 2017-2025 Wellington Wallace 3 | * 4 | * This file is part of Easy Effects. 5 | * 6 | * Easy Effects is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * Easy Effects is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with Easy Effects. If not, see <https://www.gnu.org/licenses/>. 18 | */ 19 | 20 | #pragma once 21 | 22 | #include <adwaita.h> 23 | #include <glib-object.h> 24 | #include <glibconfig.h> 25 | #include <gtk/gtkbox.h> 26 | #include <memory> 27 | #include <string> 28 | #include "autogain.hpp" 29 | 30 | namespace ui::autogain_box { 31 | 32 | G_BEGIN_DECLS 33 | 34 | #define EE_TYPE_AUTOGAIN_BOX (autogain_box_get_type()) 35 | 36 | G_DECLARE_FINAL_TYPE(AutogainBox, autogain_box, EE, AUTOGAIN_BOX, GtkBox) 37 | 38 | G_END_DECLS 39 | 40 | auto create() -> AutogainBox*; 41 | 42 | void setup(AutogainBox* self, std::shared_ptr<AutoGain> autogain, const std::string& schema_path); 43 | 44 | } // namespace ui::autogain_box 45 | -------------------------------------------------------------------------------- /include/bass_enhancer_preset.hpp: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright © 2017-2025 Wellington Wallace 3 | * 4 | * This file is part of Easy Effects 5 | * 6 | * Easy Effects is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * Easy Effects is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with Easy Effects. If not, see <https://www.gnu.org/licenses/>. 18 | */ 19 | 20 | #pragma once 21 | 22 | #include <nlohmann/json_fwd.hpp> 23 | #include "plugin_preset_base.hpp" 24 | #include "preset_type.hpp" 25 | 26 | class BassEnhancerPreset : public PluginPresetBase { 27 | public: 28 | explicit BassEnhancerPreset(PresetType preset_type, const int& index = 0); 29 | 30 | private: 31 | void save(nlohmann::json& json) override; 32 | 33 | void load(const nlohmann::json& json) override; 34 | }; 35 | -------------------------------------------------------------------------------- /include/bass_enhancer_ui.hpp: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright © 2017-2025 Wellington Wallace 3 | * 4 | * This file is part of Easy Effects. 5 | * 6 | * Easy Effects is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * Easy Effects is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with Easy Effects. If not, see <https://www.gnu.org/licenses/>. 18 | */ 19 | 20 | #pragma once 21 | 22 | #include <adwaita.h> 23 | #include <glib-object.h> 24 | #include <glibconfig.h> 25 | #include <gtk/gtkbox.h> 26 | #include <memory> 27 | #include <string> 28 | #include "bass_enhancer.hpp" 29 | 30 | namespace ui::bass_enhancer_box { 31 | 32 | G_BEGIN_DECLS 33 | 34 | #define EE_TYPE_BASS_ENHANCER_BOX (bass_enhancer_box_get_type()) 35 | 36 | G_DECLARE_FINAL_TYPE(BassEnhancerBox, bass_enhancer_box, EE, BASS_ENHANCER_BOX, GtkBox) 37 | 38 | G_END_DECLS 39 | 40 | auto create() -> BassEnhancerBox*; 41 | 42 | void setup(BassEnhancerBox* self, std::shared_ptr<BassEnhancer> bass_enhancer, const std::string& schema_path); 43 | 44 | } // namespace ui::bass_enhancer_box 45 | -------------------------------------------------------------------------------- /include/bass_loudness.hpp: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright © 2017-2025 Wellington Wallace 3 | * 4 | * This file is part of Easy Effects. 5 | * 6 | * Easy Effects is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * Easy Effects is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with Easy Effects. If not, see <https://www.gnu.org/licenses/>. 18 | */ 19 | 20 | #pragma once 21 | 22 | #include <span> 23 | #include <string> 24 | #include "pipe_manager.hpp" 25 | #include "plugin_base.hpp" 26 | 27 | class BassLoudness : public PluginBase { 28 | public: 29 | BassLoudness(const std::string& tag, 30 | const std::string& schema, 31 | const std::string& schema_path, 32 | PipeManager* pipe_manager, 33 | PipelineType pipe_type); 34 | BassLoudness(const BassLoudness&) = delete; 35 | auto operator=(const BassLoudness&) -> BassLoudness& = delete; 36 | BassLoudness(const BassLoudness&&) = delete; 37 | auto operator=(const BassLoudness&&) -> BassLoudness& = delete; 38 | ~BassLoudness() override; 39 | 40 | void setup() override; 41 | 42 | void process(std::span<float>& left_in, 43 | std::span<float>& right_in, 44 | std::span<float>& left_out, 45 | std::span<float>& right_out) override; 46 | 47 | auto get_latency_seconds() -> float override; 48 | 49 | private: 50 | }; 51 | -------------------------------------------------------------------------------- /include/bass_loudness_preset.hpp: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright © 2017-2025 Wellington Wallace 3 | * 4 | * This file is part of Easy Effects 5 | * 6 | * Easy Effects is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * Easy Effects is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with Easy Effects. If not, see <https://www.gnu.org/licenses/>. 18 | */ 19 | 20 | #pragma once 21 | 22 | #include <nlohmann/json_fwd.hpp> 23 | #include "plugin_preset_base.hpp" 24 | #include "preset_type.hpp" 25 | 26 | class BassLoudnessPreset : public PluginPresetBase { 27 | public: 28 | explicit BassLoudnessPreset(PresetType preset_type, const int& index = 0); 29 | 30 | private: 31 | void save(nlohmann::json& json) override; 32 | 33 | void load(const nlohmann::json& json) override; 34 | }; 35 | -------------------------------------------------------------------------------- /include/bass_loudness_ui.hpp: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright © 2017-2025 Wellington Wallace 3 | * 4 | * This file is part of Easy Effects. 5 | * 6 | * Easy Effects is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * Easy Effects is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with Easy Effects. If not, see <https://www.gnu.org/licenses/>. 18 | */ 19 | 20 | #pragma once 21 | 22 | #include <adwaita.h> 23 | #include <glib-object.h> 24 | #include <glibconfig.h> 25 | #include <gtk/gtkbox.h> 26 | #include <memory> 27 | #include <string> 28 | #include "bass_loudness.hpp" 29 | 30 | namespace ui::bass_loudness_box { 31 | 32 | G_BEGIN_DECLS 33 | 34 | #define EE_TYPE_BASS_LOUDNESS_BOX (bass_loudness_box_get_type()) 35 | 36 | G_DECLARE_FINAL_TYPE(BassLoudnessBox, bass_loudness_box, EE, BASS_LOUDNESS_BOX, GtkBox) 37 | 38 | G_END_DECLS 39 | 40 | auto create() -> BassLoudnessBox*; 41 | 42 | void setup(BassLoudnessBox* self, std::shared_ptr<BassLoudness> bass_loudness, const std::string& schema_path); 43 | 44 | } // namespace ui::bass_loudness_box 45 | -------------------------------------------------------------------------------- /include/blocklist_menu.hpp: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright © 2017-2025 Wellington Wallace 3 | * 4 | * This file is part of Easy Effects. 5 | * 6 | * Easy Effects is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * Easy Effects is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with Easy Effects. If not, see <https://www.gnu.org/licenses/>. 18 | */ 19 | 20 | #pragma once 21 | 22 | #include <adwaita.h> 23 | #include <glib-object.h> 24 | #include <glibconfig.h> 25 | #include <gtk/gtkpopover.h> 26 | #include "application.hpp" 27 | #include "pipeline_type.hpp" 28 | 29 | namespace ui::blocklist_menu { 30 | 31 | G_BEGIN_DECLS 32 | 33 | #define EE_TYPE_BLOCKLIST_MENU (blocklist_menu_get_type()) 34 | 35 | G_DECLARE_FINAL_TYPE(BlocklistMenu, blocklist_menu, EE, BLOCKLIST_MENU, GtkPopover) 36 | 37 | G_END_DECLS 38 | 39 | auto create() -> BlocklistMenu*; 40 | 41 | void setup(BlocklistMenu* self, app::Application* application, PipelineType pipeline_type); 42 | 43 | } // namespace ui::blocklist_menu 44 | -------------------------------------------------------------------------------- /include/client_info_holder.hpp: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright © 2017-2025 Wellington Wallace 3 | * 4 | * This file is part of Easy Effects. 5 | * 6 | * Easy Effects is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * Easy Effects is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with Easy Effects. If not, see <https://www.gnu.org/licenses/>. 18 | */ 19 | 20 | #pragma once 21 | 22 | #include <glib-object.h> 23 | #include <glibconfig.h> 24 | #include <sigc++/signal.h> 25 | #include "pipe_objects.hpp" 26 | 27 | namespace ui::holders { 28 | 29 | G_BEGIN_DECLS 30 | 31 | #define EE_TYPE_CLIENT_INFO_HOLDER (client_info_holder_get_type()) 32 | 33 | G_DECLARE_FINAL_TYPE(ClientInfoHolder, client_info_holder, EE, CLIENT_INFO_HOLDER, GObject) 34 | 35 | G_END_DECLS 36 | 37 | struct _ClientInfoHolder { 38 | GObject parent_instance; 39 | 40 | ClientInfo* info; 41 | 42 | sigc::signal<void(const ClientInfo)> info_updated; 43 | }; 44 | 45 | auto create(const ClientInfo& info) -> ClientInfoHolder*; 46 | 47 | } // namespace ui::holders 48 | -------------------------------------------------------------------------------- /include/compressor_preset.hpp: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright © 2017-2025 Wellington Wallace 3 | * 4 | * This file is part of Easy Effects. 5 | * 6 | * Easy Effects is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * Easy Effects is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with Easy Effects. If not, see <https://www.gnu.org/licenses/>. 18 | */ 19 | 20 | #pragma once 21 | 22 | #include <nlohmann/json_fwd.hpp> 23 | #include "plugin_preset_base.hpp" 24 | #include "preset_type.hpp" 25 | 26 | class CompressorPreset : public PluginPresetBase { 27 | public: 28 | explicit CompressorPreset(PresetType preset_type, const int& index = 0); 29 | 30 | private: 31 | void save(nlohmann::json& json) override; 32 | 33 | void load(const nlohmann::json& json) override; 34 | }; 35 | -------------------------------------------------------------------------------- /include/compressor_ui.hpp: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright © 2017-2025 Wellington Wallace 3 | * 4 | * This file is part of Easy Effects. 5 | * 6 | * Easy Effects is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * Easy Effects is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with Easy Effects. If not, see <https://www.gnu.org/licenses/>. 18 | */ 19 | 20 | #pragma once 21 | 22 | #include <adwaita.h> 23 | #include <glib-object.h> 24 | #include <glibconfig.h> 25 | #include <gtk/gtkbox.h> 26 | #include <memory> 27 | #include <string> 28 | #include "compressor.hpp" 29 | #include "pipe_manager.hpp" 30 | 31 | namespace ui::compressor_box { 32 | 33 | G_BEGIN_DECLS 34 | 35 | #define EE_TYPE_COMPRESSOR_BOX (compressor_box_get_type()) 36 | 37 | G_DECLARE_FINAL_TYPE(CompressorBox, compressor_box, EE, COMPRESSOR_BOX, GtkBox) 38 | 39 | G_END_DECLS 40 | 41 | auto create() -> CompressorBox*; 42 | 43 | void setup(CompressorBox* self, 44 | std::shared_ptr<Compressor> compressor, 45 | const std::string& schema_path, 46 | PipeManager* pm); 47 | 48 | } // namespace ui::compressor_box 49 | -------------------------------------------------------------------------------- /include/convolver_menu_combine.hpp: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright © 2017-2025 Wellington Wallace 3 | * 4 | * This file is part of Easy Effects. 5 | * 6 | * Easy Effects is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * Easy Effects is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with Easy Effects. If not, see <https://www.gnu.org/licenses/>. 18 | */ 19 | 20 | #pragma once 21 | 22 | #include <glib-object.h> 23 | #include <glibconfig.h> 24 | #include <gtk/gtk.h> 25 | #include <string> 26 | 27 | namespace ui::convolver_menu_combine { 28 | 29 | G_BEGIN_DECLS 30 | 31 | #define EE_TYPE_CONVOLVER_MENU_COMBINE (convolver_menu_combine_get_type()) 32 | 33 | G_DECLARE_FINAL_TYPE(ConvolverMenuCombine, convolver_menu_combine, EE, CONVOLVER_MENU_COMBINE, GtkPopover) 34 | 35 | G_END_DECLS 36 | 37 | auto create() -> ConvolverMenuCombine*; 38 | 39 | void append_to_string_list(ConvolverMenuCombine* self, const std::string& irs_filename); 40 | 41 | void remove_from_string_list(ConvolverMenuCombine* self, const std::string& irs_filename); 42 | 43 | } // namespace ui::convolver_menu_combine 44 | -------------------------------------------------------------------------------- /include/convolver_menu_impulses.hpp: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright © 2017-2025 Wellington Wallace 3 | * 4 | * This file is part of Easy Effects. 5 | * 6 | * Easy Effects is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * Easy Effects is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with Easy Effects. If not, see <https://www.gnu.org/licenses/>. 18 | */ 19 | 20 | #pragma once 21 | 22 | #include <adwaita.h> 23 | #include <glib-object.h> 24 | #include <glibconfig.h> 25 | #include <gtk/gtkpopover.h> 26 | #include <sndfile.hh> 27 | #include <string> 28 | #include "application.hpp" 29 | 30 | namespace ui::convolver_menu_impulses { 31 | 32 | G_BEGIN_DECLS 33 | 34 | #define EE_TYPE_CONVOLVER_MENU_IMPULSES (convolver_menu_impulses_get_type()) 35 | 36 | G_DECLARE_FINAL_TYPE(ConvolverMenuImpulses, convolver_menu_impulses, EE, CONVOLVER_MENU_IMPULSES, GtkPopover) 37 | 38 | G_END_DECLS 39 | 40 | auto create() -> ConvolverMenuImpulses*; 41 | 42 | void setup(ConvolverMenuImpulses* self, 43 | const std::string& schema_path, 44 | app::Application* application, 45 | std::shared_ptr<Convolver> convolver); 46 | 47 | void append_to_string_list(ConvolverMenuImpulses* self, const std::string& irs_filename); 48 | 49 | void remove_from_string_list(ConvolverMenuImpulses* self, const std::string& irs_filename); 50 | 51 | } // namespace ui::convolver_menu_impulses 52 | -------------------------------------------------------------------------------- /include/convolver_preset.hpp: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright © 2017-2025 Wellington Wallace 3 | * 4 | * This file is part of Easy Effects. 5 | * 6 | * Easy Effects is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * Easy Effects is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with Easy Effects. If not, see <https://www.gnu.org/licenses/>. 18 | */ 19 | 20 | #pragma once 21 | 22 | #include <nlohmann/json_fwd.hpp> 23 | #include "plugin_preset_base.hpp" 24 | #include "preset_type.hpp" 25 | 26 | class ConvolverPreset : public PluginPresetBase { 27 | public: 28 | explicit ConvolverPreset(PresetType preset_type, const int& index = 0); 29 | 30 | private: 31 | void save(nlohmann::json& json) override; 32 | 33 | void load(const nlohmann::json& json) override; 34 | }; 35 | -------------------------------------------------------------------------------- /include/convolver_ui.hpp: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright © 2017-2025 Wellington Wallace 3 | * 4 | * This file is part of Easy Effects. 5 | * 6 | * Easy Effects is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * Easy Effects is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with Easy Effects. If not, see <https://www.gnu.org/licenses/>. 18 | */ 19 | 20 | #pragma once 21 | 22 | #include <adwaita.h> 23 | #include <glib-object.h> 24 | #include <glibconfig.h> 25 | #include <gtk/gtkbox.h> 26 | #include <memory> 27 | #include <string> 28 | #include "application.hpp" 29 | #include "convolver.hpp" 30 | 31 | namespace ui::convolver_box { 32 | 33 | G_BEGIN_DECLS 34 | 35 | #define EE_TYPE_CONVOLVER_BOX (convolver_box_get_type()) 36 | 37 | G_DECLARE_FINAL_TYPE(ConvolverBox, convolver_box, EE, CONVOLVER_BOX, GtkBox) 38 | 39 | G_END_DECLS 40 | 41 | auto create() -> ConvolverBox*; 42 | 43 | void setup(ConvolverBox* self, 44 | std::shared_ptr<Convolver> convolver, 45 | const std::string& schema_path, 46 | app::Application* application); 47 | 48 | } // namespace ui::convolver_box 49 | -------------------------------------------------------------------------------- /include/convolver_ui_common.hpp: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright © 2017-2025 Wellington Wallace 3 | * 4 | * This file is part of Easy Effects. 5 | * 6 | * Easy Effects is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * Easy Effects is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with Easy Effects. If not, see <https://www.gnu.org/licenses/>. 18 | */ 19 | 20 | #pragma once 21 | 22 | #include <filesystem> 23 | #include <string> 24 | #include <tuple> 25 | #include <vector> 26 | 27 | namespace ui::convolver { 28 | 29 | auto read_kernel(std::filesystem::path irs_dir, const std::string& irs_ext, const std::string& file_name) 30 | -> std::tuple<int, std::vector<float>, std::vector<float>>; 31 | 32 | } 33 | -------------------------------------------------------------------------------- /include/crossfeed_preset.hpp: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright © 2017-2025 Wellington Wallace 3 | * 4 | * This file is part of Easy Effects. 5 | * 6 | * Easy Effects is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * Easy Effects is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with Easy Effects. If not, see <https://www.gnu.org/licenses/>. 18 | */ 19 | 20 | #pragma once 21 | 22 | #include <nlohmann/json_fwd.hpp> 23 | #include "plugin_preset_base.hpp" 24 | #include "preset_type.hpp" 25 | 26 | class CrossfeedPreset : public PluginPresetBase { 27 | public: 28 | explicit CrossfeedPreset(PresetType preset_type, const int& index = 0); 29 | 30 | private: 31 | void save(nlohmann::json& json) override; 32 | 33 | void load(const nlohmann::json& json) override; 34 | }; 35 | -------------------------------------------------------------------------------- /include/crossfeed_ui.hpp: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright © 2017-2025 Wellington Wallace 3 | * 4 | * This file is part of Easy Effects. 5 | * 6 | * Easy Effects is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * Easy Effects is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with Easy Effects. If not, see <https://www.gnu.org/licenses/>. 18 | */ 19 | 20 | #pragma once 21 | 22 | #include <adwaita.h> 23 | #include <glib-object.h> 24 | #include <glibconfig.h> 25 | #include <gtk/gtkbox.h> 26 | #include <memory> 27 | #include <string> 28 | #include "crossfeed.hpp" 29 | 30 | namespace ui::crossfeed_box { 31 | 32 | G_BEGIN_DECLS 33 | 34 | #define EE_TYPE_CROSSFEED_BOX (crossfeed_box_get_type()) 35 | 36 | G_DECLARE_FINAL_TYPE(CrossfeedBox, crossfeed_box, EE, CROSSFEED_BOX, GtkBox) 37 | 38 | G_END_DECLS 39 | 40 | auto create() -> CrossfeedBox*; 41 | 42 | void setup(CrossfeedBox* self, std::shared_ptr<Crossfeed> crossfeed, const std::string& schema_path); 43 | 44 | } // namespace ui::crossfeed_box 45 | -------------------------------------------------------------------------------- /include/crystalizer_preset.hpp: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright © 2017-2025 Wellington Wallace 3 | * 4 | * This file is part of Easy Effects. 5 | * 6 | * Easy Effects is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * Easy Effects is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with Easy Effects. If not, see <https://www.gnu.org/licenses/>. 18 | */ 19 | 20 | #pragma once 21 | 22 | #include <nlohmann/json_fwd.hpp> 23 | #include "plugin_preset_base.hpp" 24 | #include "preset_type.hpp" 25 | 26 | class CrystalizerPreset : public PluginPresetBase { 27 | public: 28 | explicit CrystalizerPreset(PresetType preset_type, const int& index = 0); 29 | 30 | private: 31 | void save(nlohmann::json& json) override; 32 | 33 | void load(const nlohmann::json& json) override; 34 | }; 35 | -------------------------------------------------------------------------------- /include/crystalizer_ui.hpp: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright © 2017-2025 Wellington Wallace 3 | * 4 | * This file is part of Easy Effects. 5 | * 6 | * Easy Effects is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * Easy Effects is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with Easy Effects. If not, see <https://www.gnu.org/licenses/>. 18 | */ 19 | 20 | #pragma once 21 | 22 | #include <adwaita.h> 23 | #include <glib-object.h> 24 | #include <glibconfig.h> 25 | #include <gtk/gtkbox.h> 26 | #include <memory> 27 | #include <string> 28 | #include "crystalizer.hpp" 29 | 30 | namespace ui::crystalizer_box { 31 | 32 | G_BEGIN_DECLS 33 | 34 | #define EE_TYPE_CRYSTALIZER_BOX (crystalizer_box_get_type()) 35 | 36 | G_DECLARE_FINAL_TYPE(CrystalizerBox, crystalizer_box, EE, CRYSTALIZER_BOX, GtkBox) 37 | 38 | G_END_DECLS 39 | 40 | auto create() -> CrystalizerBox*; 41 | 42 | void setup(CrystalizerBox* self, std::shared_ptr<Crystalizer> crystalizer, const std::string& schema_path); 43 | 44 | } // namespace ui::crystalizer_box 45 | -------------------------------------------------------------------------------- /include/deepfilternet_preset.hpp: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright © 2023 Torge Matthies 3 | * 4 | * This file is part of Easy Effects. 5 | * 6 | * Easy Effects is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * Easy Effects is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with Easy Effects. If not, see <https://www.gnu.org/licenses/>. 18 | */ 19 | 20 | #pragma once 21 | 22 | #include <nlohmann/json_fwd.hpp> 23 | #include "plugin_preset_base.hpp" 24 | #include "preset_type.hpp" 25 | 26 | class DeepFilterNetPreset : public PluginPresetBase { 27 | public: 28 | explicit DeepFilterNetPreset(PresetType preset_type, const int& index = 0); 29 | 30 | private: 31 | void save(nlohmann::json& json) override; 32 | 33 | void load(const nlohmann::json& json) override; 34 | }; 35 | -------------------------------------------------------------------------------- /include/deepfilternet_ui.hpp: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright © 2023 Torge Matthies 3 | * 4 | * This file is part of Easy Effects. 5 | * 6 | * Easy Effects is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * Easy Effects is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with Easy Effects. If not, see <https://www.gnu.org/licenses/>. 18 | */ 19 | 20 | #pragma once 21 | 22 | #include <adwaita.h> 23 | #include <glib-object.h> 24 | #include <glibconfig.h> 25 | #include <gtk/gtkbox.h> 26 | #include <memory> 27 | #include <string> 28 | #include "deepfilternet.hpp" 29 | 30 | namespace ui::deepfilternet_box { 31 | 32 | G_BEGIN_DECLS 33 | 34 | #define EE_TYPE_DEEPFILTERNET_BOX (deepfilternet_box_get_type()) 35 | 36 | G_DECLARE_FINAL_TYPE(DeepFilterNetBox, deepfilternet_box, EE, DEEPFILTERNET_BOX, GtkBox) 37 | 38 | G_END_DECLS 39 | 40 | auto create() -> DeepFilterNetBox*; 41 | 42 | void setup(DeepFilterNetBox* self, std::shared_ptr<DeepFilterNet> deepfilternet, const std::string& schema_path); 43 | 44 | } // namespace ui::deepfilternet_box 45 | -------------------------------------------------------------------------------- /include/deesser_preset.hpp: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright © 2017-2025 Wellington Wallace 3 | * 4 | * This file is part of Easy Effects. 5 | * 6 | * Easy Effects is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * Easy Effects is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with Easy Effects. If not, see <https://www.gnu.org/licenses/>. 18 | */ 19 | 20 | #pragma once 21 | 22 | #include <nlohmann/json_fwd.hpp> 23 | #include "plugin_preset_base.hpp" 24 | #include "preset_type.hpp" 25 | 26 | class DeesserPreset : public PluginPresetBase { 27 | public: 28 | explicit DeesserPreset(PresetType preset_type, const int& index = 0); 29 | 30 | private: 31 | void save(nlohmann::json& json) override; 32 | 33 | void load(const nlohmann::json& json) override; 34 | }; 35 | -------------------------------------------------------------------------------- /include/deesser_ui.hpp: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright © 2017-2025 Wellington Wallace 3 | * 4 | * This file is part of Easy Effects. 5 | * 6 | * Easy Effects is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * Easy Effects is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with Easy Effects. If not, see <https://www.gnu.org/licenses/>. 18 | */ 19 | 20 | #pragma once 21 | 22 | #include <adwaita.h> 23 | #include <glib-object.h> 24 | #include <glibconfig.h> 25 | #include <gtk/gtkbox.h> 26 | #include <memory> 27 | #include <string> 28 | #include "deesser.hpp" 29 | 30 | namespace ui::deesser_box { 31 | 32 | G_BEGIN_DECLS 33 | 34 | #define EE_TYPE_DEESSER_BOX (deesser_box_get_type()) 35 | 36 | G_DECLARE_FINAL_TYPE(DeesserBox, deesser_box, EE, DEESSER_BOX, GtkBox) 37 | 38 | G_END_DECLS 39 | 40 | auto create() -> DeesserBox*; 41 | 42 | void setup(DeesserBox* self, std::shared_ptr<Deesser> deesser, const std::string& schema_path); 43 | 44 | } // namespace ui::deesser_box 45 | -------------------------------------------------------------------------------- /include/delay.hpp: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright © 2017-2025 Wellington Wallace 3 | * 4 | * This file is part of Easy Effects. 5 | * 6 | * Easy Effects is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * Easy Effects is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with Easy Effects. If not, see <https://www.gnu.org/licenses/>. 18 | */ 19 | 20 | #pragma once 21 | 22 | #include <sys/types.h> 23 | #include <span> 24 | #include <string> 25 | #include "pipe_manager.hpp" 26 | #include "plugin_base.hpp" 27 | 28 | class Delay : public PluginBase { 29 | public: 30 | Delay(const std::string& tag, 31 | const std::string& schema, 32 | const std::string& schema_path, 33 | PipeManager* pipe_manager, 34 | PipelineType pipe_type); 35 | Delay(const Delay&) = delete; 36 | auto operator=(const Delay&) -> Delay& = delete; 37 | Delay(const Delay&&) = delete; 38 | auto operator=(const Delay&&) -> Delay& = delete; 39 | ~Delay() override; 40 | 41 | void setup() override; 42 | 43 | void process(std::span<float>& left_in, 44 | std::span<float>& right_in, 45 | std::span<float>& left_out, 46 | std::span<float>& right_out) override; 47 | 48 | auto get_latency_seconds() -> float override; 49 | 50 | private: 51 | uint latency_n_frames = 0U; 52 | }; 53 | -------------------------------------------------------------------------------- /include/delay_preset.hpp: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright © 2017-2025 Wellington Wallace 3 | * 4 | * This file is part of Easy Effects. 5 | * 6 | * Easy Effects is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * Easy Effects is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with Easy Effects. If not, see <https://www.gnu.org/licenses/>. 18 | */ 19 | 20 | #pragma once 21 | 22 | #include <nlohmann/json_fwd.hpp> 23 | #include "plugin_preset_base.hpp" 24 | #include "preset_type.hpp" 25 | 26 | class DelayPreset : public PluginPresetBase { 27 | public: 28 | explicit DelayPreset(PresetType preset_type, const int& index = 0); 29 | 30 | private: 31 | void save(nlohmann::json& json) override; 32 | 33 | void load(const nlohmann::json& json) override; 34 | }; 35 | -------------------------------------------------------------------------------- /include/delay_ui.hpp: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright © 2017-2025 Wellington Wallace 3 | * 4 | * This file is part of Easy Effects. 5 | * 6 | * Easy Effects is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * Easy Effects is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with Easy Effects. If not, see <https://www.gnu.org/licenses/>. 18 | */ 19 | 20 | #pragma once 21 | 22 | #include <adwaita.h> 23 | #include <glib-object.h> 24 | #include <glibconfig.h> 25 | #include <gtk/gtkbox.h> 26 | #include <memory> 27 | #include <string> 28 | #include "delay.hpp" 29 | 30 | namespace ui::delay_box { 31 | 32 | G_BEGIN_DECLS 33 | 34 | #define EE_TYPE_DELAY_BOX (delay_box_get_type()) 35 | 36 | G_DECLARE_FINAL_TYPE(DelayBox, delay_box, EE, DELAY_BOX, GtkBox) 37 | 38 | G_END_DECLS 39 | 40 | auto create() -> DelayBox*; 41 | 42 | void setup(DelayBox* self, std::shared_ptr<Delay> delay, const std::string& schema_path); 43 | 44 | } // namespace ui::delay_box 45 | -------------------------------------------------------------------------------- /include/echo_canceller_preset.hpp: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright © 2017-2025 Wellington Wallace 3 | * 4 | * This file is part of Easy Effects. 5 | * 6 | * Easy Effects is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * Easy Effects is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with Easy Effects. If not, see <https://www.gnu.org/licenses/>. 18 | */ 19 | 20 | #pragma once 21 | 22 | #include <nlohmann/json_fwd.hpp> 23 | #include "plugin_preset_base.hpp" 24 | #include "preset_type.hpp" 25 | 26 | class EchoCancellerPreset : public PluginPresetBase { 27 | public: 28 | explicit EchoCancellerPreset(PresetType preset_type, const int& index = 0); 29 | 30 | private: 31 | void save(nlohmann::json& json) override; 32 | 33 | void load(const nlohmann::json& json) override; 34 | }; 35 | -------------------------------------------------------------------------------- /include/echo_canceller_ui.hpp: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright © 2017-2025 Wellington Wallace 3 | * 4 | * This file is part of Easy Effects. 5 | * 6 | * Easy Effects is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * Easy Effects is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with Easy Effects. If not, see <https://www.gnu.org/licenses/>. 18 | */ 19 | 20 | #pragma once 21 | 22 | #include <adwaita.h> 23 | #include <glib-object.h> 24 | #include <glibconfig.h> 25 | #include <gtk/gtkbox.h> 26 | #include <memory> 27 | #include <string> 28 | #include "echo_canceller.hpp" 29 | 30 | namespace ui::echo_canceller_box { 31 | 32 | G_BEGIN_DECLS 33 | 34 | #define EE_TYPE_ECHO_CANCELLER_BOX (echo_canceller_box_get_type()) 35 | 36 | G_DECLARE_FINAL_TYPE(EchoCancellerBox, echo_canceller_box, EE, ECHO_CANCELLER_BOX, GtkBox) 37 | 38 | G_END_DECLS 39 | 40 | auto create() -> EchoCancellerBox*; 41 | 42 | void setup(EchoCancellerBox* self, std::shared_ptr<EchoCanceller> echo_canceller, const std::string& schema_path); 43 | 44 | } // namespace ui::echo_canceller_box 45 | -------------------------------------------------------------------------------- /include/effects_box.hpp: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright © 2017-2025 Wellington Wallace 3 | * 4 | * This file is part of Easy Effects. 5 | * 6 | * Easy Effects is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * Easy Effects is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with Easy Effects. If not, see <https://www.gnu.org/licenses/>. 18 | */ 19 | 20 | #pragma once 21 | 22 | #include <adwaita.h> 23 | #include <glib-object.h> 24 | #include <glibconfig.h> 25 | #include <gsl/gsl_spline.h> 26 | #include <gtk/gtkbox.h> 27 | #include <gtk/gtkicontheme.h> 28 | #include "application.hpp" 29 | #include "pipeline_type.hpp" 30 | 31 | namespace ui::effects_box { 32 | 33 | G_BEGIN_DECLS 34 | 35 | #define EE_TYPE_EFFECTS_BOX (effects_box_get_type()) 36 | 37 | G_DECLARE_FINAL_TYPE(EffectsBox, effects_box, EE, EFFECTS_BOX, GtkBox) 38 | 39 | G_END_DECLS 40 | 41 | auto create() -> EffectsBox*; 42 | 43 | void setup(EffectsBox* self, app::Application* application, PipelineType pipeline_type, GtkIconTheme* icon_theme); 44 | 45 | } // namespace ui::effects_box 46 | -------------------------------------------------------------------------------- /include/equalizer_band_box.hpp: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright © 2017-2025 Wellington Wallace 3 | * 4 | * This file is part of Easy Effects. 5 | * 6 | * Easy Effects is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * Easy Effects is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with Easy Effects. If not, see <https://www.gnu.org/licenses/>. 18 | */ 19 | 20 | #pragma once 21 | 22 | #include <adwaita.h> 23 | #include <gio/gio.h> 24 | #include <glib-object.h> 25 | #include <glibconfig.h> 26 | #include <gtk/gtkbox.h> 27 | 28 | namespace ui::equalizer_band_box { 29 | 30 | G_BEGIN_DECLS 31 | 32 | #define EE_TYPE_EQUALIZER_BAND_BOX (equalizer_band_box_get_type()) 33 | 34 | G_DECLARE_FINAL_TYPE(EqualizerBandBox, equalizer_band_box, EE, EQUALIZER_BAND_BOX, GtkBox) 35 | 36 | G_END_DECLS 37 | 38 | auto create() -> EqualizerBandBox*; 39 | 40 | void setup(EqualizerBandBox* self, GSettings* settings); 41 | 42 | void bind(EqualizerBandBox* self, int index); 43 | 44 | } // namespace ui::equalizer_band_box 45 | -------------------------------------------------------------------------------- /include/equalizer_ui.hpp: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright © 2017-2025 Wellington Wallace 3 | * 4 | * This file is part of Easy Effects. 5 | * 6 | * Easy Effects is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * Easy Effects is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with Easy Effects. If not, see <https://www.gnu.org/licenses/>. 18 | */ 19 | 20 | #pragma once 21 | 22 | #include <adwaita.h> 23 | #include <glib-object.h> 24 | #include <glibconfig.h> 25 | #include <gtk/gtkbox.h> 26 | #include <memory> 27 | #include <string> 28 | #include "application.hpp" 29 | #include "equalizer.hpp" 30 | 31 | namespace ui::equalizer_box { 32 | 33 | G_BEGIN_DECLS 34 | 35 | #define EE_TYPE_EQUALIZER_BOX (equalizer_box_get_type()) 36 | 37 | G_DECLARE_FINAL_TYPE(EqualizerBox, equalizer_box, EE, EQUALIZER_BOX, GtkBox) 38 | 39 | G_END_DECLS 40 | 41 | auto create() -> EqualizerBox*; 42 | 43 | void setup(EqualizerBox* self, 44 | std::shared_ptr<Equalizer> equalizer, 45 | const std::string& schema_path, 46 | app::Application* application); 47 | 48 | } // namespace ui::equalizer_box 49 | -------------------------------------------------------------------------------- /include/exciter_preset.hpp: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright © 2017-2025 Wellington Wallace 3 | * 4 | * This file is part of Easy Effects. 5 | * 6 | * Easy Effects is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * Easy Effects is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with Easy Effects. If not, see <https://www.gnu.org/licenses/>. 18 | */ 19 | 20 | #pragma once 21 | 22 | #include <nlohmann/json_fwd.hpp> 23 | #include "plugin_preset_base.hpp" 24 | #include "preset_type.hpp" 25 | 26 | class ExciterPreset : public PluginPresetBase { 27 | public: 28 | explicit ExciterPreset(PresetType preset_type, const int& index = 0); 29 | 30 | private: 31 | void save(nlohmann::json& json) override; 32 | 33 | void load(const nlohmann::json& json) override; 34 | }; 35 | -------------------------------------------------------------------------------- /include/exciter_ui.hpp: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright © 2017-2025 Wellington Wallace 3 | * 4 | * This file is part of Easy Effects. 5 | * 6 | * Easy Effects is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * Easy Effects is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with Easy Effects. If not, see <https://www.gnu.org/licenses/>. 18 | */ 19 | 20 | #pragma once 21 | 22 | #include <adwaita.h> 23 | #include <glib-object.h> 24 | #include <glibconfig.h> 25 | #include <gtk/gtkbox.h> 26 | #include <memory> 27 | #include <string> 28 | #include "exciter.hpp" 29 | 30 | namespace ui::exciter_box { 31 | 32 | G_BEGIN_DECLS 33 | 34 | #define EE_TYPE_EXCITER_BOX (exciter_box_get_type()) 35 | 36 | G_DECLARE_FINAL_TYPE(ExciterBox, exciter_box, EE, EXCITER_BOX, GtkBox) 37 | 38 | G_END_DECLS 39 | 40 | auto create() -> ExciterBox*; 41 | 42 | void setup(ExciterBox* self, std::shared_ptr<Exciter> exciter, const std::string& schema_path); 43 | 44 | } // namespace ui::exciter_box 45 | -------------------------------------------------------------------------------- /include/expander_preset.hpp: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright © 2017-2025 Wellington Wallace 3 | * 4 | * This file is part of Easy Effects. 5 | * 6 | * Easy Effects is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * Easy Effects is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with Easy Effects. If not, see <https://www.gnu.org/licenses/>. 18 | */ 19 | 20 | #pragma once 21 | 22 | #include <nlohmann/json_fwd.hpp> 23 | #include "plugin_preset_base.hpp" 24 | #include "preset_type.hpp" 25 | 26 | class ExpanderPreset : public PluginPresetBase { 27 | public: 28 | explicit ExpanderPreset(PresetType preset_type, const int& index = 0); 29 | 30 | private: 31 | void save(nlohmann::json& json) override; 32 | 33 | void load(const nlohmann::json& json) override; 34 | }; 35 | -------------------------------------------------------------------------------- /include/expander_ui.hpp: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright © 2017-2025 Wellington Wallace 3 | * 4 | * This file is part of Easy Effects. 5 | * 6 | * Easy Effects is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * Easy Effects is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with Easy Effects. If not, see <https://www.gnu.org/licenses/>. 18 | */ 19 | 20 | #pragma once 21 | 22 | #include <adwaita.h> 23 | #include <glib-object.h> 24 | #include <glibconfig.h> 25 | #include <gtk/gtkbox.h> 26 | #include <memory> 27 | #include <string> 28 | #include "expander.hpp" 29 | #include "pipe_manager.hpp" 30 | 31 | namespace ui::expander_box { 32 | 33 | G_BEGIN_DECLS 34 | 35 | #define EE_TYPE_EXPANDER_BOX (expander_box_get_type()) 36 | 37 | G_DECLARE_FINAL_TYPE(ExpanderBox, expander_box, EE, EXPANDER_BOX, GtkBox) 38 | 39 | G_END_DECLS 40 | 41 | auto create() -> ExpanderBox*; 42 | 43 | void setup(ExpanderBox* self, std::shared_ptr<Expander> expander, const std::string& schema_path, PipeManager* pm); 44 | 45 | } // namespace ui::expander_box 46 | -------------------------------------------------------------------------------- /include/filter.hpp: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright © 2017-2025 Wellington Wallace 3 | * 4 | * This file is part of Easy Effects. 5 | * 6 | * Easy Effects is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * Easy Effects is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with Easy Effects. If not, see <https://www.gnu.org/licenses/>. 18 | */ 19 | 20 | #pragma once 21 | 22 | #include <span> 23 | #include <string> 24 | #include "pipe_manager.hpp" 25 | #include "plugin_base.hpp" 26 | 27 | class Filter : public PluginBase { 28 | public: 29 | Filter(const std::string& tag, 30 | const std::string& schema, 31 | const std::string& schema_path, 32 | PipeManager* pipe_manager, 33 | PipelineType pipe_type); 34 | Filter(const Filter&) = delete; 35 | auto operator=(const Filter&) -> Filter& = delete; 36 | Filter(const Filter&&) = delete; 37 | auto operator=(const Filter&&) -> Filter& = delete; 38 | ~Filter() override; 39 | 40 | void setup() override; 41 | 42 | void process(std::span<float>& left_in, 43 | std::span<float>& right_in, 44 | std::span<float>& left_out, 45 | std::span<float>& right_out) override; 46 | 47 | auto get_latency_seconds() -> float override; 48 | 49 | private: 50 | }; 51 | -------------------------------------------------------------------------------- /include/filter_preset.hpp: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright © 2017-2025 Wellington Wallace 3 | * 4 | * This file is part of Easy Effects. 5 | * 6 | * Easy Effects is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * Easy Effects is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with Easy Effects. If not, see <https://www.gnu.org/licenses/>. 18 | */ 19 | 20 | #pragma once 21 | 22 | #include <nlohmann/json_fwd.hpp> 23 | #include "plugin_preset_base.hpp" 24 | #include "preset_type.hpp" 25 | 26 | class FilterPreset : public PluginPresetBase { 27 | public: 28 | explicit FilterPreset(PresetType preset_type, const int& index = 0); 29 | 30 | private: 31 | void save(nlohmann::json& json) override; 32 | 33 | void load(const nlohmann::json& json) override; 34 | }; 35 | -------------------------------------------------------------------------------- /include/filter_ui.hpp: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright © 2017-2025 Wellington Wallace 3 | * 4 | * This file is part of Easy Effects. 5 | * 6 | * Easy Effects is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * Easy Effects is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with Easy Effects. If not, see <https://www.gnu.org/licenses/>. 18 | */ 19 | 20 | #pragma once 21 | 22 | #include <adwaita.h> 23 | #include <glib-object.h> 24 | #include <glibconfig.h> 25 | #include <gtk/gtkbox.h> 26 | #include <memory> 27 | #include <string> 28 | #include "filter.hpp" 29 | 30 | namespace ui::filter_box { 31 | 32 | G_BEGIN_DECLS 33 | 34 | #define EE_TYPE_FILTER_BOX (filter_box_get_type()) 35 | 36 | G_DECLARE_FINAL_TYPE(FilterBox, filter_box, EE, FILTER_BOX, GtkBox) 37 | 38 | G_END_DECLS 39 | 40 | auto create() -> FilterBox*; 41 | 42 | void setup(FilterBox* self, std::shared_ptr<Filter> filter, const std::string& schema_path); 43 | 44 | } // namespace ui::filter_box 45 | -------------------------------------------------------------------------------- /include/fir_filter_bandpass.hpp: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright © 2017-2025 Wellington Wallace 3 | * 4 | * This file is part of Easy Effects. 5 | * 6 | * Easy Effects is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * Easy Effects is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with Easy Effects. If not, see <https://www.gnu.org/licenses/>. 18 | */ 19 | 20 | #pragma once 21 | 22 | #include <string> 23 | #include "fir_filter_base.hpp" 24 | 25 | class FirFilterBandpass : public FirFilterBase { 26 | public: 27 | FirFilterBandpass(std::string tag); 28 | FirFilterBandpass(const FirFilterBandpass&) = delete; 29 | auto operator=(const FirFilterBandpass&) -> FirFilterBandpass& = delete; 30 | FirFilterBandpass(const FirFilterBandpass&&) = delete; 31 | auto operator=(const FirFilterBandpass&&) -> FirFilterBandpass& = delete; 32 | ~FirFilterBandpass() override; 33 | 34 | void setup() override; 35 | }; 36 | -------------------------------------------------------------------------------- /include/fir_filter_highpass.hpp: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright © 2017-2025 Wellington Wallace 3 | * 4 | * This file is part of Easy Effects. 5 | * 6 | * Easy Effects is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * Easy Effects is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with Easy Effects. If not, see <https://www.gnu.org/licenses/>. 18 | */ 19 | 20 | #pragma once 21 | 22 | #include <string> 23 | #include "fir_filter_base.hpp" 24 | 25 | class FirFilterHighpass : public FirFilterBase { 26 | public: 27 | FirFilterHighpass(std::string tag); 28 | FirFilterHighpass(const FirFilterHighpass&) = delete; 29 | auto operator=(const FirFilterHighpass&) -> FirFilterHighpass& = delete; 30 | FirFilterHighpass(const FirFilterHighpass&&) = delete; 31 | auto operator=(const FirFilterHighpass&&) -> FirFilterHighpass& = delete; 32 | ~FirFilterHighpass() override; 33 | 34 | void setup() override; 35 | }; 36 | -------------------------------------------------------------------------------- /include/fir_filter_lowpass.hpp: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright © 2017-2025 Wellington Wallace 3 | * 4 | * This file is part of Easy Effects. 5 | * 6 | * Easy Effects is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * Easy Effects is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with Easy Effects. If not, see <https://www.gnu.org/licenses/>. 18 | */ 19 | 20 | #pragma once 21 | 22 | #include <string> 23 | #include "fir_filter_base.hpp" 24 | 25 | class FirFilterLowpass : public FirFilterBase { 26 | public: 27 | FirFilterLowpass(std::string tag); 28 | FirFilterLowpass(const FirFilterLowpass&) = delete; 29 | auto operator=(const FirFilterLowpass&) -> FirFilterLowpass& = delete; 30 | FirFilterLowpass(const FirFilterLowpass&&) = delete; 31 | auto operator=(const FirFilterLowpass&&) -> FirFilterLowpass& = delete; 32 | ~FirFilterLowpass() override; 33 | 34 | void setup() override; 35 | }; 36 | -------------------------------------------------------------------------------- /include/gate_preset.hpp: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright © 2017-2025 Wellington Wallace 3 | * 4 | * This file is part of Easy Effects. 5 | * 6 | * Easy Effects is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * Easy Effects is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with Easy Effects. If not, see <https://www.gnu.org/licenses/>. 18 | */ 19 | 20 | #pragma once 21 | 22 | #include <nlohmann/json_fwd.hpp> 23 | #include "plugin_preset_base.hpp" 24 | #include "preset_type.hpp" 25 | 26 | class GatePreset : public PluginPresetBase { 27 | public: 28 | explicit GatePreset(PresetType preset_type, const int& index = 0); 29 | 30 | private: 31 | void save(nlohmann::json& json) override; 32 | 33 | void load(const nlohmann::json& json) override; 34 | }; 35 | -------------------------------------------------------------------------------- /include/gate_ui.hpp: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright © 2017-2025 Wellington Wallace 3 | * 4 | * This file is part of Easy Effects. 5 | * 6 | * Easy Effects is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * Easy Effects is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with Easy Effects. If not, see <https://www.gnu.org/licenses/>. 18 | */ 19 | 20 | #pragma once 21 | 22 | #include <adwaita.h> 23 | #include <glib-object.h> 24 | #include <glibconfig.h> 25 | #include <gtk/gtkbox.h> 26 | #include <memory> 27 | #include <string> 28 | #include "gate.hpp" 29 | #include "pipe_manager.hpp" 30 | 31 | namespace ui::gate_box { 32 | 33 | G_BEGIN_DECLS 34 | 35 | #define EE_TYPE_GATE_BOX (gate_box_get_type()) 36 | 37 | G_DECLARE_FINAL_TYPE(GateBox, gate_box, EE, GATE_BOX, GtkBox) 38 | 39 | G_END_DECLS 40 | 41 | auto create() -> GateBox*; 42 | 43 | void setup(GateBox* self, std::shared_ptr<Gate> gate, const std::string& schema_path, PipeManager* pm); 44 | 45 | } // namespace ui::gate_box 46 | -------------------------------------------------------------------------------- /include/level_meter_preset.hpp: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright © 2017-2025 Wellington Wallace 3 | * 4 | * This file is part of Easy Effects. 5 | * 6 | * Easy Effects is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * Easy Effects is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with Easy Effects. If not, see <https://www.gnu.org/licenses/>. 18 | */ 19 | 20 | #pragma once 21 | 22 | #include <nlohmann/json_fwd.hpp> 23 | #include "plugin_preset_base.hpp" 24 | #include "preset_type.hpp" 25 | 26 | class LevelMeterPreset : public PluginPresetBase { 27 | public: 28 | explicit LevelMeterPreset(PresetType preset_type, const int& index = 0); 29 | 30 | private: 31 | void save(nlohmann::json& json) override; 32 | 33 | void load(const nlohmann::json& json) override; 34 | }; 35 | -------------------------------------------------------------------------------- /include/level_meter_ui.hpp: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright © 2017-2025 Wellington Wallace 3 | * 4 | * This file is part of Easy Effects. 5 | * 6 | * Easy Effects is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * Easy Effects is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with Easy Effects. If not, see <https://www.gnu.org/licenses/>. 18 | */ 19 | 20 | #pragma once 21 | 22 | #include <adwaita.h> 23 | #include <glib-object.h> 24 | #include <glibconfig.h> 25 | #include <gtk/gtkbox.h> 26 | #include <memory> 27 | #include <string> 28 | #include "level_meter.hpp" 29 | 30 | namespace ui::level_meter_box { 31 | 32 | G_BEGIN_DECLS 33 | 34 | #define EE_TYPE_LEVEL_METER_BOX (level_meter_box_get_type()) 35 | 36 | G_DECLARE_FINAL_TYPE(LevelMeterBox, level_meter_box, EE, LEVEL_METER_BOX, GtkBox) 37 | 38 | G_END_DECLS 39 | 40 | auto create() -> LevelMeterBox*; 41 | 42 | void setup(LevelMeterBox* self, std::shared_ptr<LevelMeter> level_meter, const std::string& schema_path); 43 | 44 | } // namespace ui::level_meter_box 45 | -------------------------------------------------------------------------------- /include/libportal.hpp: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright © 2017-2025 Wellington Wallace 3 | * 4 | * This file is part of Easy Effects. 5 | * 6 | * Easy Effects is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * Easy Effects is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with Easy Effects. If not, see <https://www.gnu.org/licenses/>. 18 | */ 19 | 20 | #pragma once 21 | 22 | #include <gtk/gtk.h> 23 | #include "libportal-gtk4/portal-gtk4.h" 24 | #include "libportal/portal.h" 25 | 26 | namespace libportal { 27 | 28 | void init(GtkSwitch* g_enable_autostart, GtkSwitch* g_shutdown_on_window_close); 29 | 30 | } // namespace libportal 31 | -------------------------------------------------------------------------------- /include/limiter_preset.hpp: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright © 2017-2025 Wellington Wallace 3 | * 4 | * This file is part of Easy Effects. 5 | * 6 | * Easy Effects is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * Easy Effects is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with Easy Effects. If not, see <https://www.gnu.org/licenses/>. 18 | */ 19 | 20 | #pragma once 21 | 22 | #include <nlohmann/json_fwd.hpp> 23 | #include "plugin_preset_base.hpp" 24 | #include "preset_type.hpp" 25 | 26 | class LimiterPreset : public PluginPresetBase { 27 | public: 28 | explicit LimiterPreset(PresetType preset_type, const int& index = 0); 29 | 30 | private: 31 | void save(nlohmann::json& json) override; 32 | 33 | void load(const nlohmann::json& json) override; 34 | }; 35 | -------------------------------------------------------------------------------- /include/limiter_ui.hpp: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright © 2017-2025 Wellington Wallace 3 | * 4 | * This file is part of Easy Effects. 5 | * 6 | * Easy Effects is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * Easy Effects is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with Easy Effects. If not, see <https://www.gnu.org/licenses/>. 18 | */ 19 | 20 | #pragma once 21 | 22 | #include <adwaita.h> 23 | #include <glib-object.h> 24 | #include <glibconfig.h> 25 | #include <gtk/gtkbox.h> 26 | #include <memory> 27 | #include <string> 28 | #include "limiter.hpp" 29 | #include "pipe_manager.hpp" 30 | 31 | namespace ui::limiter_box { 32 | 33 | G_BEGIN_DECLS 34 | 35 | #define EE_TYPE_LIMITER_BOX (limiter_box_get_type()) 36 | 37 | G_DECLARE_FINAL_TYPE(LimiterBox, limiter_box, EE, LIMITER_BOX, GtkBox) 38 | 39 | G_END_DECLS 40 | 41 | auto create() -> LimiterBox*; 42 | 43 | void setup(LimiterBox* self, std::shared_ptr<Limiter> limiter, const std::string& schema_path, PipeManager* pm); 44 | 45 | } // namespace ui::limiter_box 46 | -------------------------------------------------------------------------------- /include/loudness.hpp: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright © 2017-2025 Wellington Wallace 3 | * 4 | * This file is part of Easy Effects. 5 | * 6 | * Easy Effects is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * Easy Effects is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with Easy Effects. If not, see <https://www.gnu.org/licenses/>. 18 | */ 19 | 20 | #pragma once 21 | 22 | #include <sys/types.h> 23 | #include <span> 24 | #include <string> 25 | #include "pipe_manager.hpp" 26 | #include "plugin_base.hpp" 27 | 28 | class Loudness : public PluginBase { 29 | public: 30 | Loudness(const std::string& tag, 31 | const std::string& schema, 32 | const std::string& schema_path, 33 | PipeManager* pipe_manager, 34 | PipelineType pipe_type); 35 | Loudness(const Loudness&) = delete; 36 | auto operator=(const Loudness&) -> Loudness& = delete; 37 | Loudness(const Loudness&&) = delete; 38 | auto operator=(const Loudness&&) -> Loudness& = delete; 39 | ~Loudness() override; 40 | 41 | void setup() override; 42 | 43 | void process(std::span<float>& left_in, 44 | std::span<float>& right_in, 45 | std::span<float>& left_out, 46 | std::span<float>& right_out) override; 47 | 48 | auto get_latency_seconds() -> float override; 49 | 50 | private: 51 | uint latency_n_frames = 0U; 52 | }; 53 | -------------------------------------------------------------------------------- /include/loudness_preset.hpp: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright © 2017-2025 Wellington Wallace 3 | * 4 | * This file is part of Easy Effects. 5 | * 6 | * Easy Effects is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * Easy Effects is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with Easy Effects. If not, see <https://www.gnu.org/licenses/>. 18 | */ 19 | 20 | #pragma once 21 | 22 | #include <nlohmann/json_fwd.hpp> 23 | #include "plugin_preset_base.hpp" 24 | #include "preset_type.hpp" 25 | 26 | class LoudnessPreset : public PluginPresetBase { 27 | public: 28 | explicit LoudnessPreset(PresetType preset_type, const int& index = 0); 29 | 30 | private: 31 | void save(nlohmann::json& json) override; 32 | 33 | void load(const nlohmann::json& json) override; 34 | }; 35 | -------------------------------------------------------------------------------- /include/loudness_ui.hpp: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright © 2017-2025 Wellington Wallace 3 | * 4 | * This file is part of Easy Effects. 5 | * 6 | * Easy Effects is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * Easy Effects is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with Easy Effects. If not, see <https://www.gnu.org/licenses/>. 18 | */ 19 | 20 | #pragma once 21 | 22 | #include <adwaita.h> 23 | #include <glib-object.h> 24 | #include <glibconfig.h> 25 | #include <gtk/gtkbox.h> 26 | #include <memory> 27 | #include <string> 28 | #include "loudness.hpp" 29 | 30 | namespace ui::loudness_box { 31 | 32 | G_BEGIN_DECLS 33 | 34 | #define EE_TYPE_LOUDNESS_BOX (loudness_box_get_type()) 35 | 36 | G_DECLARE_FINAL_TYPE(LoudnessBox, loudness_box, EE, LOUDNESS_BOX, GtkBox) 37 | 38 | G_END_DECLS 39 | 40 | auto create() -> LoudnessBox*; 41 | 42 | void setup(LoudnessBox* self, std::shared_ptr<Loudness> loudness, const std::string& schema_path); 43 | 44 | } // namespace ui::loudness_box 45 | -------------------------------------------------------------------------------- /include/maximizer_preset.hpp: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright © 2017-2025 Wellington Wallace 3 | * 4 | * This file is part of Easy Effects. 5 | * 6 | * Easy Effects is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * Easy Effects is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with Easy Effects. If not, see <https://www.gnu.org/licenses/>. 18 | */ 19 | 20 | #pragma once 21 | 22 | #include <nlohmann/json_fwd.hpp> 23 | #include "plugin_preset_base.hpp" 24 | #include "preset_type.hpp" 25 | 26 | class MaximizerPreset : public PluginPresetBase { 27 | public: 28 | explicit MaximizerPreset(PresetType preset_type, const int& index = 0); 29 | 30 | private: 31 | void save(nlohmann::json& json) override; 32 | 33 | void load(const nlohmann::json& json) override; 34 | }; 35 | -------------------------------------------------------------------------------- /include/maximizer_ui.hpp: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright © 2017-2025 Wellington Wallace 3 | * 4 | * This file is part of Easy Effects. 5 | * 6 | * Easy Effects is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * Easy Effects is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with Easy Effects. If not, see <https://www.gnu.org/licenses/>. 18 | */ 19 | 20 | #pragma once 21 | 22 | #include <adwaita.h> 23 | #include <glib-object.h> 24 | #include <glibconfig.h> 25 | #include <gtk/gtkbox.h> 26 | #include <memory> 27 | #include <string> 28 | #include "maximizer.hpp" 29 | 30 | namespace ui::maximizer_box { 31 | 32 | G_BEGIN_DECLS 33 | 34 | #define EE_TYPE_MAXIMIZER_BOX (maximizer_box_get_type()) 35 | 36 | G_DECLARE_FINAL_TYPE(MaximizerBox, maximizer_box, EE, MAXIMIZER_BOX, GtkBox) 37 | 38 | G_END_DECLS 39 | 40 | auto create() -> MaximizerBox*; 41 | 42 | void setup(MaximizerBox* self, std::shared_ptr<Maximizer> maximizer, const std::string& schema_path); 43 | 44 | } // namespace ui::maximizer_box 45 | -------------------------------------------------------------------------------- /include/module_info_holder.hpp: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright © 2017-2025 Wellington Wallace 3 | * 4 | * This file is part of Easy Effects. 5 | * 6 | * Easy Effects is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * Easy Effects is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with Easy Effects. If not, see <https://www.gnu.org/licenses/>. 18 | */ 19 | 20 | #pragma once 21 | 22 | #include <glib-object.h> 23 | #include <glibconfig.h> 24 | #include <gobject/gobject.h> 25 | #include <gtk/gtk.h> 26 | #include <sigc++/signal.h> 27 | #include "pipe_objects.hpp" 28 | 29 | namespace ui::holders { 30 | 31 | G_BEGIN_DECLS 32 | 33 | #define EE_TYPE_MODULE_INFO_HOLDER (module_info_holder_get_type()) 34 | 35 | G_DECLARE_FINAL_TYPE(ModuleInfoHolder, module_info_holder, EE, MODULE_INFO_HOLDER, GObject) 36 | 37 | G_END_DECLS 38 | 39 | struct _ModuleInfoHolder { 40 | GObject parent_instance; 41 | 42 | ModuleInfo* info; 43 | 44 | sigc::signal<void(const ModuleInfo)> info_updated; 45 | }; 46 | 47 | auto create(const ModuleInfo& info) -> ModuleInfoHolder*; 48 | 49 | } // namespace ui::holders 50 | -------------------------------------------------------------------------------- /include/multiband_compressor_preset.hpp: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright © 2017-2025 Wellington Wallace 3 | * 4 | * This file is part of Easy Effects. 5 | * 6 | * Easy Effects is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * Easy Effects is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with Easy Effects. If not, see <https://www.gnu.org/licenses/>. 18 | */ 19 | 20 | #pragma once 21 | 22 | #include <sys/types.h> 23 | #include <nlohmann/json_fwd.hpp> 24 | #include "plugin_preset_base.hpp" 25 | #include "preset_type.hpp" 26 | #include "tags_multiband_compressor.hpp" 27 | 28 | class MultibandCompressorPreset : public PluginPresetBase { 29 | public: 30 | explicit MultibandCompressorPreset(PresetType preset_type, const int& index = 0); 31 | 32 | private: 33 | static constexpr uint n_bands = tags::multiband_compressor::n_bands; 34 | 35 | void save(nlohmann::json& json) override; 36 | 37 | void load(const nlohmann::json& json) override; 38 | }; 39 | -------------------------------------------------------------------------------- /include/multiband_compressor_ui.hpp: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright © 2017-2025 Wellington Wallace 3 | * 4 | * This file is part of Easy Effects. 5 | * 6 | * Easy Effects is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * Easy Effects is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with Easy Effects. If not, see <https://www.gnu.org/licenses/>. 18 | */ 19 | 20 | #pragma once 21 | 22 | #include <adwaita.h> 23 | #include <glib-object.h> 24 | #include <glibconfig.h> 25 | #include <gtk/gtkbox.h> 26 | #include <memory> 27 | #include <string> 28 | #include "multiband_compressor.hpp" 29 | #include "pipe_manager.hpp" 30 | 31 | namespace ui::multiband_compressor_box { 32 | 33 | G_BEGIN_DECLS 34 | 35 | #define EE_TYPE_MULTIBAND_COMPRESSOR_BOX (multiband_compressor_box_get_type()) 36 | 37 | G_DECLARE_FINAL_TYPE(MultibandCompressorBox, multiband_compressor_box, EE, MULTIBAND_COMPRESSOR_BOX, GtkBox) 38 | 39 | G_END_DECLS 40 | 41 | auto create() -> MultibandCompressorBox*; 42 | 43 | void setup(MultibandCompressorBox* self, 44 | std::shared_ptr<MultibandCompressor> multiband_compressor, 45 | const std::string& schema_path, 46 | PipeManager* pm); 47 | 48 | } // namespace ui::multiband_compressor_box 49 | -------------------------------------------------------------------------------- /include/multiband_gate_band_box.hpp: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright © 2017-2025 Wellington Wallace 3 | * 4 | * This file is part of Easy Effects. 5 | * 6 | * Easy Effects is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * Easy Effects is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with Easy Effects. If not, see <https://www.gnu.org/licenses/>. 18 | */ 19 | 20 | #pragma once 21 | 22 | #include <adwaita.h> 23 | #include <gio/gio.h> 24 | #include <glib-object.h> 25 | #include <glibconfig.h> 26 | #include <gtk/gtkbox.h> 27 | 28 | namespace ui::multiband_gate_band_box { 29 | 30 | G_BEGIN_DECLS 31 | 32 | #define EE_TYPE_MULTIBAND_GATE_BAND_BOX (multiband_gate_band_box_get_type()) 33 | 34 | G_DECLARE_FINAL_TYPE(MultibandGateBandBox, multiband_gate_band_box, EE, MULTIBAND_GATE_BAND_BOX, GtkBox) 35 | 36 | G_END_DECLS 37 | 38 | auto create() -> MultibandGateBandBox*; 39 | 40 | void setup(MultibandGateBandBox* self, GSettings* settings, int index); 41 | 42 | void set_end_label(MultibandGateBandBox* self, const float& value); 43 | 44 | void set_envelope_label(MultibandGateBandBox* self, const float& value); 45 | 46 | void set_curve_label(MultibandGateBandBox* self, const float& value); 47 | 48 | void set_gain_label(MultibandGateBandBox* self, const float& value); 49 | 50 | } // namespace ui::multiband_gate_band_box 51 | -------------------------------------------------------------------------------- /include/multiband_gate_preset.hpp: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright © 2017-2025 Wellington Wallace 3 | * 4 | * This file is part of Easy Effects. 5 | * 6 | * Easy Effects is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * Easy Effects is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with Easy Effects. If not, see <https://www.gnu.org/licenses/>. 18 | */ 19 | 20 | #pragma once 21 | 22 | #include <sys/types.h> 23 | #include <nlohmann/json_fwd.hpp> 24 | #include "plugin_preset_base.hpp" 25 | #include "preset_type.hpp" 26 | #include "tags_multiband_gate.hpp" 27 | 28 | class MultibandGatePreset : public PluginPresetBase { 29 | public: 30 | explicit MultibandGatePreset(PresetType preset_type, const int& index = 0); 31 | 32 | private: 33 | static constexpr uint n_bands = tags::multiband_gate::n_bands; 34 | 35 | void save(nlohmann::json& json) override; 36 | 37 | void load(const nlohmann::json& json) override; 38 | }; 39 | -------------------------------------------------------------------------------- /include/multiband_gate_ui.hpp: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright © 2017-2025 Wellington Wallace 3 | * 4 | * This file is part of Easy Effects. 5 | * 6 | * Easy Effects is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * Easy Effects is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with Easy Effects. If not, see <https://www.gnu.org/licenses/>. 18 | */ 19 | 20 | #pragma once 21 | 22 | #include <adwaita.h> 23 | #include <glib-object.h> 24 | #include <glibconfig.h> 25 | #include <gtk/gtkbox.h> 26 | #include <memory> 27 | #include <string> 28 | #include "multiband_gate.hpp" 29 | #include "pipe_manager.hpp" 30 | 31 | namespace ui::multiband_gate_box { 32 | 33 | G_BEGIN_DECLS 34 | 35 | #define EE_TYPE_MULTIBAND_GATE_BOX (multiband_gate_box_get_type()) 36 | 37 | G_DECLARE_FINAL_TYPE(MultibandGateBox, multiband_gate_box, EE, MULTIBAND_GATE_BOX, GtkBox) 38 | 39 | G_END_DECLS 40 | 41 | auto create() -> MultibandGateBox*; 42 | 43 | void setup(MultibandGateBox* self, 44 | std::shared_ptr<MultibandGate> multiband_gate, 45 | const std::string& schema_path, 46 | PipeManager* pm); 47 | 48 | } // namespace ui::multiband_gate_box 49 | -------------------------------------------------------------------------------- /include/node_info_holder.hpp: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright © 2017-2025 Wellington Wallace 3 | * 4 | * This file is part of Easy Effects. 5 | * 6 | * Easy Effects is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * Easy Effects is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with Easy Effects. If not, see <https://www.gnu.org/licenses/>. 18 | */ 19 | 20 | #pragma once 21 | 22 | #include <glib-object.h> 23 | #include <glibconfig.h> 24 | #include <gobject/gobject.h> 25 | #include <gtk/gtk.h> 26 | #include <sigc++/signal.h> 27 | #include <string> 28 | #include "pipe_objects.hpp" 29 | 30 | namespace ui::holders { 31 | 32 | G_BEGIN_DECLS 33 | 34 | #define EE_TYPE_NODE_INFO_HOLDER (node_info_holder_get_type()) 35 | 36 | G_DECLARE_FINAL_TYPE(NodeInfoHolder, node_info_holder, EE, NODE_INFO_HOLDER, GObject) 37 | 38 | G_END_DECLS 39 | 40 | struct _NodeInfoHolder { 41 | GObject parent_instance; 42 | 43 | NodeInfo* info; 44 | 45 | std::string icon_name; // The name of the icon that will represent the node when we show it in a list 46 | 47 | sigc::signal<void(const NodeInfo)> info_updated; 48 | }; 49 | 50 | auto create(const NodeInfo& info) -> NodeInfoHolder*; 51 | 52 | } // namespace ui::holders 53 | -------------------------------------------------------------------------------- /include/output_level.hpp: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright © 2017-2025 Wellington Wallace 3 | * 4 | * This file is part of Easy Effects. 5 | * 6 | * Easy Effects is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * Easy Effects is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with Easy Effects. If not, see <https://www.gnu.org/licenses/>. 18 | */ 19 | 20 | #pragma once 21 | 22 | #include <span> 23 | #include <string> 24 | #include "pipe_manager.hpp" 25 | #include "plugin_base.hpp" 26 | 27 | class OutputLevel : public PluginBase { 28 | public: 29 | OutputLevel(const std::string& tag, 30 | const std::string& schema, 31 | const std::string& schema_path, 32 | PipeManager* pipe_manager, 33 | PipelineType pipe_type); 34 | OutputLevel(const OutputLevel&) = delete; 35 | auto operator=(const OutputLevel&) -> OutputLevel& = delete; 36 | OutputLevel(const OutputLevel&&) = delete; 37 | auto operator=(const OutputLevel&&) -> OutputLevel& = delete; 38 | ~OutputLevel() override; 39 | 40 | void setup() override; 41 | 42 | void process(std::span<float>& left_in, 43 | std::span<float>& right_in, 44 | std::span<float>& left_out, 45 | std::span<float>& right_out) override; 46 | 47 | auto get_latency_seconds() -> float override; 48 | }; 49 | -------------------------------------------------------------------------------- /include/pipe_manager_box.hpp: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright © 2017-2025 Wellington Wallace 3 | * 4 | * This file is part of Easy Effects. 5 | * 6 | * Easy Effects is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * Easy Effects is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with Easy Effects. If not, see <https://www.gnu.org/licenses/>. 18 | */ 19 | 20 | #pragma once 21 | 22 | #include <adwaita.h> 23 | #include <glib-object.h> 24 | #include <glibconfig.h> 25 | #include <gtk/gtkbox.h> 26 | #include "application.hpp" 27 | 28 | namespace ui::pipe_manager_box { 29 | 30 | G_BEGIN_DECLS 31 | 32 | #define EE_TYPE_PIPE_MANAGER_BOX (pipe_manager_box_get_type()) 33 | 34 | G_DECLARE_FINAL_TYPE(PipeManagerBox, pipe_manager_box, EE, PIPE_MANAGER_BOX, GtkBox) 35 | 36 | G_END_DECLS 37 | 38 | auto create() -> PipeManagerBox*; 39 | 40 | void setup(PipeManagerBox* self, app::Application* application); 41 | 42 | } // namespace ui::pipe_manager_box 43 | -------------------------------------------------------------------------------- /include/pipeline_type.hpp: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright © 2017-2025 Wellington Wallace 3 | * 4 | * This file is part of Easy Effects. 5 | * 6 | * Easy Effects is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * Easy Effects is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with Easy Effects. If not, see <https://www.gnu.org/licenses/>. 18 | */ 19 | 20 | #pragma once 21 | 22 | enum class PipelineType { input, output }; 23 | -------------------------------------------------------------------------------- /include/pitch_preset.hpp: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright © 2017-2025 Wellington Wallace 3 | * 4 | * This file is part of Easy Effects. 5 | * 6 | * Easy Effects is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * Easy Effects is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with Easy Effects. If not, see <https://www.gnu.org/licenses/>. 18 | */ 19 | 20 | #pragma once 21 | 22 | #include <nlohmann/json_fwd.hpp> 23 | #include "plugin_preset_base.hpp" 24 | #include "preset_type.hpp" 25 | 26 | class PitchPreset : public PluginPresetBase { 27 | public: 28 | explicit PitchPreset(PresetType preset_type, const int& index = 0); 29 | 30 | private: 31 | void save(nlohmann::json& json) override; 32 | 33 | void load(const nlohmann::json& json) override; 34 | }; 35 | -------------------------------------------------------------------------------- /include/pitch_ui.hpp: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright © 2017-2025 Wellington Wallace 3 | * 4 | * This file is part of Easy Effects. 5 | * 6 | * Easy Effects is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * Easy Effects is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with Easy Effects. If not, see <https://www.gnu.org/licenses/>. 18 | */ 19 | 20 | #pragma once 21 | 22 | #include <adwaita.h> 23 | #include <glib-object.h> 24 | #include <glibconfig.h> 25 | #include <gtk/gtkbox.h> 26 | #include <memory> 27 | #include <string> 28 | #include "pitch.hpp" 29 | 30 | namespace ui::pitch_box { 31 | 32 | G_BEGIN_DECLS 33 | 34 | #define EE_TYPE_PITCH_BOX (pitch_box_get_type()) 35 | 36 | G_DECLARE_FINAL_TYPE(PitchBox, pitch_box, EE, PITCH_BOX, GtkBox) 37 | 38 | G_END_DECLS 39 | 40 | auto create() -> PitchBox*; 41 | 42 | void setup(PitchBox* self, std::shared_ptr<Pitch> pitch, const std::string& schema_path); 43 | 44 | } // namespace ui::pitch_box 45 | -------------------------------------------------------------------------------- /include/plugins_box.hpp: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright © 2017-2025 Wellington Wallace 3 | * 4 | * This file is part of Easy Effects. 5 | * 6 | * Easy Effects is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * Easy Effects is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with Easy Effects. If not, see <https://www.gnu.org/licenses/>. 18 | */ 19 | 20 | #pragma once 21 | 22 | #include <glib-object.h> 23 | #include <glibconfig.h> 24 | #include <gtk/gtk.h> 25 | #include "application.hpp" 26 | #include "pipeline_type.hpp" 27 | 28 | namespace ui::plugins_box { 29 | 30 | G_BEGIN_DECLS 31 | 32 | #define EE_TYPE_PLUGINS_BOX (plugins_box_get_type()) 33 | 34 | G_DECLARE_FINAL_TYPE(PluginsBox, plugins_box, EE, PLUGINS_BOX, GtkBox) 35 | 36 | G_END_DECLS 37 | 38 | auto create() -> PluginsBox*; 39 | 40 | void setup(PluginsBox* self, app::Application* application, PipelineType pipeline_type); 41 | 42 | } // namespace ui::plugins_box 43 | -------------------------------------------------------------------------------- /include/plugins_menu.hpp: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright © 2017-2025 Wellington Wallace 3 | * 4 | * This file is part of Easy Effects. 5 | * 6 | * Easy Effects is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * Easy Effects is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with Easy Effects. If not, see <https://www.gnu.org/licenses/>. 18 | */ 19 | 20 | #pragma once 21 | 22 | #include <adwaita.h> 23 | #include <glib-object.h> 24 | #include <glibconfig.h> 25 | #include <gtk/gtkpopover.h> 26 | #include "application.hpp" 27 | #include "pipeline_type.hpp" 28 | 29 | namespace ui::plugins_menu { 30 | 31 | G_BEGIN_DECLS 32 | 33 | #define EE_TYPE_PLUGINS_MENU (plugins_menu_get_type()) 34 | 35 | G_DECLARE_FINAL_TYPE(PluginsMenu, plugins_menu, EE, PLUGINS_MENU, GtkPopover) 36 | 37 | G_END_DECLS 38 | 39 | auto create() -> PluginsMenu*; 40 | 41 | void setup(PluginsMenu* self, app::Application* application, PipelineType pipeline_type); 42 | 43 | } // namespace ui::plugins_menu 44 | -------------------------------------------------------------------------------- /include/preferences_general.hpp: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright © 2017-2025 Wellington Wallace 3 | * 4 | * This file is part of Easy Effects. 5 | * 6 | * Easy Effects is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * Easy Effects is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with Easy Effects. If not, see <https://www.gnu.org/licenses/>. 18 | */ 19 | 20 | #pragma once 21 | 22 | #include <adwaita.h> 23 | #include <glib-object.h> 24 | #include <glibconfig.h> 25 | 26 | #ifdef ENABLE_LIBPORTAL 27 | #include "libportal.hpp" 28 | #endif 29 | 30 | namespace ui::preferences::general { 31 | 32 | G_BEGIN_DECLS 33 | 34 | #define EE_TYPE_PREFERENCES_GENERAL (preferences_general_get_type()) 35 | 36 | G_DECLARE_FINAL_TYPE(PreferencesGeneral, preferences_general, EE, PREFERENCES_GENERAL, AdwPreferencesPage) 37 | 38 | G_END_DECLS 39 | 40 | auto create() -> PreferencesGeneral*; 41 | 42 | } // namespace ui::preferences::general 43 | -------------------------------------------------------------------------------- /include/preferences_spectrum.hpp: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright © 2017-2025 Wellington Wallace 3 | * 4 | * This file is part of Easy Effects. 5 | * 6 | * Easy Effects is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * Easy Effects is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with Easy Effects. If not, see <https://www.gnu.org/licenses/>. 18 | */ 19 | 20 | #pragma once 21 | 22 | #include <adwaita.h> 23 | #include <glib-object.h> 24 | #include <glibconfig.h> 25 | 26 | namespace ui::preferences::spectrum { 27 | 28 | G_BEGIN_DECLS 29 | 30 | #define EE_TYPE_PREFERENCES_SPECTRUM (preferences_spectrum_get_type()) 31 | 32 | G_DECLARE_FINAL_TYPE(PreferencesSpectrum, preferences_spectrum, EE, PREFERENCES_SPECTRUM, AdwPreferencesPage) 33 | 34 | G_END_DECLS 35 | 36 | auto create() -> PreferencesSpectrum*; 37 | 38 | } // namespace ui::preferences::spectrum 39 | -------------------------------------------------------------------------------- /include/preferences_window.hpp: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright © 2017-2025 Wellington Wallace 3 | * 4 | * This file is part of Easy Effects. 5 | * 6 | * Easy Effects is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * Easy Effects is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with Easy Effects. If not, see <https://www.gnu.org/licenses/>. 18 | */ 19 | 20 | #pragma once 21 | 22 | #include <adwaita.h> 23 | #include <glib-object.h> 24 | #include <glibconfig.h> 25 | 26 | namespace ui::preferences::window { 27 | 28 | G_BEGIN_DECLS 29 | 30 | #define EE_TYPE_PREFERENCES_WINDOW (preferences_window_get_type()) 31 | 32 | G_DECLARE_FINAL_TYPE(PreferencesWindow, preferences_window, EE, PREFERENCES_WINDOW, AdwPreferencesDialog) 33 | 34 | G_END_DECLS 35 | 36 | auto create() -> PreferencesWindow*; 37 | 38 | } // namespace ui::preferences::window 39 | -------------------------------------------------------------------------------- /include/preset_type.hpp: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright © 2017-2025 Wellington Wallace 3 | * 4 | * This file is part of Easy Effects. 5 | * 6 | * Easy Effects is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * Easy Effects is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with Easy Effects. If not, see <https://www.gnu.org/licenses/>. 18 | */ 19 | 20 | #pragma once 21 | 22 | enum class PresetType { input, output }; 23 | -------------------------------------------------------------------------------- /include/presets_autoloading_holder.hpp: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright © 2017-2025 Wellington Wallace 3 | * 4 | * This file is part of Easy Effects. 5 | * 6 | * Easy Effects is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * Easy Effects is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with Easy Effects. If not, see <https://www.gnu.org/licenses/>. 18 | */ 19 | 20 | #pragma once 21 | 22 | #include <glib-object.h> 23 | #include <glibconfig.h> 24 | #include <string> 25 | 26 | namespace ui::holders { 27 | 28 | G_BEGIN_DECLS 29 | 30 | #define EE_TYPE_PRESETS_AUTOLOADING_HOLDER (presets_autoloading_holder_get_type()) 31 | 32 | G_DECLARE_FINAL_TYPE(PresetsAutoloadingHolder, presets_autoloading_holder, EE, PRESETS_AUTOLOADING_HOLDER, GObject) 33 | 34 | G_END_DECLS 35 | 36 | struct PresetsAutoLoadingData { 37 | public: 38 | std::string device, device_description, device_profile, preset_name; 39 | }; 40 | 41 | struct _PresetsAutoloadingHolder { 42 | GObject parent_instance; 43 | 44 | PresetsAutoLoadingData* data; 45 | }; 46 | 47 | auto create(const std::string& device, 48 | const std::string& device_description, 49 | const std::string& device_profile, 50 | const std::string& preset_name) -> PresetsAutoloadingHolder*; 51 | 52 | } // namespace ui::holders 53 | -------------------------------------------------------------------------------- /include/presets_menu.hpp: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright © 2017-2025 Wellington Wallace 3 | * 4 | * This file is part of Easy Effects. 5 | * 6 | * Easy Effects is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * Easy Effects is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with Easy Effects. If not, see <https://www.gnu.org/licenses/>. 18 | */ 19 | 20 | #pragma once 21 | 22 | #include <adwaita.h> 23 | #include <glib-object.h> 24 | #include <glibconfig.h> 25 | #include <gtk/gtkpopover.h> 26 | #include "application.hpp" 27 | #include "preset_type.hpp" 28 | 29 | namespace ui::presets_menu { 30 | 31 | G_BEGIN_DECLS 32 | 33 | #define EE_TYPE_PRESETS_MENU (presets_menu_get_type()) 34 | 35 | G_DECLARE_FINAL_TYPE(PresetsMenu, presets_menu, EE, PRESETS_MENU, GtkPopover) 36 | 37 | G_END_DECLS 38 | 39 | auto create() -> PresetsMenu*; 40 | 41 | void setup(PresetsMenu* self, app::Application* application, PresetType preset_type); 42 | 43 | } // namespace ui::presets_menu 44 | -------------------------------------------------------------------------------- /include/reverb.hpp: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright © 2017-2025 Wellington Wallace 3 | * 4 | * This file is part of Easy Effects. 5 | * 6 | * Easy Effects is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * Easy Effects is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with Easy Effects. If not, see <https://www.gnu.org/licenses/>. 18 | */ 19 | 20 | #pragma once 21 | 22 | #include <span> 23 | #include <string> 24 | #include "pipe_manager.hpp" 25 | #include "plugin_base.hpp" 26 | 27 | class Reverb : public PluginBase { 28 | public: 29 | Reverb(const std::string& tag, 30 | const std::string& schema, 31 | const std::string& schema_path, 32 | PipeManager* pipe_manager, 33 | PipelineType pipe_type); 34 | Reverb(const Reverb&) = delete; 35 | auto operator=(const Reverb&) -> Reverb& = delete; 36 | Reverb(const Reverb&&) = delete; 37 | auto operator=(const Reverb&&) -> Reverb& = delete; 38 | ~Reverb() override; 39 | 40 | void setup() override; 41 | 42 | void process(std::span<float>& left_in, 43 | std::span<float>& right_in, 44 | std::span<float>& left_out, 45 | std::span<float>& right_out) override; 46 | 47 | auto get_latency_seconds() -> float override; 48 | 49 | private: 50 | }; 51 | -------------------------------------------------------------------------------- /include/reverb_preset.hpp: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright © 2017-2025 Wellington Wallace 3 | * 4 | * This file is part of Easy Effects. 5 | * 6 | * Easy Effects is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * Easy Effects is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with Easy Effects. If not, see <https://www.gnu.org/licenses/>. 18 | */ 19 | 20 | #pragma once 21 | 22 | #include <nlohmann/json_fwd.hpp> 23 | #include "plugin_preset_base.hpp" 24 | #include "preset_type.hpp" 25 | 26 | class ReverbPreset : public PluginPresetBase { 27 | public: 28 | explicit ReverbPreset(PresetType preset_type, const int& index = 0); 29 | 30 | private: 31 | void save(nlohmann::json& json) override; 32 | 33 | void load(const nlohmann::json& json) override; 34 | }; 35 | -------------------------------------------------------------------------------- /include/reverb_ui.hpp: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright © 2017-2025 Wellington Wallace 3 | * 4 | * This file is part of Easy Effects. 5 | * 6 | * Easy Effects is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * Easy Effects is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with Easy Effects. If not, see <https://www.gnu.org/licenses/>. 18 | */ 19 | 20 | #pragma once 21 | 22 | #include <adwaita.h> 23 | #include <glib-object.h> 24 | #include <glibconfig.h> 25 | #include <gtk/gtkbox.h> 26 | #include <memory> 27 | #include <string> 28 | #include "reverb.hpp" 29 | 30 | namespace ui::reverb_box { 31 | 32 | G_BEGIN_DECLS 33 | 34 | #define EE_TYPE_REVERB_BOX (reverb_box_get_type()) 35 | 36 | G_DECLARE_FINAL_TYPE(ReverbBox, reverb_box, EE, REVERB_BOX, GtkBox) 37 | 38 | G_END_DECLS 39 | 40 | auto create() -> ReverbBox*; 41 | 42 | void setup(ReverbBox* self, std::shared_ptr<Reverb> reverb, const std::string& schema_path); 43 | 44 | } // namespace ui::reverb_box 45 | -------------------------------------------------------------------------------- /include/rnnoise_preset.hpp: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright © 2017-2025 Wellington Wallace 3 | * 4 | * This file is part of Easy Effects. 5 | * 6 | * Easy Effects is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * Easy Effects is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with Easy Effects. If not, see <https://www.gnu.org/licenses/>. 18 | */ 19 | 20 | #pragma once 21 | 22 | #include <nlohmann/json_fwd.hpp> 23 | #include "plugin_preset_base.hpp" 24 | #include "preset_type.hpp" 25 | 26 | class RNNoisePreset : public PluginPresetBase { 27 | public: 28 | explicit RNNoisePreset(PresetType preset_type, const int& index = 0); 29 | 30 | private: 31 | void save(nlohmann::json& json) override; 32 | 33 | void load(const nlohmann::json& json) override; 34 | }; 35 | -------------------------------------------------------------------------------- /include/rnnoise_ui.hpp: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright © 2017-2025 Wellington Wallace 3 | * 4 | * This file is part of Easy Effects. 5 | * 6 | * Easy Effects is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * Easy Effects is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with Easy Effects. If not, see <https://www.gnu.org/licenses/>. 18 | */ 19 | 20 | #pragma once 21 | 22 | #include <adwaita.h> 23 | #include <glib-object.h> 24 | #include <glibconfig.h> 25 | #include <gtk/gtkbox.h> 26 | #include <memory> 27 | #include <string> 28 | #include "application.hpp" 29 | #include "rnnoise.hpp" 30 | 31 | namespace ui::rnnoise_box { 32 | 33 | G_BEGIN_DECLS 34 | 35 | #define EE_TYPE_RNNOISE_BOX (rnnoise_box_get_type()) 36 | 37 | G_DECLARE_FINAL_TYPE(RNNoiseBox, rnnoise_box, EE, RNNOISE_BOX, GtkBox) 38 | 39 | G_END_DECLS 40 | 41 | auto create() -> RNNoiseBox*; 42 | 43 | void setup(RNNoiseBox* self, 44 | std::shared_ptr<RNNoise> rnnoise, 45 | const std::string& schema_path, 46 | app::Application* application); 47 | 48 | } // namespace ui::rnnoise_box 49 | -------------------------------------------------------------------------------- /include/speex_preset.hpp: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright © 2017-2025 Wellington Wallace 3 | * 4 | * This file is part of Easy Effects. 5 | * 6 | * Easy Effects is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * Easy Effects is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with Easy Effects. If not, see <https://www.gnu.org/licenses/>. 18 | */ 19 | 20 | #pragma once 21 | 22 | #include <nlohmann/json_fwd.hpp> 23 | #include "plugin_preset_base.hpp" 24 | #include "preset_type.hpp" 25 | 26 | class SpeexPreset : public PluginPresetBase { 27 | public: 28 | explicit SpeexPreset(PresetType preset_type, const int& index = 0); 29 | 30 | private: 31 | void save(nlohmann::json& json) override; 32 | 33 | void load(const nlohmann::json& json) override; 34 | }; 35 | -------------------------------------------------------------------------------- /include/speex_ui.hpp: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright © 2017-2025 Wellington Wallace 3 | * 4 | * This file is part of Easy Effects. 5 | * 6 | * Easy Effects is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * Easy Effects is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with Easy Effects. If not, see <https://www.gnu.org/licenses/>. 18 | */ 19 | 20 | #pragma once 21 | 22 | #include <adwaita.h> 23 | #include <glib-object.h> 24 | #include <glibconfig.h> 25 | #include <gtk/gtkbox.h> 26 | #include <memory> 27 | #include <string> 28 | #include "application.hpp" 29 | #include "speex.hpp" 30 | 31 | namespace ui::speex_box { 32 | 33 | G_BEGIN_DECLS 34 | 35 | #define EE_TYPE_SPEEX_BOX (speex_box_get_type()) 36 | 37 | G_DECLARE_FINAL_TYPE(SpeexBox, speex_box, EE, SPEEX_BOX, GtkBox) 38 | 39 | G_END_DECLS 40 | 41 | auto create() -> SpeexBox*; 42 | 43 | void setup(SpeexBox* self, std::shared_ptr<Speex> speex, const std::string& schema_path, app::Application* application); 44 | 45 | } // namespace ui::speex_box 46 | -------------------------------------------------------------------------------- /include/stereo_tools_preset.hpp: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright © 2017-2025 Wellington Wallace 3 | * 4 | * This file is part of Easy Effects. 5 | * 6 | * Easy Effects is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * Easy Effects is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with Easy Effects. If not, see <https://www.gnu.org/licenses/>. 18 | */ 19 | 20 | #pragma once 21 | 22 | #include <nlohmann/json_fwd.hpp> 23 | #include "plugin_preset_base.hpp" 24 | #include "preset_type.hpp" 25 | 26 | class StereoToolsPreset : public PluginPresetBase { 27 | public: 28 | explicit StereoToolsPreset(PresetType preset_type, const int& index = 0); 29 | 30 | private: 31 | void save(nlohmann::json& json) override; 32 | 33 | void load(const nlohmann::json& json) override; 34 | }; 35 | -------------------------------------------------------------------------------- /include/stereo_tools_ui.hpp: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright © 2017-2025 Wellington Wallace 3 | * 4 | * This file is part of Easy Effects. 5 | * 6 | * Easy Effects is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * Easy Effects is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with Easy Effects. If not, see <https://www.gnu.org/licenses/>. 18 | */ 19 | 20 | #pragma once 21 | 22 | #include <adwaita.h> 23 | #include <glib-object.h> 24 | #include <glibconfig.h> 25 | #include <gtk/gtkbox.h> 26 | #include <memory> 27 | #include <string> 28 | #include "stereo_tools.hpp" 29 | 30 | namespace ui::stereo_tools_box { 31 | 32 | G_BEGIN_DECLS 33 | 34 | #define EE_TYPE_STEREO_TOOLS_BOX (stereo_tools_box_get_type()) 35 | 36 | G_DECLARE_FINAL_TYPE(StereoToolsBox, stereo_tools_box, EE, STEREO_TOOLS_BOX, GtkBox) 37 | 38 | G_END_DECLS 39 | 40 | auto create() -> StereoToolsBox*; 41 | 42 | void setup(StereoToolsBox* self, std::shared_ptr<StereoTools> stereo_tools, const std::string& schema_path); 43 | 44 | } // namespace ui::stereo_tools_box 45 | -------------------------------------------------------------------------------- /include/stream_input_effects.hpp: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright © 2017-2025 Wellington Wallace 3 | * 4 | * This file is part of Easy Effects. 5 | * 6 | * Easy Effects is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * Easy Effects is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with Easy Effects. If not, see <https://www.gnu.org/licenses/>. 18 | */ 19 | 20 | #pragma once 21 | 22 | #include "effects_base.hpp" 23 | #include "pipe_manager.hpp" 24 | #include "pipe_objects.hpp" 25 | 26 | class StreamInputEffects : public EffectsBase { 27 | public: 28 | StreamInputEffects(PipeManager* pipe_manager); 29 | StreamInputEffects(const StreamInputEffects&) = delete; 30 | auto operator=(const StreamInputEffects&) -> StreamInputEffects& = delete; 31 | StreamInputEffects(const StreamInputEffects&&) = delete; 32 | auto operator=(const StreamInputEffects&&) -> StreamInputEffects& = delete; 33 | ~StreamInputEffects() override; 34 | 35 | void set_bypass(const bool& state); 36 | 37 | void set_listen_to_mic(const bool& state); 38 | 39 | private: 40 | bool bypass = false; 41 | 42 | void connect_filters(const bool& bypass = false); 43 | 44 | void disconnect_filters(); 45 | 46 | auto apps_want_to_play() -> bool; 47 | 48 | void on_app_added(NodeInfo node_info); 49 | 50 | void on_link_changed(LinkInfo link_info); 51 | }; 52 | -------------------------------------------------------------------------------- /include/stream_output_effects.hpp: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright © 2017-2025 Wellington Wallace 3 | * 4 | * This file is part of Easy Effects. 5 | * 6 | * Easy Effects is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * Easy Effects is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with Easy Effects. If not, see <https://www.gnu.org/licenses/>. 18 | */ 19 | 20 | #pragma once 21 | 22 | #include "effects_base.hpp" 23 | #include "pipe_manager.hpp" 24 | #include "pipe_objects.hpp" 25 | 26 | class StreamOutputEffects : public EffectsBase { 27 | public: 28 | StreamOutputEffects(PipeManager* pipe_manager); 29 | StreamOutputEffects(const StreamOutputEffects&) = delete; 30 | auto operator=(const StreamOutputEffects&) -> StreamOutputEffects& = delete; 31 | StreamOutputEffects(const StreamOutputEffects&&) = delete; 32 | auto operator=(const StreamOutputEffects&&) -> StreamOutputEffects& = delete; 33 | ~StreamOutputEffects() override; 34 | 35 | void set_bypass(const bool& state); 36 | 37 | private: 38 | bool bypass = false; 39 | 40 | void connect_filters(const bool& bypass = false); 41 | 42 | void disconnect_filters(); 43 | 44 | auto apps_want_to_play() -> bool; 45 | 46 | void on_app_added(NodeInfo node_info); 47 | }; 48 | -------------------------------------------------------------------------------- /include/string_literal_wrapper.hpp: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright © 2017-2025 Wellington Wallace 3 | * 4 | * This file is part of Easy Effects. 5 | * 6 | * Easy Effects is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * Easy Effects is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with Easy Effects. If not, see <https://www.gnu.org/licenses/>. 18 | */ 19 | 20 | #pragma once 21 | 22 | #include <array> 23 | #include <cstddef> 24 | 25 | template <size_t N> 26 | struct StringLiteralWrapper { 27 | // NOLINTNEXTLINE(hicpp-explicit-conversions) 28 | constexpr StringLiteralWrapper(const char (&str)[N]) : msg(std::to_array(str)) {} 29 | 30 | // NOLINTNEXTLINE(hicpp-explicit-conversions) 31 | constexpr StringLiteralWrapper(std::array<char, N> arr) : msg(arr) {} 32 | 33 | std::array<char, N> msg; 34 | }; 35 | -------------------------------------------------------------------------------- /include/tags_app.hpp: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright © 2017-2025 Wellington Wallace 3 | * 4 | * This file is part of Easy Effects. 5 | * 6 | * Easy Effects is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * Easy Effects is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with Easy Effects. If not, see <https://www.gnu.org/licenses/>. 18 | */ 19 | 20 | #pragma once 21 | 22 | namespace tags::app { 23 | 24 | inline constexpr auto minimum_pw_version = "0.3.44"; 25 | 26 | inline constexpr auto id = "com.github.wwmm.easyeffects"; 27 | 28 | inline constexpr auto path = "/com/github/wwmm/easyeffects"; 29 | 30 | inline constexpr auto path_stream_inputs = "/com/github/wwmm/easyeffects/streaminputs/"; 31 | 32 | inline constexpr auto path_stream_outputs = "/com/github/wwmm/easyeffects/streamoutputs/"; 33 | 34 | } // namespace tags::app 35 | -------------------------------------------------------------------------------- /include/tags_pipewire.hpp: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright © 2017-2025 Wellington Wallace 3 | * 4 | * This file is part of Easy Effects. 5 | * 6 | * Easy Effects is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * Easy Effects is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with Easy Effects. If not, see <https://www.gnu.org/licenses/>. 18 | */ 19 | 20 | #pragma once 21 | 22 | namespace tags::pipewire { 23 | 24 | inline constexpr auto ee_source_name = "easyeffects_source"; 25 | 26 | inline constexpr auto ee_sink_name = "easyeffects_sink"; 27 | 28 | } // namespace tags::pipewire 29 | 30 | namespace tags::pipewire::media_class { 31 | 32 | inline constexpr auto device = "Audio/Device"; 33 | 34 | inline constexpr auto sink = "Audio/Sink"; 35 | 36 | inline constexpr auto source = "Audio/Source"; 37 | 38 | inline constexpr auto virtual_source = "Audio/Source/Virtual"; 39 | 40 | inline constexpr auto input_stream = "Stream/Input/Audio"; 41 | 42 | inline constexpr auto output_stream = "Stream/Output/Audio"; 43 | 44 | } // namespace tags::pipewire::media_class 45 | 46 | namespace tags::pipewire::media_role { 47 | 48 | inline constexpr auto dsp = "DSP"; 49 | 50 | } // namespace tags::pipewire::media_role 51 | -------------------------------------------------------------------------------- /meson_options.txt: -------------------------------------------------------------------------------- 1 | option( 2 | 'devel', 3 | description: 'Whether to use development build mode, with .Devel appended to the application ID. For Flatpak builds, user data for development builds is stored separately from stable builds.', 4 | type: 'boolean', 5 | value: false 6 | ) 7 | 8 | option( 9 | 'enable-mold', 10 | description: 'Use the mold linker for speed, so mold must be installed. Option exists to allow easily enabling mold for Flatpak builds in GNOME Builder since CC_LD and CXX_LD cannot be reasonably used due to: https://gitlab.gnome.org/GNOME/gnome-builder/-/issues/1168', 11 | type: 'boolean', 12 | value: false 13 | ) 14 | 15 | option( 16 | 'enable-libportal', 17 | description: 'Whether to use libportal to handle autostart files.', 18 | type: 'boolean', 19 | value: false 20 | ) 21 | 22 | option( 23 | 'enable-rnnoise', 24 | description: 'Whether to use RRNNoise for noise cancellation.', 25 | type: 'boolean', 26 | value: true 27 | ) 28 | 29 | option( 30 | 'enable-libcpp-workarounds', 31 | description: 'Whether to enable code paths need for compilation on libc++.', 32 | type: 'boolean', 33 | value: false 34 | ) 35 | -------------------------------------------------------------------------------- /po/LINGUAS: -------------------------------------------------------------------------------- 1 | cs 2 | de 3 | fr 4 | gl 5 | hr 6 | id_ID 7 | it_IT 8 | nl 9 | pl 10 | pt_BR 11 | ru 12 | sk 13 | sv 14 | da 15 | nb_NO 16 | es_MX 17 | es_CO 18 | tr 19 | zh_CN 20 | ro 21 | es_VE 22 | ja 23 | ko 24 | es 25 | km 26 | af 27 | th 28 | bg 29 | ka 30 | uk 31 | eu 32 | nn 33 | ca 34 | zh_Hant 35 | hu 36 | ar 37 | ga 38 | pt 39 | ta 40 | -------------------------------------------------------------------------------- /po/meson.build: -------------------------------------------------------------------------------- 1 | i18n_mod.gettext(meson.project_name(), 2 | preset: 'glib' 3 | ) 4 | 5 | subdir('news') 6 | -------------------------------------------------------------------------------- /po/news/LINGUAS: -------------------------------------------------------------------------------- 1 | cs 2 | de 3 | fr_FR 4 | gl 5 | hr 6 | id_ID 7 | it_IT 8 | nl 9 | pl 10 | pt_BR 11 | ru 12 | sk 13 | sv 14 | da 15 | nb_NO 16 | es_MX 17 | es_CO 18 | tr 19 | zh_CN 20 | ro 21 | es_VE 22 | ja 23 | ko 24 | es 25 | km 26 | af 27 | th -------------------------------------------------------------------------------- /po/news/POTFILES.in: -------------------------------------------------------------------------------- 1 | data/com.github.wwmm.easyeffects.metainfo.xml.in -------------------------------------------------------------------------------- /po/news/meson.build: -------------------------------------------------------------------------------- 1 | i18n_mod.gettext(meson.project_name() + '-news', 2 | preset: 'glib' 3 | ) -------------------------------------------------------------------------------- /src/fir_filter_highpass.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright © 2017-2025 Wellington Wallace 3 | * 4 | * This file is part of Easy Effects. 5 | * 6 | * Easy Effects is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * Easy Effects is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with Easy Effects. If not, see <https://www.gnu.org/licenses/>. 18 | */ 19 | 20 | #include "fir_filter_highpass.hpp" 21 | #include <algorithm> 22 | #include <string> 23 | #include <utility> 24 | #include "fir_filter_base.hpp" 25 | 26 | FirFilterHighpass::FirFilterHighpass(std::string tag) : FirFilterBase(std::move(tag)) {} 27 | 28 | FirFilterHighpass::~FirFilterHighpass() = default; 29 | 30 | void FirFilterHighpass::setup() { 31 | kernel = create_lowpass_kernel(min_frequency, transition_band); 32 | 33 | std::ranges::for_each(kernel, [](auto& v) { v *= -1.0F; }); 34 | 35 | kernel[(kernel.size() - 1U) / 2U] += 1.0F; 36 | 37 | delay = 0.5F * static_cast<float>(kernel.size() - 1U) / static_cast<float>(rate); 38 | 39 | setup_zita(); 40 | } 41 | -------------------------------------------------------------------------------- /src/fir_filter_lowpass.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright © 2017-2025 Wellington Wallace 3 | * 4 | * This file is part of Easy Effects. 5 | * 6 | * Easy Effects is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * Easy Effects is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with Easy Effects. If not, see <https://www.gnu.org/licenses/>. 18 | */ 19 | 20 | #include "fir_filter_lowpass.hpp" 21 | #include <string> 22 | #include <utility> 23 | #include "fir_filter_base.hpp" 24 | 25 | FirFilterLowpass::FirFilterLowpass(std::string tag) : FirFilterBase(std::move(tag)) {} 26 | 27 | FirFilterLowpass::~FirFilterLowpass() = default; 28 | 29 | void FirFilterLowpass::setup() { 30 | kernel = create_lowpass_kernel(max_frequency, transition_band); 31 | 32 | delay = 0.5F * static_cast<float>(kernel.size() - 1U) / static_cast<float>(rate); 33 | 34 | setup_zita(); 35 | } 36 | -------------------------------------------------------------------------------- /src/resampler.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright © 2017-2025 Wellington Wallace 3 | * 4 | * This file is part of Easy Effects. 5 | * 6 | * Easy Effects is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * Easy Effects is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with Easy Effects. If not, see <https://www.gnu.org/licenses/>. 18 | */ 19 | 20 | #include "resampler.hpp" 21 | #include <samplerate.h> 22 | 23 | Resampler::Resampler(const int& input_rate, const int& output_rate) : output(1, 0) { 24 | resample_ratio = static_cast<double>(output_rate) / static_cast<double>(input_rate); 25 | 26 | src_state = src_new(SRC_SINC_FASTEST, 1, nullptr); 27 | } 28 | 29 | Resampler::~Resampler() { 30 | if (src_state != nullptr) { 31 | src_delete(src_state); 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /util/changes_since_last_release.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | # using git log to view the changes that have been done since the tag given as argument 4 | 5 | read -r -e -p "Write the last release version(example 6.2.6): " LAST_RELEASE 6 | 7 | echo "" 8 | echo "Changes done since $LAST_RELEASE:" 9 | echo "" 10 | 11 | git log v$LAST_RELEASE...HEAD --pretty=format:'%H %s' -------------------------------------------------------------------------------- /util/clang-tidy.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | set -e 3 | # write a custom script for ease of use, meson clang-tidy target can't do fixes, and also has somewhat broken threading 4 | 5 | if ! meson introspect --projectinfo &> /dev/null; then 6 | echo "Error, meson introspect command failed, make sure you are in a meson build directory" 7 | exit 1 8 | fi 9 | 10 | if [[ "$PWD" == "" ]]; then 11 | echo "Error, \$PWD is empty" 12 | exit 1 13 | fi 14 | 15 | # save current dir and get repo dir 16 | # we need an absolute path without any .. in them otherwise these various layers of scripts get confused 17 | BUILD_DIR="$PWD" 18 | 19 | cd .. 20 | REPO_DIR="$PWD" 21 | 22 | # back to build dir 23 | cd "$BUILD_DIR" 24 | 25 | # only scan c++ files in src, we don't want to scan the generated easyeffects-resources.c file 26 | # it is fine to use -fix everywhere, since it will still exit with error even if errors were all automatically fixed. 27 | # however we do not use -fix since it is safer to just manually fix things 28 | python3 ../util/run-clang-tidy.py -p . -config-file=../.clang-tidy "$REPO_DIR"/src/*.cpp 29 | -------------------------------------------------------------------------------- /util/crystalizer.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | 3 | import numpy as np 4 | import matplotlib.pyplot as plt 5 | import scipy.io.wavfile as wavefile 6 | 7 | rate, wave = wavefile.read('test.wav') 8 | 9 | wave_y = wave[14000:15000] 10 | wave_x = np.arange(wave_y.size) 11 | 12 | t = wave_x 13 | original = wave_y 14 | 15 | standard = np.copy(original) 16 | deriv2 = np.zeros(original.size) 17 | 18 | intensity = 2.0 19 | 20 | # the boundaries are better handled in the plugin code 21 | 22 | for n in range(original.size): 23 | if n > 0 and n < original.size - 1: 24 | deriv2[n] = original[n + 1] - 2 * original[n] + original[n - 1] 25 | elif n == 0: 26 | deriv2[0] = original[n + 1] - 2 * original[n] + original[n] 27 | elif n == original.size - 1: 28 | deriv2[n] = original[n] - 2 * original[n] + original[n - 1] 29 | 30 | for n in range(standard.size): 31 | standard[n] -= intensity * deriv2[n] 32 | 33 | aggressive = np.copy(standard) 34 | 35 | if intensity >= 1: 36 | ndivs = 1000 37 | gain = np.linspace(1, intensity, ndivs) 38 | dv = 0.5 / ndivs 39 | 40 | for n in range(standard.size): 41 | v = aggressive[n] 42 | 43 | idx = int(np.floor(np.fabs(v) / dv)) 44 | 45 | if idx < 0: 46 | idx = 0 47 | elif idx > gain.size: 48 | idx = gain.size - 1 49 | 50 | aggressive[n] = v * gain[idx] 51 | 52 | 53 | fig = plt.figure() 54 | 55 | plt.plot(t, original, 'bo-', markersize=4, label='original') 56 | plt.plot(t, standard, 'ro-', markersize=4, label='standard') 57 | plt.plot(t, aggressive, 'go-', markersize=4, label='aggressive') 58 | 59 | fig.legend() 60 | 61 | plt.xlabel('Arbitrary Time', fontsize=18) 62 | plt.ylabel('Waveform', fontsize=18) 63 | plt.grid() 64 | 65 | plt.show() 66 | -------------------------------------------------------------------------------- /util/environmental_variables.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | export GSETTINGS_SCHEMA_DIR=../../data/schemas/ 4 | export G_MESSAGES_DEBUG=easyeffects 5 | export ASAN_OPTIONS="detect_stack_use_after_return=1:check_initialization_order=1" 6 | export LSAN_OPTIONS="print_suppressions=true:suppressions=../../util/sanitizer.supp" 7 | 8 | alias ee_valgrind='valgrind --suppressions=/usr/share/gtk-4.0/valgrind/gtk.supp --suppressions=/usr/share/glib-2.0/valgrind/glib.supp --leak-check=full --show-leak-kinds=definite' 9 | -------------------------------------------------------------------------------- /util/flatpak/patch/bs2b/001-fix-automake-dist-lzma.patch: -------------------------------------------------------------------------------- 1 | --- a/configure.ac 2 | +++ b/configure.ac 3 | @@ -4,8 +4,8 @@ 4 | AC_PREREQ([2.63]) 5 | AC_INIT([libbs2b], [3.1.0], [boris_mikhaylov@users.sourceforge.net]) 6 | AC_CONFIG_AUX_DIR([build-aux]) 7 | -AM_INIT_AUTOMAKE([1.10.1 -Wall foreign subdir-objects 8 | - dist-zip dist-bzip2 dist-lzma]) 9 | +AM_INIT_AUTOMAKE([1.11.2 -Wall foreign subdir-objects 10 | + dist-zip dist-bzip2 dist-xz]) 11 | AC_CONFIG_SRCDIR([src/bs2b.h]) 12 | 13 | # Checks for programs. 14 | -------------------------------------------------------------------------------- /util/flatpak/patch/zita-convolver/0001-Fix-makefile.patch: -------------------------------------------------------------------------------- 1 | From 5980950dbae82c6a03b38b8e66e07a8b29068a00 Mon Sep 17 00:00:00 2001 2 | From: AsavarTzeth <asavartzeth@gmail.com> 3 | Date: Thu, 19 Jul 2018 21:55:38 +0200 4 | Subject: [PATCH] Fix makefile 5 | 6 | - ldconfig should not be called by Makefile 7 | - Add missing symlink for major version of lib 8 | --- 9 | source/Makefile | 3 +-- 10 | 1 file changed, 1 insertion(+), 2 deletions(-) 11 | 12 | diff --git a/source/Makefile b/source/Makefile 13 | index 776c067..a15bea9 100644 14 | --- a/source/Makefile 15 | +++ b/source/Makefile 16 | @@ -34,7 +34,6 @@ VERSION = $(MAJVERS).$(MINVERS) 17 | CPPFLAGS += -I. -D_REENTRANT -D_POSIX_PTHREAD_SEMANTICS 18 | CPPFLAGS += -DENABLE_VECTOR_MODE 19 | CXXFLAGS += -fPIC -Wall -ffast-math -funroll-loops -O2 20 | -CXXFLAGS += -march=native 21 | LDLFAGS += 22 | LDLIBS += 23 | 24 | @@ -56,8 +55,8 @@ install: $(ZITA-CONVOLVER_MIN) 25 | install -d $(DESTDIR)$(LIBDIR) 26 | install -m 644 $(ZITA-CONVOLVER_H) $(DESTDIR)$(INCDIR) 27 | install -m 755 $(ZITA-CONVOLVER_MIN) $(DESTDIR)$(LIBDIR) 28 | - ldconfig 29 | ln -sf $(ZITA-CONVOLVER_MIN) $(DESTDIR)$(LIBDIR)/$(ZITA-CONVOLVER_SO) 30 | + ln -sf $(ZITA-CONVOLVER_MIN) $(DESTDIR)$(LIBDIR)/$(ZITA-CONVOLVER_MAJ) 31 | 32 | uninstall: 33 | rm -rf $(DESTDIR)$(INCDIR)/$(ZITA-CONVOLVER_H) 34 | -------------------------------------------------------------------------------- /util/flatpak/shared-modules/linux-audio/fftw3f.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "fftw3f", 3 | "config-opts": [ 4 | "--enable-threads", 5 | "--enable-shared", 6 | "--disable-static", 7 | "--enable-float" 8 | ], 9 | "build-options": { 10 | "arch": { 11 | "x86_64": { 12 | "config-opts": [ 13 | "--enable-sse2", 14 | "--enable-avx", 15 | "--enable-avx-128-fma" 16 | ] 17 | }, 18 | "aarch64": { 19 | "config-opts": [ 20 | "--enable-neon" 21 | ] 22 | } 23 | } 24 | }, 25 | "sources": [ 26 | { 27 | "type": "archive", 28 | "url": "https://www.fftw.org/fftw-3.3.10.tar.gz", 29 | "sha256": "56c932549852cddcfafdab3820b0200c7742675be92179e59e6215b340e26467" 30 | } 31 | ], 32 | "cleanup": [ 33 | "/bin", 34 | "/include", 35 | "/lib/cmake", 36 | "/lib/pkgconfig", 37 | "/share/man", 38 | "*.la", 39 | "*.so" 40 | ] 41 | } 42 | -------------------------------------------------------------------------------- /util/flatpak/shared-modules/linux-audio/ladspa.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "ladspa", 3 | "no-autogen": true, 4 | "subdir": "src", 5 | "make-install-args": [ 6 | "INSTALL_PLUGINS_DIR=/app/lib/ladspa", 7 | "INSTALL_INCLUDE_DIR=/app/include", 8 | "INSTALL_BINARY_DIR=/app/bin" 9 | ], 10 | "sources": [ 11 | { 12 | "type": "archive", 13 | "url": "http://www.ladspa.org/download/ladspa_sdk_1.17.tgz", 14 | "sha256": "27d24f279e4b81bd17ecbdcc38e4c42991bb388826c0b200067ce0eb59d3da5b" 15 | } 16 | ] 17 | } 18 | -------------------------------------------------------------------------------- /util/flatpak/shared-modules/linux-audio/lv2.json: -------------------------------------------------------------------------------- 1 | 2 | { 3 | "name": "lv2", 4 | "buildsystem": "meson", 5 | "cleanup": [ 6 | "/bin", 7 | "/include", 8 | "/lib/pkgconfig", 9 | "/share" 10 | ], 11 | "sources": [ 12 | { 13 | "type": "archive", 14 | "url": "https://lv2plug.in/spec/lv2-1.18.10.tar.xz", 15 | "sha256": "78c51bcf21b54e58bb6329accbb4dae03b2ed79b520f9a01e734bd9de530953f" 16 | } 17 | ], 18 | "post-install": [ 19 | "install -Dm644 -t $FLATPAK_DEST/share/licenses/lv2 ../COPYING", 20 | "ln -sf lv2.pc $FLATPAK_DEST/lib/pkgconfig/lv2core.pc" 21 | ] 22 | } -------------------------------------------------------------------------------- /util/news-release-template.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | Version: UNRELEASED_VERSION 3 | Date: UNRELEASED_DATE 4 | 5 | Description: 6 | - Features∶ 7 | - 8 | 9 | - Bug fixes∶ 10 | - 11 | 12 | - Other notes∶ 13 | - 14 | 15 | -------------------------------------------------------------------------------- /util/sanitizer.supp: -------------------------------------------------------------------------------- 1 | leak:libEGL_mesa* 2 | leak:libfontconfig* 3 | leak:libsigc* 4 | leak:libglib-2* -------------------------------------------------------------------------------- /util/sanitizer.txt: -------------------------------------------------------------------------------- 1 | meson setup _build --prefix=/tmp/ee -Db_sanitize=address,undefined 2 | 3 | G_SLICE=always-malloc G_DEBUG=gc-friendly ./easyeffects 4 | 5 | export LSAN_OPTIONS="print_suppressions=false:suppressions=/path/to/blender-lsan-suppressions.txt" 6 | -------------------------------------------------------------------------------- /util/test.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wwmm/easyeffects/4307dbb82cb189a2e8bc2d1bb4efc532734d2e16/util/test.wav -------------------------------------------------------------------------------- /util/update_translation_templates.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | ninja easyeffects-pot 4 | ninja easyeffects-update-po 5 | ninja easyeffects-news-pot 6 | ninja easyeffects-news-update-po -------------------------------------------------------------------------------- /util/valgrind.txt: -------------------------------------------------------------------------------- 1 | valgrind --suppressions=/usr/share/gtk-4.0/valgrind/gtk.supp --suppressions=/usr/share/glib-2.0/valgrind/glib.supp --leak-check=full --show-leak-kinds=definite 2 | --------------------------------------------------------------------------------